# LightGBM 알고리즘 활용을 위해 패키지 lightgbm 설치 install.packages('lightgbm')
# lightgbm 패키지 로드 library(lightgbm)
본 예제는 기본 사용법에 대한 안내 수준이에요. bank 데이터 세트 중 일부를 기반으로 간단한 이진 분류 모델을 구축하는 방법을 보도록 할게요(Moro, Cortez, Rita 2014). "age"와 "balance"이라는 두 가지 input feature를 사용하여 고객이 정기 예금에 가입했는지 여부를 예측할게요.
The dataset
data(bank, package = "lightgbm") # lightgbm 패키지에 있는 bank 데이터 세트 불러오기 str(bank) # 데이터 구조 확인 총 4521개 데이터 인스턴스 및 17개의 변수 확인 / 데이터 형태 확인
# 3개의 변수 (Y(y): 종속변수 1개 / X: 설명변수 2개(age,balance) 의 첫 5개 데이터 확인 bank[1:5, c("y", "age", "balance")]
# 종속변수 분포 확인 table(bank$y)
Training the model
LightGBM의 R 패키지는 모델을 훈련하는 두 가지 함수를 제공해요.
lgb.train(): LightGBM의 주요 훈련 로직이에요. 완전한 유연성을 제공하지만, lgb.Dataset() 함수로 생성된 Dataset 객체가 있어야 사용할 수 있어요.
lightgbm(): lgb.train() 보다는 간단하지만 덜 유연합니다. lgb.Dataset()을 사용하지 않고도 해당 함수에 데이터를 전달할 수 있어요.
<Using thelightgbm()function>
첫 번째 단계에서 데이터를 숫자로 변환해야 합니다!그런 다음 lightgbm() 함수로 모델을 적합할 수 있어요.
# 종속변수와 feature를 숫자형으로 변환 y <- as.numeric(bank$y == "yes") X <- data.matrix(bank[, c("age", "balance")])
# 훈련(Train) fit <- lightgbm( data = X , label = y , params = list( num_leaves = 4 # max number of leaves in one tree: 4 , learning_rate = 1.0 # shrinkage rate: 1.0 , objective = "binary" # 목적함수 ) , nrounds = 10L # Tree 개수: 10 , verbose = -1L # LightGBM의 자세한 결과의 정도 제어 )
# 결과 summary(predict(fit, X))
작동을 잘 한 것 같아요! 그리고 예측 값이 실제로 0과 1 사이의 확률값으로 산출되었네요!
<Using thelgb.train()function>
또는 더 유연한 인터페이스 lgb.train()을 사용할 수 있어요.
여기서 추가적인 단계로 LightGBM의 데이터 API lgb.Dataset()로 y와 X를 준비해야 하고요.
Parameter는 명명된 list로 lgb.train()에 전달돼요.
# Data interface dtrain <- lgb.Dataset(X, label = y)
# Parameter 셋팅 params <- list( objective = "binary" # 목적함수 셋팅 , num_leaves = 4L # max number of leaves in one tree: 4 , learning_rate = 1.0 # shrinkage rate: 1.0 )
# Train fit <- lgb.train( params , data = dtrain , nrounds = 10L # Tree 개수: 10 , verbose = -1L # LightGBM의 자세한 결과의 정도 제어 )
# 요약 결과 출력 summary(predict(fit, X))
간단한 예제로 lightgbm() 함수를 사용한 결과와 lgb.train() 함수를 사용한 결과가 동일하네요!
댓글