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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

1.簡(jiǎn)介

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

2. 數(shù)據(jù)處理

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中只進(jìn)行了labelEncoder編碼處理,然后通過(guò)categorical_feature變量處理,在lightgbm中使用了類(lèi)別特征的最優(yōu)切分進(jìn)行了處理,具體詳情參考:柯國(guó)霖大佬的回答。xgboost中沒(méi)有對(duì)類(lèi)別特征做處理,這里對(duì)其進(jìn)行了onehot編碼處理。而在工程中,如果類(lèi)別過(guò)多,我一般會(huì)放棄進(jìn)行onehot,主要是由于進(jìn)行onehot會(huì)導(dǎo)致特征過(guò)于稀疏,運(yùn)算速度變慢,嚴(yán)重影響模型的迭代速度,并且最終對(duì)結(jié)果提升很有限,我通常只會(huì)進(jìn)行l(wèi)abelEncoder, 也可以對(duì)特征進(jìn)行embeding處理。

3.模型

3.1 參數(shù)

和lightgbm一樣,xgboost也是使用key-value字典的方式存儲(chǔ)參數(shù),下面給出的事二分類(lèi)的參數(shù)

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:目標(biāo)函數(shù)
  • 二分類(lèi):常用的是binary:logistic
  • 多分類(lèi):multi:softmax,當(dāng)是多分類(lèi)任務(wù)時(shí)需要指定類(lèi)別數(shù)量,eg:'num_class':33;
  • 回歸任務(wù):reg:linear
  • eval_metric:評(píng)價(jià)函數(shù),如果該參數(shù)沒(méi)有指定,缺省值是通過(guò)目標(biāo)函數(shù)來(lái)做匹配,
  • 二分類(lèi):常用auc和logloss
  • 多分類(lèi):mlogloss
  • 回歸任務(wù):均方誤差:mse,均方根誤差:rmse, 平均絕對(duì)值誤差:mae
  • gamma:用于控制是否后剪枝的參數(shù),越大越保守,一般0.1、0.2這樣子
  • max_depth:樹(shù)的深度,對(duì)結(jié)果影響較大,越深越容易過(guò)擬合
  • alpha:L1正則,樹(shù)的深度過(guò)大時(shí),可以適大該參數(shù)
  • lambda:L2正則
  • subsample:隨機(jī)采樣的比率,通俗理解就是選多少樣本做為訓(xùn)練集,選擇小于1的比例可以減少方差,即防止過(guò)擬合
  • colsample_bytree:這里是選擇多少列作為訓(xùn)練集,具體的理解就是選擇多少特征
  • min_child_weight:決定最小葉子節(jié)點(diǎn)樣本權(quán)重和。當(dāng)它的值較大時(shí),可以避免模型學(xué)習(xí)到局部的特殊樣本。但如果這個(gè)值過(guò)高,會(huì)導(dǎo)致欠擬合
  • eta:學(xué)習(xí)率
  • silent: 是否打印訓(xùn)練過(guò)程中的信息,0表示打印,1反之
  • nthread:運(yùn)行的線程數(shù),-1所有線程,該值需要根據(jù)具體情況調(diào)整,線程對(duì)最終結(jié)果有一點(diǎn)影響,曾今測(cè)試,線程越多,結(jié)果會(huì)變差一丟丟
  • seed:這個(gè)隨機(jī)指定一個(gè)常數(shù),防止每次結(jié)果不一致

3.2 五折交叉

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

采用五折交叉統(tǒng)計(jì)實(shí)際就是訓(xùn)練多個(gè)模型和平均值融合,如果時(shí)間允許的情況下10折交叉會(huì)好于5折。5折交叉還可以采用StratifiedKFold做切分。

3.3 數(shù)據(jù)加載

XGBoost可以加載多種數(shù)據(jù)格式的訓(xùn)練數(shù)據(jù):libsvm 格式的文本數(shù)據(jù)、Numpy 的二維數(shù)組、XGBoost 的二進(jìn)制的緩存文件。加載的數(shù)據(jù)存儲(chǔ)在對(duì)象 DMatrix 中,而llightgbm是存儲(chǔ)在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 訓(xùn)練和預(yù)測(cè)

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

4.模型重要性

模型重要性是根據(jù)樹(shù)模型中該特征的分裂次數(shù)做統(tǒng)計(jì)的,可以基于此重要性來(lái)判斷特種的重要程度,深入的挖掘特征,具體代碼如下:

##保存特征重要性 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中對(duì)應(yīng)的事clf.feature_importance()函數(shù),而在xgboost中對(duì)應(yīng)的是clf.get_fscore()函數(shù)。如果特征過(guò)多無(wú)法完成顯示,可以只取topN顯示,如只顯示top5

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

5.小總結(jié)

xgboost和lightgbm對(duì)比,它的速度會(huì)慢很多,使用也沒(méi)有l(wèi)ighgbm方便,但是可以將xgboost訓(xùn)練的結(jié)果和lightgbm做融合,提升最終的結(jié)果。

代碼地址:data_mining_models

. 寫(xiě)在最后

歡迎關(guān)注作者和專(zhuān)欄,和作者一塊成長(zhǎng):ML與DL成長(zhǎng)之路,

推薦關(guān)注公眾號(hào):AI成長(zhǎng)社,ML與DL的成長(zhǎng)圣地。

同時(shí)推薦魚(yú)佬專(zhuān)欄,學(xué)習(xí)更對(duì)競(jìng)賽知識(shí),機(jī)器學(xué)習(xí)理論與數(shù)據(jù)競(jìng)賽實(shí)戰(zhàn)


推薦閱讀

【lightgbm/xgboost/nn代碼整理一】lightgbm做二分類(lèi),多分類(lèi)以及回歸任務(wù)

【lightgbm/xgboost/nn代碼整理三】keras做二分類(lèi),多分類(lèi)以及回歸任務(wù)

【lightgbm/xgboost/nn代碼整理四】pytorch做二分類(lèi),多分類(lèi)以及回歸任務(wù)

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。