ステップ 27 機械学習分類の実践: LightGBM モデリング


序文

LightGBMモデリング〜


1.Pythonパラメータ調整

(1) モデリング前の準備

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
dataset = pd.read_csv('X disease code fs.csv')
X = dataset.iloc[:, 1:14].values
Y = dataset.iloc[:, 0].values

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.30, random_state = 666)
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

(2) LightGBMのパラメータ調整戦略

まずパラメータを確認します。調整する必要があるパラメータは次のとおりです。

learning_rate : 通常、最初に 0.1 に設定し、最後に調整します. 適切な候補値は: [0.01, 0.015, 0.025, 0.05, 0.1]; ② max_ Depth : ツリーの最大の深さ
デフォルト値-1 は制限なしを意味し、適切な設定により過学習を防ぐことができます;
num_leaves : リーフの数、デフォルト値は 31、このパラメータの値は 2^max_ Depth 未満である必要があります;
min_data_in_leaf /min_child_samples : より大きい設定により、過度に深いツリーの生成を回避できますが、アンダーフィッティングにつながる可能性があります。デフォルト値は 20 です。 ⑤
min_split_gain :デフォルト値は 0 です。値が大きいほど、モデルはより保守的になります。推奨される候補値は次のとおりです。 : [0, 0.05 ~ 0.1, 0.3, 0.5, 0.7 , 0.9, 1];
サブサンプル: 1 未満の比率を選択すると、過学習を防ぐことができますが、サンプル フィッティングの偏差が大きくなります。推奨される候補値は次のとおりです。 [0.6, 0.7, 0.8, 0.9, 1];
⑦colsample_bytree : 特徴ランダムサンプリングの比率、デフォルト値は1、推奨される候補値は: [0.6, 0.7, 0.8, 0.9, 1]; ⑧ reg_alpha : 推奨される候補値は:
[ 0 , 0.01~0.1, 1];
reg_lambda: 推奨される候補値は次のとおりです: [0, 0.1, 0.5, 1];

マスターのパラメータ調整戦略を参照してください:
learning_rate は0.1 に設定されます;
② パラメータ調整: max_ Depth、num_leaves、min_data_in_leaf、min_split_gain、subsample、colsample_bytree ;
③ パラメータ調整: reg_lambda 、 reg_alpha ;
④ 学習率を下げ、パラメータの調整を続けます、学習率が適切である 候補値は: [0.01, 0.015, 0.025, 0.05, 0.1] ;

(3) LightGBMパラメータ調整デモ

(A) デフォルトのパラメータを最初に使用します。

import lightgbm as lgb
classifier = lgb.LGBMClassifier(boosting='gbdt', objective='binary', metric='auc')
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
y_testprba = classifier.predict_proba(X_test)[:,1] 
y_trainpred = classifier.predict(X_train)
y_trainprba = classifier.predict_proba(X_train)[:,1]
from sklearn.metrics import confusion_matrix
cm_test = confusion_matrix(y_test, y_pred)
cm_train = confusion_matrix(y_train, y_trainpred)
print(cm_train)
print(cm_test)

結果を確認し、適切に過学習を続けます:
ここに画像の説明を挿入
(B) max_ Depth、num_leaves、min_data_in_leaf、min_split_gain、subsample、colsample_bytree を調整します:
(a) learning_rate を 0.1 に設定し、次に max_ Depth、num_leaves、min_data_in_leaf になります。

param_grid=[{
    
    
              'max_depth': [5, 10, 15, 20, 25, 30, 35],
              'num_leaves': range(5, 100, 5),
              'min_data_in_leaf': range(5,200,10),              
            },
           ]
boost = lgb.LGBMClassifier(boosting='gbdt', objective='binary', metric='auc', learning_rate=0.1)
from sklearn.model_selection import GridSearchCV
grid_search = GridSearchCV(boost, param_grid, n_jobs = -1, verbose = 2, cv=10)      
grid_search.fit(X_train, y_train)    
classifier = grid_search.best_estimator_  
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
y_testprba = classifier.predict_proba(X_test)[:,1] 
y_trainpred = classifier.predict(X_train)
y_trainprba = classifier.predict_proba(X_train)[:,1]
from sklearn.metrics import confusion_matrix
cm_test = confusion_matrix(y_test, y_pred)
cm_train = confusion_matrix(y_train, y_trainpred)
print(cm_train)
print(cm_test)

最適なパラメーター: max_ Depth=10、min_data_in_leaf=95、num_leaves=10
興味深いパフォーマンスを見てください:

ここに画像の説明を挿入
ここに画像の説明を挿入
(b) Min_split_gain、subsample、およびcolsample_bytree:

param_grid=[{
    
    
              'min_split_gain': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],
              'subsample': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],
              'colsample_bytree': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],              
            },
           ]

boost = lgb.LGBMClassifier(boosting='gbdt', objective='binary', metric='auc', learning_rate=0.1, max_depth=10,min_data_in_leaf=95, num_leaves=10)

最適なパラメーター:colsample_bytree=0.8、min_split_gain=0.6、subsample=0.1。
パフォーマンスを見てください。ほぼ次のとおりです。

ここに画像の説明を挿入ここに画像の説明を挿入

(C) lambda_l1 と lambda_l2 を決定します。

param_grid=[{
    
    
              'reg_alpha': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],
              'reg_lambda': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],          
            },
           ]

boost = lgb.LGBMClassifier(boosting='gbdt', objective='binary', metric='auc', learning_rate=0.1, max_depth=10,min_data_in_leaf=95, num_leaves=10, colsample_bytree=0.8, min_split_gain=0.6, subsample=0.1)

最適なパラメータ: reg_alpha=0.8、reg_lambda=0.3。
パフォーマンスを見てください:

ここに画像の説明を挿入
ここに画像の説明を挿入
(D) learning_rate を決定します。

param_grid=[{
    
    
              'learning_rate': [0.01, 0.015, 0.025, 0.05, 0.075, 0.1, 0.2, 0.3],  
            },
           ]

boost = lgb.LGBMClassifier(boosting='gbdt', objective='binary', metric='auc', max_depth=10,min_data_in_leaf=95, num_leaves=10,
                           colsample_bytree=0.8, min_split_gain=0.6, subsample=0.1, reg_alpha=0.8, reg_lambda=0.3)

変化がなければ0.1のままなので問題ありません。

今回は包括的な微調整は行わず、いくつかのパラメーター (feature_fraction、bagging_fraction、bagging_freq など) を調整していません。自分で試して、具体的なパフォーマンスを直接確認してください。

ここに画像の説明を挿入
ここに画像の説明を挿入


第二段階:SPSSPROパラメータ調整(自分で考えました)


要約する

この LightGBM はまだ非常に複雑なので、表面的な情報だけを紹介しますが、詳細については公式ドキュメントやネットワーク リソースを参照してください。

おすすめ

転載: blog.csdn.net/qq_30452897/article/details/129270904