본문 바로가기
Machine Learning/LightGBM

이진분류모델 예측 기초 예제 실습(with R)

by 찐남 2022. 1. 11.

Introduction

LightGBM 알고리즘 활용(Ke et al. 2017)

# 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 the lightgbm() 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 the lgb.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() 함수를 사용한 결과가 동일하네요!

이상 LightGBM에 대해서 간단히 알아 보았습니다.

다음 포스팅에서는 LightGBM 관련 여러 옵션들에 대해서 작성하도록 할게요.

 

 

반응형

댓글