본문 바로가기
Machine Learning/LightGBM

Machine Learning (LightGBM)코드 예제(with R)

by 찐남 2022. 1. 13.
LightGBM으로 모델을 훈련시킨 다음 이를 사용하여 새로운 데이터에 대한 예측 수행

lightgbm()

# 코드 형식
lightgbm(
  data,
  label = NULL,
  weight = NULL,
  params = list(),
  nrounds = 100L,
  verbose = 1L,
  eval_freq = 1L,
  early_stopping_rounds = NULL,
  save_name = "lightgbm.model",
  init_model = NULL,
  callbacks = list(),
  serializable = TRUE,
  ...
)
  • Arguments
    • data: 훈련에 사용되는 lgb.Dataset 객체. lgb.cv와 같은 일부 함수를 사용하면 매트릭스와 같은 다른 유형의 데이터를 전달한 다음 키워드 인수로 라벨을 별도로 제공할 수 있습니다.
    • label: 데이터가 lgb.Dataset이 아닌 경우 사용되는 라벨 벡터
    • weight: 응답 값의 벡터입니다. NULL이 아니면 데이터 세트로 설정
    • params: 매개변수 list
    • nrounds: 훈련 라운드 수
    • verbose: <= 0인 경우 출력에 대한 자세한 표시도 훈련 중 평가 인쇄를 비활성화합니다.
    • eval_freq: 평가 출력 빈도, verbose > 0일 때만 효과 
    • early_stopping_rounds: 정수 값. 조기 정지를 활성화합니다. 이 매개변수가 null이 아닌 경우, 유효성 검사 세트의 메트릭 평가가 early_stopping_rounds 연속 부스팅 라운드에 대해 개선되지 않으면 훈련이 중지됩니다. 훈련이 일찍 중지되면 반환된 모델에는 best_iter 속성이 최상의 반복의 반복 횟수로 설정됩니다. 
    • save_name: 학습된 모델을 디스크에 쓸 때 사용할 파일 이름입니다. ".model"로 끝나야 합니다. 'NULL'을 전달하면 학습된 모델을 디스크에 저장하지 않습니다.
    • init_model: lgb.Booster 개체의 모델 파일 경로. 이 모델에서 계속 학습
    • callbacks: 각 반복에 적용되는 콜백 함수 목록입니다.
    • serializable: save 또는 saveRDS와 같은 함수를 통한 결과 객체의 직렬화 가능 여부("모델 직렬화" 섹션 참조). 
    • ... : 추가 인수들
  • Value: 훈련된 lgb.Booster
  • Early Stopping
    • "Early Stopping"은 주어진 검증 데이터 세트에 대한 모델의 성능이 여러 번의 연속 반복에 대해 개선되지 않는 경우 훈련 프로세스를 중지하는 것을 의미합니다. 여러 인수가 eval에 제공되면 순서가 유지됩니다. params에서 Early_stopping_rounds를 설정하여 조기 중지를 활성화하면 기본적으로 모든 메트릭이 조기 중지로 간주됩니다. Early Stopping에 대한 첫 번째 메트릭만 고려하려면 params에 first_metric_only = TRUE를 전달합니다.  params에서도 메트릭을 지정하면 해당 메트릭이 "첫 번째" 것으로 간주됩니다. 메트릭을 생략하면 매개변수 obj(키워드 인수) 또는 objective(params로 전달됨)에 대한 선택에 따라 기본 메트릭이 사용됩니다.

 

 


lgb.train()

Logic to train with LightGBM

# 코드 형식
lgb.train(
  params = list(),
  data,
  nrounds = 100L,
  valids = list(),
  obj = NULL,
  eval = NULL,
  verbose = 1L,
  record = TRUE,
  eval_freq = 1L,
  init_model = NULL,
  colnames = NULL,
  categorical_feature = NULL,
  early_stopping_rounds = NULL,
  callbacks = list(),
  reset_data = FALSE,
  serializable = TRUE
)
  • Arguments
    • params: 매개변수 list
    • data: 훈련에 사용되는 lgb.Dataset 객체. lgb.cv와 같은 일부 함수를 사용하면 행렬과 같은 다른 유형의 데이터를 전달한 다음 키워드 인수로 레이블을 별도로 제공할 수 있습니다.
    • nrounds: 훈련 라운드 수
    • label: 데이터가 lgb.Dataset이 아닌 경우 사용되는 라벨 벡터
    • weight: 응답 값의 벡터입니다. NULL이 아니면 데이터 세트로 설정
    • valids: 검증에 사용되는 lgb.Dataset 객체 목록
    • obj: 목적 함수로 문자 또는 사용자 정의 목적 함수일 수 있습니다. 아래 예에서는 regression, regression_l1, huber, binary, lambdarank, multiclass, multiclass가 포함됩니다. 
    • eval: 평가 함수. 이것은 문자형 벡터, 함수 또는 문자열과 함수가 혼합된 list
      1. character vector: 이 인수에 문자 벡터를 제공하는 경우 유효한 평가 메트릭이 있는 문자열을 포함해야 함
      2. function: 사용자 정의 평가 함수 제공. 이것은 키워드 인수 preds 및 dtrain을 허용해야 하며 세 가지 요소가 포함된 list 반환
        1. name: 결과를 인쇄하고 저장하는 데 사용되는 메트릭 이름이 있는 문자열입니다.
        2. value: 주어진 예측 및 참 값에 대한 메트릭 값을 나타내는 단일 숫자 
        3. higher_better: 더 높은 값이 더 나은 적합을 나타내는지 여부를 나타내는 부울입니다. 예를 들어, MAE 또는 RMSE와 같은 측정항목의 경우 FALSE입니다. 
      3. list: list가 제공되면 문자형 벡터와 함수만 포함해야 합니다. 이는 위 설명의 요구 사항을 따라야 합니다.
    • verbose: 평가 출력 빈도, verbose > 0일 때만 효과 
    • record: 부울, TRUE는 booster$record_evals에 반복 메시지를 기록
    • eval_freq: 평가 출력 빈도, verbose > 0일 때만 효과 
    • init_model: lgb.Booster 개체의 모델 파일 경로. 이 모델에서 계속 학습
    • colnames: feature name. null이 아닌 경우 이를 사용하여 데이터 세트의 이름을 덮어씁니다.
    • categorical_feature: 범주형 feature. 이것은 기능 이름의 문자 벡터 또는 feature 인덱스가 있는 정수 벡터일 수 있습니다(예: "첫 번째 및 열 번째 열"을 나타내는 c(1L, 10L)).
    • early_stopping_rounds: 정수값. 조기 정지를 활성화합니다. 이 매개변수가 null이 아닌 경우, 유효성 검사 세트의 메트릭 평가가 early_stopping_rounds 연속 부스팅 라운드에 대해 개선되지 않으면 훈련이 중지됩니다. 훈련이 일찍 중지되면 반환된 모델에는 best_iter 속성이 최상의 반복의 반복 횟수로 설정됩니다. 
    • callbacks: 각 반복에 적용되는 콜백 함수 목록입니다.
    • save_name: 학습된 모델을 디스크에 쓸 때 사용할 파일 이름입니다. ".model"로 끝나야 합니다. 'NULL'을 전달하면 학습된 모델을 디스크에 저장하지 않습니다.
    • reset_data: 부울. TRUE(기본값 아님)로 설정하면 부스터 모델이 메모리와 원래 데이터 세트를 확보하는 예측 모델로 변환됩니다.
    • serializable: save 또는 saveRDS와 같은 함수를 통한 결과 객체의 직렬화 가능 여부("모델 직렬화" 섹션 참조). 
  • Value: 훈련된 lgb.Booster
  • Early Stopping
    • "Early Stopping"은 주어진 검증 데이터 세트에 대한 모델의 성능이 여러 번의 연속 반복에 대해 개선되지 않는 경우 훈련 프로세스를 중지하는 것을 의미합니다. 여러 인수가 eval에 제공되면 순서가 유지됩니다. params에서 Early_stopping_rounds를 설정하여 조기 중지를 활성화하면 기본적으로 모든 메트릭이 조기 중지로 간주됩니다. Early Stopping에 대한 첫 번째 메트릭만 고려하려면 params에 first_metric_only = TRUE를 전달합니다.  params에서도 메트릭을 지정하면 해당 메트릭이 "첫 번째" 것으로 간주됩니다. 메트릭을 생략하면 매개변수 obj(키워드 인수) 또는 objective(params로 전달됨)에 대한 선택에 따라 기본 메트릭이 사용됩니다.
# 사용 예시
# LightGBM 패키지 로드
library(lightgbm)

# MLmetrics 패키지 로드
library(MLmetrics)

# LightGBM 패키지에 있는 bank 데이터 가져오기 
data(bank, package = "lightgbm")

# 데이터 전처리 
data_lightgbm <- bank
data_lightgbm$job <- as.factor(data_lightgbm$job)
data_lightgbm$marital <- as.factor(data_lightgbm$marital)
data_lightgbm$education <- as.factor(data_lightgbm$education)
data_lightgbm$default <- as.factor(data_lightgbm$default)
data_lightgbm$housing <- as.factor(data_lightgbm$housing)
data_lightgbm$loan <- as.factor(data_lightgbm$loan)
data_lightgbm$contact <- as.factor(data_lightgbm$contact)
data_lightgbm$month <- as.factor(data_lightgbm$month)
data_lightgbm$poutcome <- as.factor(data_lightgbm$poutcome)
data_lightgbm$y <- as.factor(data_lightgbm$y)
y <- as.numeric(data_lightgbm$y == "yes")

data_lightgbm_final <- lgb.convert_with_rules(data_lightgbm)

# test data set sampling index 정의
train_index <- sample(1:dim(data_lightgbm_final$data)[1], 2000)

# train 및 test data 생성 
train_lgbm <- data_lightgbm_final$data[-train_index,]
test_lgbm <- data_lightgbm_final$data[train_index,]

# train data 숫자형 변환
x_train <- as.matrix(train_lgbm[,-"y"])

# train data target 세팅
y_train <- y[-train_index]

# test data 숫자형 변환
x_test <- as.matrix(test_lgbm[,-"y"])

# test data target 세팅
y_test <- y[train_index]


# LightGBM 적용
# -----------------------------------------------------------
dtrain <- lgb.Dataset(x_train, label = y_train)
dtest <- lgb.Dataset.create.valid(dtrain, x_test, label = y_test)

params <- list(
  objective = "binary"
  , metric = "auc"
  , min_data = 50
  , learning_rate = 0.3
)
valids <- list(test = dtest)
model <- lgb.train(
  params = params
  , data = dtrain
  , nrounds = 10
  , valids = valids
  , early_stopping_rounds = 1
)

 

 


predict(<lgb.Booster>): LightGBM 모델에 대한 예측 방법

lgb.Booster 클래스를 기반으로 한 예측 값

# 코드 형식
predict(
  object,
  data,
  start_iteration = NULL,
  num_iteration = NULL,
  rawscore = FALSE,
  predleaf = FALSE,
  predcontrib = FALSE,
  header = FALSE,
  reshape = FALSE,
  params = list(),
  ...
)
  • Arguments
    • object: lgb.Booster 클래스
    • data: matrix 객체, dgCMatrix 객체 또는 텍스트 파일(CSV, TSV 또는 LibSVM)의 경로를 나타내는 문자
    • start_iteration: int 또는 None, 선택 사항(기본값=None). 예측할 반복의 시작 인덱스입니다. None 또는 <= 0이면 첫 번째 반복부터 시작
    • num_iteration: int 또는 None, 선택 사항(기본값=None) 예측의 반복 횟수를 제한합니다. None이면 최상의 반복이 존재하고 start_iteration이 None 또는 <= 0이면 최상의 반복이 사용됩니다. 그렇지 않으면 start_iteration의 모든 반복이 사용됩니다. <= 0이면 start_iteration의 모든 반복이 사용됩니다(제한 없음).
    • rawscore: 반복 결과를 부스팅 한 예측의 변환되지 않은 원래 합계에서 예측을 반환해야 하는지 여부. 예를 들어, 로지스틱 회귀에 대해 rawscore=TRUE를 설정하면 확률 대신 로그 승산에 대한 예측 발생
    • predleaf: 대신 리프 인덱스의 예측 여부.
    • predcontrib: 각 레코드에 대한 feature별 기여를 반환
    • header: 텍스트 파일에 대한 예측에만 사용. 텍스트 파일에 헤더가 있으면 참
    • reshape: 사례당 여러 예측 출력이 있는 경우 예측 벡터를 행렬 형식으로 재구성할지 여부
    • params: 매개변수 list
    • ... : 무시
  • Value: 회귀 또는 이진 분류의 경우 길이가 nrows(data)인 벡터를 반환. 다중 클래스 분류의 경우 reshape 값에 따라 num_class * nrows(data) 벡터 또는 (nrows(data), num_class) 차원 행렬 반환. predleaf = TRUE인 경우 출력은 트리 수에 해당하는 열 수를 가진 행렬 객체입니다.
# 코드 예시
preds <- predict(model, x_test)
preds
결과 중 일부 예측값 출력 예시

 

lgb.cv(): Cross validation logic used by LightGBM

# 코드 형식
lgb.cv(
  params = list(),
  data,
  nrounds = 100L,
  nfold = 3L,
  label = NULL,
  weight = NULL,
  obj = NULL,
  eval = NULL,
  verbose = 1L,
  record = TRUE,
  eval_freq = 1L,
  showsd = TRUE,
  stratified = TRUE,
  folds = NULL,
  init_model = NULL,
  colnames = NULL,
  categorical_feature = NULL,
  early_stopping_rounds = NULL,
  callbacks = list(),
  reset_data = FALSE,
  serializable = TRUE,
  eval_train_metric = FALSE
)
  • Arguments
    • params: 매개변수 list
    • data: matrix 객체, dgCMatrix 객체 또는 텍스트 파일(CSV, TSV 또는 LibSVM)의 경로를 나타내는 문자
    • nrounds: 훈련 라운드 수
    • nfold: 원본 데이터 세트는 nfold 동일한 크기의 하위 샘플로 무작위 분할
    • label: 데이터가 lgb.Dataset이 아닌 경우 사용되는 라벨 벡터
    • weight: 응답 값의 벡터입니다. NULL이 아니면 데이터 세트로 설정
    • obj: 목적 함수로 문자 또는 사용자 정의 목적 함수일 수 있습니다. 아래 예에서는 regression, regression_l1, huber, binary, lambdarank, multiclass, multiclass가 포함됩니다. 
    • 평가 함수. 이것은 문자형 벡터, 함수 또는 문자열과 함수가 혼합된 list
      1. character vector: 이 인수에 문자 벡터를 제공하는 경우 유효한 평가 메트릭이 있는 문자열을 포함해야 함
      2. function: 사용자 정의 평가 함수 제공. 이것은 키워드 인수 preds 및 dtrain을 허용해야 하며 세 가지 요소가 포함된 list 반환
        1. name: 결과를 인쇄하고 저장하는 데 사용되는 메트릭 이름이 있는 문자열입니다.
        2. value: 주어진 예측 및 참 값에 대한 메트릭 값을 나타내는 단일 숫자 
        3. higher_better: 더 높은 값이 더 나은 적합을 나타내는지 여부를 나타내는 부울입니다. 예를 들어, MAE 또는 RMSE와 같은 측정항목의 경우 FALSE입니다. 
      3. list: list가 제공되면 문자형 벡터와 함수만 포함해야 합니다. 이는 위 설명의 요구 사항을 따라야 합니다.
    • verbose: <= 0인 경우 출력에 대한 자세한 표시도 훈련 중 평가 인쇄를 비활성화
    • object: lgb.Booster 클래스 
    • record: 부울, TRUE는 booster$record_evals에 반복 메시지를 기록
    • eval_freq: 평가 출력 빈도, verbose > 0일 때만 효과 
    • showsd: 부울, 교차 검증의 표준 편차를 표시할지 여부. 이 매개변수의 기본값은 TRUE입니다. FALSE로 설정하면 불필요한 계산을 피함으로써 약간의 속도 향상으로 이어질 수 있습니다.
    • stratified: 라벨 값으로 층화 추출되어야 하는지 여부를 나타내는 부울
    • folds: list는 미리 정의된 CV fold list를 사용할 수 있는 가능성을 제공합니다(각 요소는 테스트 폴드 인덱스의 벡터여야 함). fold가 제공되면 nfold 및 stratified 매개변수는 무시됩니다.
    • init_model: lgb.Booster 개체의 모델 파일 경로. 이 모델에서 계속 학습
    • colnames: feature name. null이 아닌 경우 이를 사용하여 데이터 세트의 이름을 덮어씁니다.
    • categorical_feature: 범주형 feature. 이것은 기능 이름의 문자 벡터 또는 feature 인덱스가 있는 정수 벡터일 수 있습니다(예: "첫 번째 및 열 번째 열"을 나타내는 c(1L, 10L)).
    • early_stopping_rounds: 정수 값. 조기 정지를 활성화합니다. 이 매개변수가 null이 아닌 경우, 유효성 검사 세트의 메트릭 평가가 early_stopping_rounds 연속 부스팅 라운드에 대해 개선되지 않으면 훈련이 중지됩니다. 훈련이 일찍 중지되면 반환된 모델에는 best_iter 속성이 최상의 반복의 반복 횟수로 설정됩니다. 
    • callbacks: 각 반복에 적용되는 콜백 함수 list
    • reset_data: 부울. TRUE(기본값 아님)로 설정하면 부스터 모델이 메모리와 원래 데이터 세트를 확보하는 예측 모델로 변환됩니다.
    • serializable: save 또는 saveRDS와 같은 함수를 통한 결과 객체의 직렬화 가능 여부("모델 직렬화" 섹션 참조). 
    • eval_train_metric: 부울, 훈련 데이터에 교차 검증 결과를 추가할지 여부. 이 매개변수의 기본값은 FALSE입니다. TRUE로 설정하면 실행 시간이 늘어납니다.
  • Value: 훈련된 모델 lgb.CVBooster
# 코드 예시
model <- lgb.cv( params = params , data = dtrain , nrounds = 5 , nfold = 3 )

반응형

댓글