【boosting_type】
『gbdt』:traditional Gradient BoostingDecision Tree. 默認是gbdt』。
『dart』:Dropouts meet Multiple AdditiveRegression Trees.
『goss』:Gradient-based One-Side Sampling.
『rf』:Random Forest.
【num_leaves】基學習器最大的葉子節點數
【max_depth】基學習器樹的最大深度
【learning_rate】學習率 callbacks
【n_estimators】基學習器的個數
【subsample_for_bin】(int, optional (default=200000))用於構造直方圖中桶的樣本數。
【class_weight】
(dict, 'balanced' or None, optional(default=None))取值為字典,'balanced',或者None,多分類中類權重,以字典的形式設置{class_label:weight},若是二分類使用is_unbalanceor scale_pos_weight參數. 所有這些的用法參數將導致對單個類概率的較差估計.'balanced'模式使用y的值自動調整權重與輸入數據中的類頻率成反比,類頻率的計算公式為:n_samples /(n_classes *np.bincount(y))。如果為None,所有類的權重都應該是1。注意,如果指定了sample_weight,那麼這些權重將與sample_weight相乘(通過fit方法傳遞)。
【objective】(string, callable or None, optional (default=None))指定學習任務和相應的學習目標或要使用的自定義目標函數 (參見下面的注釋)。默認:「regression」為LGBMRegressor,「binary」或「multiclass」為LGBMClassifier,「lambdarank」為LGBMRanker。
【min_split_gain】(float, optional (default=0.))在樹的葉子節點上進一步分裂所需的最小損失減少量
別名:min_gain_to_split, min_split_gain
【min_child_weight】(float, optional (default=1e-3))子節點(葉節點)中需要的實例權重(hessian)的最小和。
別名:
min_sum_hessian_in_leaf,min_sum_hessian_per_leaf, min_sum_hessian, min_hessian, min_child_weight,constraints: min_sum_hessian_in_leaf>= 0.0
【min_child_samples 】默認= 20,類型= int,子節點(葉節點)所需的最小數據量。
別名:min_data_in_leaf,min_data_per_leaf, min_data
限制: min_data_in_leaf>= 0
【subsample】(float, optional (default=1.))訓練時採樣數據的比例
別名: bagging_fraction , sub_row, subsample, bagging,
限制條件: 0.0 <bagging_fraction <= 1.0
【subsample_freq】(int,optional (default=0)) -bagging 的頻率, 0 意味著禁用 bagging。若大於0表示每 k 次迭代執行bagging。
別名:bagging_freq , subsample_freq
【colsample_bytree】(float, optional (default=1.)) 構建每棵樹時列的採樣比率。
別名:feature_fraction , sub_feature, colsample_bytree,
【reg_alpha】reg_alpha (float, optional (default=0.)) L1 正則項
【reg_lambda】L2正則項
【n_jobs】進程數
【silent】(bool, optional (default=True)) 是否列印消息
【importance_type】要填充到feature_importances_中的特性重要性類型。如果「分割」,結果包含該特性在模型中使用的次數。如果「增益」,則結果包含使用該特性的分割的總增益。
【best_iteration_】(int or None)early_stopping_rounds,則擬合模型的最佳迭代次數
【best_score_】(dict or None)最佳擬合模型得分
【booster_】該模型的booster
【classes_】(array of shape =[n_classes])類標籤數組
【evals_result_】
(dictor None)如果已經指定了early_stopping_rounds,則指評估結果
【feature_importances_】特徵的重要性
【feature_name_】特徵名稱
【n_classes_】int類別數量
【n_features_】int特徵數量
【n_features_in_】int入模型的特徵數量
【objective_】string or callable 擬合模型時的具體目標
(二)fit函數參數
X:
((array-like or sparse matrix of shape =[n_samples,n_features]))特徵矩陣
y:(array-like of shape = [n_samples])目標值
【sample_weight】樣本權重
【init_score】訓練數據的初始得分
【group】訓練數據的分組數據
【eval_set】用作驗證集的(X,y)元組對列表。
【eval_names】 Names of eval_set.
【eval_sample_weight】 驗證數據的權重.
【eval_class_weight】驗證數據的類別權重
【eval_init_score】 驗證數據的初始得分.
【eval_group】 驗證數據的分組數據
【eval_metric】 (string, list of strings, callable or None,optional (default=None)) – 如果是字符串,則應該是使用的內置計算指標。如果可調用(callable),它應該是一個自定義評估指標,請參閱下面的注釋以了解更多細節。在任何一種情況下,來自模型參數的度量都將被評估也被使用過。默認:「l2」表示LGBMRegressor,「logloss」表示LGBMClassifier,「ndcg」表示LGBMRanker
【early_stopping_rounds】 (int or None, optional (default=None))
這個模型將一直訓練,直到驗證分數停止提高。至少每一輪驗證分數都需要提高,才能繼續訓練。需要至少一個驗證數據和一個指標。如果有超過一個,將檢查他們所有。但是訓練數據還是被忽略了。要只檢查第一個度量,請在模型構造函數的附加參數**kwargs中將first_metric_only參數設置為True。
【verbose】 (bool or int, optional (default=True)) –
需要至少一個評估數據。如果為真,則在每個推進階段列印eval set上的eval metric。如果是int,則在每個verbose提升階段列印eval set上的eval metric。最後一個提升階段或使用早期停止輪數發現的提升階段也被列印。使用verbose = 4和eval_set中的至少一個項,評估指標將每4(而不是1)個提升階段列印一次。
【feature_name】 特徵名稱,如果auto而且數據是pandas,就是指的數據列名稱
【categorical_feature】 類別特徵,如果是整型的列表,被解釋為索引,如果是字符串的列表,則被解釋為特徵名稱。如果是auto且是pandas數據結構,則使用pandas無序分類列,分類特徵中的所有值都應小於int32最大值(2147483647)。較大的值可能會消耗內存。考慮從0開始使用連續整數。分類特徵中的所有負值將被視為缺失值。輸出不能對分類特徵單調地加以限制。
(三)Lightgbm優化
3)應對過擬合
(四)應用實例及網格優化參數
import pandas as pdimport numpy as npfrom matplotlib import pyplot as pltfrom sklearn.model_selection import train_test_splitfrom sklearn.model_selection import GridSearchCVimport lightgbm as lgbfrom sklearn.metrics import f1_scorefrom sklearn import metricsfrom sklearn.model_selection import StratifiedKFoldfrom lightgbm import LGBMClassifier#讀取數據train_data = pd.read_excel('./train_data.xlsx')test_data = pd.read_excel('./test_data.xlsx')#獲得特徵變量features = [x for x in train_data.columns if x not in ['new_user_id', 'lable']]#分割測試集與驗證集X_train, X_valid, y_train, y_valid = train_test_split(train_data[features], train_data['lable'], stratify=train_data['lable'], test_size=0.2, random_state=2333)#網格搜索確定n_esrimatorsparameters={'n_esrimators':[100,150,175,200,225,250]} scores = { 'acc': 'accuracy', # 準確率 'f1_mi': 'f1_micro', # 一種多分類f1值} clf=GridSearchCV(model,parameters,cv=3,scoring=scores,refit='f1_mi',verbose=2) clf.fit(X_train, y_train)
#確定num_leaves和max_depthmodel=LGBMClassifier(boosting_type="gbdt",objective='multiclass',metric="None",n_esrimators='100', learning_rate=0.1,bagging_fraction=0.8,feature_fraction=0.8)parameters={'max_depth':range(4,8,1),'num_leaves':range(10,150,10)}clf=GridSearchCV(model,parameters,cv=3,scoring=scores,refit='f1_mi',verbose=2)clf.fit(X_train, y_train)
#確定max_bin和min_data_in_leafmodel=LGBMClassifier(boosting_type="gbdt",objective='multiclass',metric="None",n_esrimators='100',max_depth= 7, num_leaves= 20, learning_rate=0.1,bagging_fraction=0.8,feature_fraction=0.8)parameters={'max_bin':range(100,500,50),'min_data_in_leaf':range(50,100,10)}clf=GridSearchCV(model,parameters,cv=3,scoring=scores,refit='f1_mi',verbose=2)clf.fit(X_train, y_train)
model=LGBMClassifier(boosting_type="gbdt",objective='multiclass',metric="None",n_esrimators='100',max_depth= 7, num_leaves= 20,max_bin='150', min_data_in_leaf='70' ,learning_rate=0.1,bagging_fraction=0.8,feature_fraction=0.8)parameters={'feature_fraction':[0.4,0.5,0.6,0.7,0.8], 'bagging_fraction':[0.6,0.7,0.8,0.9,1.0], 'bagging_freq':range(0,10,2) }clf=GridSearchCV(model,parameters,cv=3,scoring=scores,refit='f1_mi',verbose=2)clf.fit(X_train, y_train)
#確定lambda_l1,lambda_l2model=LGBMClassifier(boosting_type="gbdt",objective='multiclass',metric="None",n_esrimators='100',max_depth= 7, num_leaves= 20,max_bin='150', min_data_in_leaf='70' ,learning_rate=0.1, bagging_fraction=0.6, bagging_freq=0, feature_fraction= 0.8 )parameters={'lambda_l1':[1e-10,1e-5], 'lambda_l2':[1e-10,1e-5] }clf=GridSearchCV(model,parameters,cv=3,scoring=scores,refit='f1_mi',verbose=2)clf.fit(X_train, y_train)
#確定 min_split_gainmodel=LGBMClassifier(boosting_type="gbdt",objective='multiclass',metric="None",n_esrimators='100',max_depth= 7, num_leaves= 20,max_bin='150', min_data_in_leaf='70' ,learning_rate=0.1, bagging_fraction=0.6, bagging_freq=0, feature_fraction= 0.8,lambda_l1='1e-10',lambda_l2= '1e-10' )parameters={'min_split_gain':[0.0,0.1,0.2,0.3,0.4,0.5]}clf=GridSearchCV(model,parameters,cv=3,scoring=scores,refit='f1_mi',verbose=2)clf.fit(X_train, y_train)
#降低學習率,增加迭代次數,驗證模型model=LGBMClassifier(boosting_type="gbdt",objective='multiclass',metric="None",n_esrimators='100',max_depth= 7, num_leaves= 20,max_bin='150', min_data_in_leaf='70' ,learning_rate=0.05, bagging_fraction=0.6, bagging_freq=0, feature_fraction= 0.8,lambda_l1='1e-10',lambda_l2= '1e-10',min_split_gain=0.0 )parameters={'learning_rate':[0.05,0.06,0.07,0.08,0.09,0.10]}clf=GridSearchCV(model,parameters,cv=3,scoring=scores,refit='f1_mi',verbose=2)clf.fit(X_train, y_train)GridSearchCV是一種枚舉計算的尋找最優參數的方式。至此:集成學習Bagging 、Boosting 、Stacking文章系列結束,共8篇文章。《LightGBM Release 2.3.2 》
https://bigquant.com/community/t/topic/113694https://www.cnblogs.com/wzdLY/p/9867719.htmlhttps://blog.csdn.net/variablex/article/details/107256149https://www.jianshu.com/p/1100e333fcabhttps://www.jianshu.com/p/ba9ab1adbfe1https://www.cnblogs.com/dogecheng/p/12791132.html