lightgbm應用示例及網格調參

2021-02-20 瀟雜想
查詢lightgbm的官方文檔有兩種接口可以使用:sklearn接口和原生接口,本文以sklearn為例。(一)lightgbm.LGBMClassifier 參數

【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

相關焦點

  • 聊聊lightgbm
    R中的gbm示例如下N <- 1000X1 <- runif(N)X2 <- 2*runif(N)X3 <- ordered(sample(letters[1:4],N,replace=TRUE),levels=letters[4:1])X4 <- factor(sample(letters[1:6],N,replace=TRUE
  • 深入理解LightGBM
    而lightgbm對每個特徵都有一個直方圖,這樣構建一次就OK, 並且分裂的時候還能通過直方圖作差進行加速。故xgboost的直方圖算法是不如lightgbm的直方圖算法快的。4.LightGBM的實戰應用Lightgbm實戰部分,我們先用Lightgbm做一個波士頓房價預測的任務, 這個任務比較簡單,用lightgbm有點大材小用的感覺,但是在這裡就是想看看Lightgbm到底應該如何使用,如何訓練預測和調參等。
  • lightGBM用於排序(Learning to Rank )
    L2R將機器學習的技術很好的應用到了排序中,並提出了一些新的理論和算法,不僅有效地解決了排序的問題,其中一些算法(比如LambdaRank)的思想非常新穎,可以在其他領域中進行借鑑。鑑於排序在許多領域中的核心地位,L2R可以被廣泛的應用在信息(文檔)檢索,協同過濾等領域。
  • 數學推導+純Python實現機器學習算法:LightGBM
    pip直接安裝即可:LightGBM提供了分類和回歸兩大類接口,下面以分類問題和iris數據集為例給出原生LightGBM接口的一個使用示例:import pandas as pdimport lightgbm as lgbfrom sklearn.metrics import mean_squared_errorfrom sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.datasets
  • 數學推導+純Python實現機器學習算法18:LightGBM
    pip直接安裝即可:    LightGBM提供了分類和回歸兩大類接口,下面以分類問題和iris數據集為例給出原生LightGBM接口的一個使用示例:import pandas as pdimport lightgbm as lgbfrom sklearn.metrics import mean_squared_errorfrom sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.datasets
  • LightGBM原理之論文詳解
    直方圖算法並不通過特徵排序找到最優的切分點,而是將連續的特徵值抽象成離散的分箱,並使用這些分箱在訓練過程中構建特徵直方圖,這種算法更加訓練速度和內存消耗上都更加高效,lightGBM使用此種算法。2.2 Related WorkGBDT有許多實現,如XGBoost,PGBRT,Scikit-learn,gbm in R。Scikit-learn和gbm in R實現都用了預排序,pGBRT使用了直方圖算法,XGBoost支持預排序和直方圖算法,由於XGBoost勝過其他算法,我們用它作為baseline。
  • 劍指LightGBM和XGboost!斯坦福發表NGBoost算法
    ngboost.ngboost import NGBoost from ngboost.learners import default_tree_learner from ngboost.distns import Normal from ngboost.scores import MLE import
  • 如何用R建模GBM?
    1 2set.seed(123) 3bike_fit_1 <- gbm::gbm(cnt ~.,  4              5              6             data = BikeTrain,  7              8             verbose = TRUE,
  • 入門 | 從結構到性能,一文概述XGBoost、Light GBM和CatBoost的同與不同
    儘管近年來神經網絡復興並大為流行,但是 boosting 算法在訓練樣本量有限、所需訓練時間較短、缺乏調參知識等場景依然有其不可或缺的優勢。
  • 大數據大白話系列:淺析LightGBM
    lightGBM一直是各類競賽中的大殺器,今天我們就來講講這個大殺器吧。lightGBM是GBDT家族的一員。而GBDT在每一次運算的時候,都會把整個訓練數據都裝入內存,很浪費空間,並且限制了訓練數據的大小。
  • 大戰三回合:XGBoost、LightGBM和Catboost一決高低
    (4)處理缺失的值;(5)XGBoost 比傳統的梯度增強方法(如 AdaBoost)要快得多;如果想深入研究這些算法,可以閱讀下面相關文章的連結:LightGBM: 一種高效的梯度增強決策樹 https://papers.nips.cc/paper/6907-lightgbm-a-highly-efficient-gradient-boosting-decision-tree.pdf
  • 集成學習原理小結(AdaBoost & lightGBM demo)
    代碼示例5.1 AdaBoost demo5.2 lightGBM demo完整代碼地址參考本博客中使用到的完整代碼請移步至我的github:https://github.com/qingyujean/Magic-NLPer
  • SQL 數據分析應用示例
    作為數據分析師,SQL 應用最多的是其查詢功能,即用 SELECT 語句來檢索數據表中所需的數據。在不同的資料庫系統中,SQL 語法有些差異,但基本思路應該一致。本文將基於 Oracle 資料庫,介紹一些 SQL 數據分析應用示例。首先,我們看一看常用的聚集函數,即將一列中所有的值聚集為單個值的函數。
  • 英語語法中的先行詞,定義、類型和使用示例
    In order to overcome it, Jane had to turn off the light.In this sentence, 「it」 comes before the 「the light.」 「The light」 is still the antecedent since the noun is part of the independent clause.
  • 如何應用XML+XSLT+AJAX組合技術實現無刷新的數據查詢的應用實例
    在MyEclipse開發工具中選擇文件中的新建菜單項目,然後創建出一個JSP頁面文件,文件名稱為searchBook.jsp,創建searchBook.jsp頁面文件的過程示圖參看如下的示例圖所示。(2)輸入文件名稱searchBook.js,並點擊「完成」按鈕, 創建的過程示圖參看如下的示例圖所示。
  • 機器學習實戰|GBDT Xgboost LightGBM對比
    安裝指引import lightgbm as lgbtrain_data = lgb.Dataset(Xtrain, label=ytrain)test_data = lgb.Dataset(Xtest, label=ytest)# specify parameters via mapparams = {    'num_leaves':31,
  • 在XGBoost和LightGBM模型中強制執行單調約束的python教程
    為什麼要在機器學習模型中應用單調性?現在,你一定想知道為什麼我們需要一個約束模型。在現實生活中,許多場景都表現出單調關係,請看下面給出的一些例子。信用評分越高,申請被批准的可能性越大。保險費隨著駕照年齡的增長而下降。保險費隨保險金額的增加而增加。