日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

libsvm回归参数寻优cgp_【lightgbm/xgboost/nn代码整理二】xgboost做二分类,多分类以及回归任务...

發布時間:2024/7/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 libsvm回归参数寻优cgp_【lightgbm/xgboost/nn代码整理二】xgboost做二分类,多分类以及回归任务... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.簡介

該部分是代碼整理的第二部分,為了方便一些初學者調試代碼,作者已將該部分代碼打包成一個工程文件,包含簡單的數據處理、xgboost配置、五折交叉訓練和模型特征重要性打印四個部分。數據處理部分參考:代碼整理一,這里只介紹不同的部分。本文主要是介紹一些重點的參數部分,一是方便自己以后再次查詢,也希望幫助一些初學者快速的使用該項目,應用到自己的工程或者比賽中。如果只是想要閱讀代碼,可直接移步到尾部鏈接。

2. 數據處理

data = pd.concat([train_data, test_data]) cate_feature = ['gender', 'cell_province', 'id_province', 'id_city', 'rate', 'term'] for item in cate_feature:data[item] = LabelEncoder().fit_transform(data[item])item_dummies = pd.get_dummies(data[item])item_dummies.columns = [item + str(i + 1) for i in range(item_dummies.shape[1])]data = pd.concat([data, item_dummies], axis=1) data.drop(cate_feature,axis=1,inplace=True)

該部分在lightgbm中只進行了labelEncoder編碼處理,然后通過categorical_feature變量處理,在lightgbm中使用了類別特征的最優切分進行了處理,具體詳情參考:柯國霖大佬的回答。xgboost中沒有對類別特征做處理,這里對其進行了onehot編碼處理。而在工程中,如果類別過多,我一般會放棄進行onehot,主要是由于進行onehot會導致特征過于稀疏,運算速度變慢,嚴重影響模型的迭代速度,并且最終對結果提升很有限,我通常只會進行labelEncoder, 也可以對特征進行embeding處理。

3.模型

3.1 參數

和lightgbm一樣,xgboost也是使用key-value字典的方式存儲參數,下面給出的事二分類的參數

params = {'booster': 'gbtree','objective': 'binary:logistic','eval_metric': 'auc','gamma': 0.1,'max_depth': 8,'alpha': 0,'lambda': 0,'subsample': 0.7,'colsample_bytree': 0.5,'min_child_weight': 3,'silent': 0,'eta': 0.03,'nthread': -1,'seed': 2019, }
  • objective:目標函數
  • 二分類:常用的是binary:logistic
  • 多分類:multi:softmax,當是多分類任務時需要指定類別數量,eg:'num_class':33;
  • 回歸任務:reg:linear
  • eval_metric:評價函數,如果該參數沒有指定,缺省值是通過目標函數來做匹配,
  • 二分類:常用auc和logloss
  • 多分類:mlogloss
  • 回歸任務:均方誤差:mse,均方根誤差:rmse, 平均絕對值誤差:mae
  • gamma:用于控制是否后剪枝的參數,越大越保守,一般0.1、0.2這樣子
  • max_depth:樹的深度,對結果影響較大,越深越容易過擬合
  • alpha:L1正則,樹的深度過大時,可以適大該參數
  • lambda:L2正則
  • subsample:隨機采樣的比率,通俗理解就是選多少樣本做為訓練集,選擇小于1的比例可以減少方差,即防止過擬合
  • colsample_bytree:這里是選擇多少列作為訓練集,具體的理解就是選擇多少特征
  • min_child_weight:決定最小葉子節點樣本權重和。當它的值較大時,可以避免模型學習到局部的特殊樣本。但如果這個值過高,會導致欠擬合
  • eta:學習率
  • silent: 是否打印訓練過程中的信息,0表示打印,1反之
  • nthread:運行的線程數,-1所有線程,該值需要根據具體情況調整,線程對最終結果有一點影響,曾今測試,線程越多,結果會變差一丟丟
  • seed:這個隨機指定一個常數,防止每次結果不一致

3.2 五折交叉

folds = KFold(n_splits=5, shuffle=True, random_state=2019)

采用五折交叉統計實際就是訓練多個模型和平均值融合,如果時間允許的情況下10折交叉會好于5折。5折交叉還可以采用StratifiedKFold做切分。

3.3 數據加載

XGBoost可以加載多種數據格式的訓練數據:libsvm 格式的文本數據、Numpy 的二維數組、XGBoost 的二進制的緩存文件。加載的數據存儲在對象 DMatrix 中,而llightgbm是存儲在Dataset中

trn_data = xgb.DMatrix(train_x.iloc[trn_idx], label=train_y[trn_idx]) val_data = xgb.DMatrix(train_x.iloc[val_idx], label=train_y[val_idx])

3.4 訓練和預測

##訓練部分 watchlist = [(trn_data, 'train'), (val_data, 'valid')] clf = xgb.train(params, trn_data, num_round, watchlist, verbose_eval=200, early_stopping_rounds=200)##預測部分 test_pred_prob += clf.predict(xgb.DMatrix(test), ntree_limit=clf.best_ntree_limit) / folds.n_splits
  • params:參數字典
  • trn_data :訓練的數據
  • num_round:迭代次數
  • watchlist:這是一個列表,用于對訓練過程中進行評估列表中的元素。形式是evals =[(dtrain,’train’),(dval,’val’)]或者是evals =[(dtrain,’train’)],對于第一種情況,它使得我們可以在訓練過程中觀察驗證集的效果。
  • verbose_eval: 如果為True ,則對evals中元素的評估結果會輸出在結果中;如果輸入數字,假設為5,則每隔5個迭代輸出一次。
  • ntree_limit:驗證集中最好的結果做預測

4.模型重要性

模型重要性是根據樹模型中該特征的分裂次數做統計的,可以基于此重要性來判斷特種的重要程度,深入的挖掘特征,具體代碼如下:

##保存特征重要性 fold_importance_df = pd.DataFrame() fold_importance_df["Feature"] = clf.get_fscore().keys() fold_importance_df["importance"] = clf.get_fscore().values() fold_importance_df["fold"] = fold_ + 1 feature_importance_df = pd.concat([feature_importance_df, fold_importance_df], axis=0)##特征重要性顯示 ## plot feature importance cols = (feature_importance_df[["Feature", "importance"]] .groupby("Feature").mean().sort_values(by="importance", ascending=False).index) best_features = feature_importance_df.loc[feature_importance_df.Feature.isin(cols)].sort_values(by='importance',ascending=False) plt.figure(figsize=(8, 15)) sns.barplot(y="Feature", x="importance",data=best_features.sort_values(by="importance", ascending=False)) plt.title('LightGBM Features (avg over folds)') plt.tight_layout() plt.savefig('../../result/xgb_importances.png')

在lightgbm中對應的事clf.feature_importance()函數,而在xgboost中對應的是clf.get_fscore()函數。如果特征過多無法完成顯示,可以只取topN顯示,如只顯示top5

cols = (feature_importance_df[["Feature", "importance"]].groupby("Feature").mean().sort_values(by="importance", ascending=False)[:5].index)

5.小總結

xgboost和lightgbm對比,它的速度會慢很多,使用也沒有lighgbm方便,但是可以將xgboost訓練的結果和lightgbm做融合,提升最終的結果。

代碼地址:data_mining_models

. 寫在最后

歡迎關注作者和專欄,和作者一塊成長:ML與DL成長之路,

推薦關注公眾號:AI成長社,ML與DL的成長圣地。

同時推薦魚佬專欄,學習更對競賽知識,機器學習理論與數據競賽實戰


推薦閱讀

【lightgbm/xgboost/nn代碼整理一】lightgbm做二分類,多分類以及回歸任務

【lightgbm/xgboost/nn代碼整理三】keras做二分類,多分類以及回歸任務

【lightgbm/xgboost/nn代碼整理四】pytorch做二分類,多分類以及回歸任務

總結

以上是生活随笔為你收集整理的libsvm回归参数寻优cgp_【lightgbm/xgboost/nn代码整理二】xgboost做二分类,多分类以及回归任务...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。