본문 바로가기
Learning-driven Methodology/ML (Machine Learning)

[LightGBM] Python 패키지 (1)

by goatlab 2022. 6. 28.
728x90
반응형
SMALL

설치

 

pip install lightgbm

 

데이터 인터페이스

 

LightGBM Python 모듈은 다음에서 데이터를 로드할 수 있다.

 

  • LibSVM (zero-based) / TSV / CSV 형식 텍스트 파일
  • NumPy 2D 배열, pandas DataFrame, H2O DataTable의 프레임, SciPy 희소 행렬
  • LightGBM 바이너리 파일
  • LightGBM Sequence개체

 

데이터는 Dataset개체에 저장된다.

 

import numpy as np

# LibSVM(0 기반) 텍스트 파일 또는 LightGBM 바이너리 파일을 Dataset에 로드하려면:
train_data = lgb.Dataset('train.svm.bin')

# numpy 배열을 Dataset에 로드하려면:
data = np.random.rand(500, 10)  # 500 entities, each contains 10 features
label = np.random.randint(2, size=500)  # binary target
train_data = lgb.Dataset(data, label=label)

# scipy.sparse.csr_matrix 배열을 Dataset에 로드하려면:
import scipy
csr = scipy.sparse.csr_matrix((dat, (row, col)))
train_data = lgb.Dataset(csr)
# 시퀀스 개체에서 로드:
# Sequence 바이너리 파일을 읽기 위한 인터페이스를 구현할 수 있습니다. 다음 예는 h5py.
import h5py

class HDFSequence(lgb.Sequence):
    def __init__(self, hdf_dataset, batch_size):
        self.data = hdf_dataset
        self.batch_size = batch_size

    def __getitem__(self, idx):
        return self.data[idx]

    def __len__(self):
        return len(self.data)

f = h5py.File('train.hdf5', 'r')
train_data = lgb.Dataset(HDFSequence(f['X'], 8192), label=f['Y'][:])
Sequence 인터페이스 사용의 특징
  • 데이터 샘플링은 랜덤 액세스를 사용하므로 전체 데이터 세트를 거치지 않습니다.
  • 일괄적으로 데이터를 읽어서 Dataset객체 생성시 메모리 절약
  • Dataset여러 데이터 파일에서 생성 지원
# 데이터 세트를 LightGBM 바이너리 파일에 저장하면 로딩 속도가 빨라짐
train_data = lgb.Dataset('train.svm.txt')
train_data.save_binary('train.bin')

#검증 데이터 생성:
validation_data = train_data.create_valid('validation.svm')

#또는
validation_data = lgb.Dataset('validation.svm', reference=train_data)

 

LightGBM에서 검증 데이터는 훈련 데이터와 정렬되어야 한다.

 

# 특정 기능 이름 및 범주 기능:
train_data = lgb.Dataset(data, label=label, feature_name=['c1', 'c2', 'c3'], categorical_feature=['c3'])

 

LightGBM은 범주형 기능을 직접 입력으로 사용할 수 있다. 원-핫 인코딩으로 변환할 필요가 없으며 원-핫 인코딩보다 훨씬 빠르다 (약 8배 속도 향상).

 

(참고 : 구성하기 전에 범주형 기능을 int 유형으로 변환해야 한다 Dataset.)

 

필요한 경우 가중치를 설정할 수 있다.

 

w = np.random.rand(500, )
train_data = lgb.Dataset(data, label=label, weight=w)

# 또는
train_data = lgb.Dataset(data, label=label)
w = np.random.rand(500, )
train_data.set_weight(w)

 

Dataset.set_init_score() 초기 점수 Dataset.set_group()를 설정하고 작업 순위 지정을 위한 그룹/쿼리 데이터를 설정하는 데 사용할 수 있다.

 

메모리 효율적인 사용

 

LightGBM의 Dataset 개체는 메모리 효율성이 매우 높기 때문에 개별 저장소만 저장하면 된다. 그러나 Numpy/Array/Pandas 객체는 메모리가 크다. 메모리 소비가 걱정되는 경우 다음을 통해 메모리를 절약할 수 있다.

 

  1. Dataset을 구성할 때 free_raw_data=True를 설정 (기본값은 True)
  2. Dataset이 생성된 후에 raw_data=None이 명시적으로 설정됨
  3. gc를 call

 

https://lightgbm.readthedocs.io/en/latest/Python-Intro.html

 

Python-package Introduction — LightGBM 3.3.2.99 documentation

© Copyright 2022, Microsoft Corporation. Revision df14e607.

lightgbm.readthedocs.io

 

728x90
반응형
LIST

'Learning-driven Methodology > ML (Machine Learning)' 카테고리의 다른 글

[LightGBM] Features (1)  (0) 2022.06.28
[LightGBM] Python 패키지 (2)  (0) 2022.06.28
LightGBM  (0) 2022.06.28
[Machine Learning] MLOps  (0) 2022.05.11
[XGBoost] Python Package Introduction (3)  (0) 2022.05.09