色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

XGBOOST模型介紹

lviY_AI_shequ ? 來源:lp ? 2019-03-26 09:19 ? 次閱讀

前言

這是機器學習系列的第三篇文章,對于住房租金預測比賽的總結這將是最后一篇文章了,比賽持續一個月自己的總結竟然也用了一個月,牽強一點來說機器學習也將會是一個漫長的道路,后續機器學習的文章大多數以知識科普為主,畢竟自己在機器學習這個領域是個渣渣,自己學到的新知識點會分享給大家的。

前面的文章談了談這次比賽非技術方面的收獲,對數據集的初步了解和特征工程的處理,今天主要介紹這次使用的模型--XGBOOST。

XGBOOST模型介紹

關于xgboost的原理網絡上的資源很少,大多數還停留在應用層面,自己也是僅僅學習了一點應用,關于原理可以參考陳天奇博士的這篇文章

https://xgboost.readthedocs.io/en/latest/tutorials/model.html。

簡單介紹:

XGBOOST是一個監督模型,xgboost對應的模型本質是一堆CART樹。用一堆樹做預測,就是將每棵樹的預測值加到一起作為最終的預測值。下圖就是CART樹和一堆CART樹的示例,用來判斷一個人是否會喜歡計算機游戲:

第二張圖明了如何用一堆CART樹做預測,就是簡單將各個樹的預測分數相加。

參數介紹:

官方參數介紹看這里:https://xgboost.readthedocs.io/en/latest/parameter.html#general-parameters

比較重要的參數介紹:

“reg:linear” –線性回歸。“reg:logistic” –邏輯回歸。“binary:logistic” –二分類的邏輯回歸問題,輸出為概率。“binary:logitraw” –二分類的邏輯回歸問題,輸出的結果為wTx。

“count:poisson”–計數問題的poisson回歸,輸出結果為poisson分布。在poisson回歸中,max_delta_step的缺省值為0.7。(used to safeguard optimization)

“multi:softmax”–讓XGBoost采用softmax目標函數處理多分類問題,同時需要設置參數num_class(類別個數)

“multi:softprob” –和softmax一樣,但是輸出的是ndata * nclass的向量,可以將該向量reshape成ndata行nclass列的矩陣。沒行數據表示樣本所屬于每個類別的概率。

lambda [default=0]L2 正則的懲罰系數alpha [default=0]L1 正則的懲罰系數

lambda_bias在偏置上的L2正則。缺省值為0(在L1上沒有偏置項的正則,因為L1時偏置不重要)

eta [default=0.3]為了防止過擬合,更新過程中用到的收縮步長。在每次提升計算之后,算法會直接獲得新特征的權重。eta通過縮減特征的權重使提升計算過程更加保守。取值范圍為:[0,1]

max_depth[default=6]數的最大深度。缺省值為6,取值范圍為:[1,∞]

min_child_weight [default=1]孩子節點中最小的樣本權重和。如果一個葉子節點的樣本權重和小于min_child_weight則拆分過程結束。在現行回歸模型中,這個參數是指建立每個模型所需要的最小樣本數。該成熟越大算法越conservative取值范圍為: [0,∞]

xgboost參數設置的代碼示例:

1xgboost參數設置代碼示例: 2 3#劃分數據集 4X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.01,random_state=1729) 5print(X_train.shape,X_test.shape) 6 7#模型參數設置 8xlf=xgb.XGBRegressor(max_depth=10, 9learning_rate=0.1,10n_estimators=10,11silent=True,12objective='reg:linear',13nthread=-1,14gamma=0,15min_child_weight=1,16max_delta_step=0,17subsample=0.85,18colsample_bytree=0.7,19colsample_bylevel=1,20reg_alpha=0,21reg_lambda=1,22scale_pos_weight=1,23seed=1440,24missing=None)2526xlf.fit(X_train,y_train,eval_metric='rmse',verbose=True,eval_set=[(X_test,y_test)],early_stopping_rounds=100)2728#計算分數、預測29preds=xlf.predict(X_test)

比賽代碼

關于xgboost只是簡單的做了一個介紹,自己也僅僅懂一點應用層,原理懂得不是很多,這次XGB代碼分析使用的是第一名開源代碼。

導入數據集

1importpandasaspd 2importnumpyasnp 3importmatplotlib.pyplotasplt 4 5train_data=pd.read_csv('train.csv') 6test_df=pd.read_csv('test.csv') 7train_df=train_data[train_data.loc[:,'Time']<3] 8val_df=train_data[train_data.loc[:,'Time']==3] 910del?train_data

以默認參數的XGB分數為準,低于此基準線2.554的模型一律不考慮。

1defxgb_eval(train_df,val_df): 2train_df=train_df.copy() 3val_df=val_df.copy() 4 5try: 6fromsklearn.preprocessingimportLabelEncoder 7lb_encoder=LabelEncoder() 8lb_encoder.fit(train_df.loc[:,'RoomDir'].append(val_df.loc[:,'RoomDir'])) 9train_df.loc[:,'RoomDir']=lb_encoder.transform(train_df.loc[:,'RoomDir'])10val_df.loc[:,'RoomDir']=lb_encoder.transform(val_df.loc[:,'RoomDir'])11exceptExceptionase:12print(e)1314importxgboostasxgb15X_train=train_df.drop(['Rental'],axis=1)16Y_train=train_df.loc[:,'Rental'].values17X_val=val_df.drop(['Rental'],axis=1)18Y_val=val_df.loc[:,'Rental'].values1920fromsklearn.metricsimportmean_squared_error2122try:23eval_df=val_df.copy().drop('Time',axis=1)24exceptExceptionase:25eval_df=val_df.copy()2627reg_model=xgb.XGBRegressor(max_depth=5,n_estimators=500,n_jobs=-1)28reg_model.fit(X_train,Y_train)2930y_pred=reg_model.predict(X_val)31print(np.sqrt(mean_squared_error(Y_val,y_pred)),end='')3233eval_df.loc[:,'Y_pred']=y_pred34eval_df.loc[:,'RE']=eval_df.loc[:,'Y_pred']-eval_df.loc[:,'Rental']3536print('')37feature=X_train.columns38fe_im=reg_model.feature_importances_39print(pd.DataFrame({'fe':feature,'im':fe_im}).sort_values(by='im',ascending=False))4041importmatplotlib.pyplotasplt42plt.clf()43plt.figure(figsize=(15,4))44plt.plot([Y_train.min(),Y_train.max()],[0,0],color='red')45plt.scatter(x=eval_df.loc[:,'Rental'],y=eval_df.loc[:,'RE'])46plt.show()4748returneval_df

原生特征的丟棄嘗試

以XGB做原生特征篩選,在原生特征中丟棄后不影響分數甚至漲分的特征有:Time,RentRoom(漲幅明顯),RoomDir,Livingroom,RentType(漲幅明顯),SubwayLine(漲幅明顯),SubwayDis(漲幅明顯)。

1#丟棄各特征后的分數 2#‘Time':2.558,'Neighborhood':2.592,'RentRoom':2.531,'Height':2.57,'TolHeight':2.591,'RoomArea':3 3#'RoomDir':2.548,'RentStatus':2.561,'Bedroom':2.584,'Livingroom':2.548,'Bathroom':2.590,'RentType':2.538 4#'Region':2.583,'BusLoc':2.594,'SubwayLine':2.521,'SubwaySta':2.569,'SubwayDis':2.537,'RemodCond':2.571 5forcolintrain_df.columns: 6ifcol!='Rental': 7print('dropcol:{}'.format(col)) 8tmp_train_df=train_df.drop([col],axis=1) 9tmp_val_df=val_df.drop([col],axis=1)10eval_df=xgb_eval(train_df=tmp_train_df,val_df=tmp_val_df)1112#一起丟棄:2.55313tmp_train_df=train_df.copy()14tmp_val_df=val_df.copy()15tmp_train_df.drop(['Time','RentRoom','RoomDir','Livingroom','RentType','SubwayLine','SubwayDis'],axis=1,inplace=True)16tmp_val_df.drop(['Time','RentRoom','RoomDir','Livingroom','RentType','SubwayLine','SubwayDis'],axis=1,inplace=True)17eval_df=xgb_eval(train_df=tmp_train_df,val_df=tmp_val_df)

特征選擇

一股腦加上所有特征表現不佳,使用貪心策略(前向選擇、后向選擇)逐個添加特征。

1train_data=pd.read_csv('train.csv') 2train_df=train_data[train_data.loc[:,'Time']<3] 3val_df=train_data[train_data.loc[:,'Time']==3] 4 5drop_cols=['SubwayLine','RentRoom','Time']????????#?需要丟棄的原生特征 6 7comb_train_df=train_df.copy() 8comb_val_df=val_df.copy() 910#?前向特征選擇這塊我是用for循環暴力搜出來的最優特征組合,最終篩選出來的特征組合為:11#?['ab_Height','TolRooms','Area/Room','BusLoc_rank','SubwayLine_rank']1213comb_train_df.loc[:,'ab_Height']=comb_train_df.loc[:,'Height']/(comb_train_df.loc[:,'TolHeight']+1)14comb_val_df.loc[:,'ab_Height']=comb_val_df.loc[:,'Height']/(comb_val_df.loc[:,'TolHeight']+1)1516comb_train_df.loc[:,'TolRooms']=comb_train_df.loc[:,'Livingroom']+comb_train_df.loc[:,'Bedroom']+comb_train_df.loc[:,'Bathroom']17comb_val_df.loc[:,'TolRooms']=comb_val_df.loc[:,'Livingroom']+comb_val_df.loc[:,'Bedroom']+comb_val_df.loc[:,'Bathroom']18comb_train_df.loc[:,'Area/Room']=comb_train_df.loc[:,'RoomArea']/(comb_train_df.loc[:,'TolRooms']+1)19comb_val_df.loc[:,'Area/Room']=comb_val_df.loc[:,'RoomArea']/(comb_val_df.loc[:,'TolRooms']+1)2021rank_cols=['BusLoc','SubwayLine']22for?col?in?rank_cols:23????rank_df=train_df.loc[:,[col,'Rental']].groupby(col,as_index=False).mean().sort_values(by='Rental').reset_index(drop=True)24????rank_df.loc[:,col+'_rank']=rank_df.index+1????????#?+1,為缺失值預留一個0值的rank25????rank_fe_df=rank_df.drop(['Rental'],axis=1)26????comb_train_df=comb_train_df.merge(rank_fe_df,how='left',on=col)27????comb_val_df=comb_val_df.merge(rank_fe_df,how='left',on=col)28????try:29????????comb_train_df.drop([col],axis=1,inplace=True)30????????comb_val_df.drop([col],axis=1,inplace=True)31????except?Exception?as?e:32????????print(e)33for?drop_col?in?drop_cols:34????????try:35????????????comb_train_df.drop(drop_col,axis=1,inplace=True)36????????????comb_val_df.drop(drop_col,axis=1,inplace=True)37????????except?Exception?as?e:38????????????pass3940#?貪心策略添加特征,目前為:2.40341eval_df=xgb_eval(train_df=comb_train_df,val_df=comb_val_df

調參對于不是很大的數據集可以用sklearn的Gridcvsearch來暴力調參。示例代碼:

1params={'depth':[3],2'iterations':[5000],3'learning_rate':[0.1,0.2,0.3],4'l2_leaf_reg':[3,1,5,10,100],5'border_count':[32,5,10,20,50,100,200]}6clf=GridSearchCV(cat,params,cv=3)7clf.fit(x_train_2,y_train_2)

對于較大的數據集,用第一種方法耗時特別長。2. 逐個參數調,先取定其它參數,遍歷第一個參數,選擇最優值,再調下一個參數。省時但有的時候容易陷入局部最優。3.觀察數據的分布來調整對應的參數,如樹模型的葉子節點數,變量較多,葉子數少欠擬合。

預測提交

1defxgb_pred(): 2train_df=pd.read_csv('train.csv') 3test_df=pd.read_csv('test.csv') 4 5try: 6fromsklearn.preprocessingimportLabelEncoder 7lb_encoder=LabelEncoder() 8lb_encoder.fit(train_df.loc[:,'RoomDir'].append(test_df.loc[:,'RoomDir'])) 9train_df.loc[:,'RoomDir']=lb_encoder.transform(train_df.loc[:,'RoomDir'])10test_df.loc[:,'RoomDir']=lb_encoder.transform(test_df.loc[:,'RoomDir'])11exceptExceptionase:12print(e)1314train_df.loc[:,'ab_Height']=train_df.loc[:,'Height']/(train_df.loc[:,'TolHeight']+1)15test_df.loc[:,'ab_Height']=test_df.loc[:,'Height']/(test_df.loc[:,'TolHeight']+1)16train_df.loc[:,'TolRooms']=train_df.loc[:,'Livingroom']+train_df.loc[:,'Bedroom']+train_df.loc[:,'Bathroom']17test_df.loc[:,'TolRooms']=test_df.loc[:,'Livingroom']+test_df.loc[:,'Bedroom']+test_df.loc[:,'Bathroom']18train_df.loc[:,'Area/Room']=train_df.loc[:,'RoomArea']/(train_df.loc[:,'TolRooms']+1)19test_df.loc[:,'Area/Room']=test_df.loc[:,'RoomArea']/(test_df.loc[:,'TolRooms']+1)2021rank_cols=['BusLoc','SubwayLine']22forcolinrank_cols:23rank_df=train_df.loc[:,[col,'Rental']].groupby(col,as_index=False).mean().sort_values(by='Rental').reset_index(drop=True)24rank_df.loc[:,col+'_rank']=rank_df.index+1#+1,為缺失值預留一個0值的rank25rank_fe_df=rank_df.drop(['Rental'],axis=1)26train_df=train_df.merge(rank_fe_df,how='left',on=col)27test_df=test_df.merge(rank_fe_df,how='left',on=col)28try:29train_df.drop([col],axis=1,inplace=True)30test_df.drop([col],axis=1,inplace=True)31exceptExceptionase:32print(e)33fordrop_colindrop_cols:34try:35train_df.drop(drop_col,axis=1,inplace=True)36test_df.drop(drop_col,axis=1,inplace=True)37exceptExceptionase:38pass3940print(train_df.columns,test_df.columns)4142importxgboostasxgb43X_train=train_df.drop(['Rental'],axis=1)44Y_train=train_df.loc[:,'Rental'].values45test_id=test_df.loc[:,'id']46X_test=test_df.drop(['id'],axis=1)474849fromsklearn.metricsimportmean_squared_error5051reg_model=xgb.XGBRegressor(max_depth=8,n_estimators=1880,n_jobs=-1)52reg_model.fit(X_train,Y_train,eval_set=[(X_train,Y_train)],verbose=100,early_stopping_rounds=10)5354y_pred=reg_model.predict(X_test)5556sub_df=pd.DataFrame({57'id':test_id,58'price':y_pred59})60sub_df.to_csv('sub.csv',index=False)6162returnNone6364xgb_pred()

第一名XGB單模分數為1.94,線下線上是一致的,總特征數二十多個,跟自己的XGB相比,自己在特征組合方向有所欠缺,自己單模特征10個左右分數在2.01。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模型
    +關注

    關注

    1

    文章

    3259

    瀏覽量

    48909
  • 代碼
    +關注

    關注

    30

    文章

    4799

    瀏覽量

    68728
  • 機器學習
    +關注

    關注

    66

    文章

    8424

    瀏覽量

    132761

原文標題:機器學習實戰--住房月租金預測(3)

文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何通過XGBoost解釋機器學習

    本文為大家介紹XGBoost解釋機器學習。 這是一個故事,關于錯誤地解釋機器學習模型的危險以及正確解釋所帶來的價值。如果你發現梯度提升或隨機森林之類的集成樹模型具有很穩定的準確率,但
    發表于 10-12 11:48 ?1824次閱讀
    如何通過<b class='flag-5'>XGBoost</b>解釋機器學習

    PyInstaller打包xgboost算法包等可能出現問題是什么

    PyInstaller 打包 xgboost算法包等可能出現問題
    發表于 07-16 14:35

    基于xgboost的風力發電機葉片結冰分類預測 精選資料分享

    xgboost中文叫做極致梯度提升模型,官方文檔鏈接:https://xgboost.readthedocs.io/en/latest/tutorials/model.html2018年9月6日筆記
    發表于 07-12 06:58

    基于xgboost的風力發電機葉片結冰分類預測 精選資料下載

    xgboost中文叫做極致梯度提升模型,官方文檔鏈接:https://xgboost.readthedocs.io/en/latest/tutorials/model.html2018年9月6日筆記
    發表于 07-12 06:44

    通過學習PPT地址和xgboost導讀和實戰地址來對xgboost原理和應用分析

    關于xgboost的原理網絡上的資源很少,大多數還停留在應用層面,本文通過學習陳天奇博士的PPT和xgboost導讀和實戰地址,希望對xgboost原理進行深入理解。
    的頭像 發表于 01-02 10:18 ?6554次閱讀
    通過學習PPT地址和<b class='flag-5'>xgboost</b>導讀和實戰地址來對<b class='flag-5'>xgboost</b>原理和應用分析

    面試中出現有關Xgboost總結

    介紹 Xgboost是GB算法的高效實現,xgboost中的基學習器除了可以是CART(gbtree)也可以是線性分類器(gblinear)
    發表于 03-20 16:48 ?4478次閱讀

    XGBoost原理概述 XGBoost和GBDT的區別

    相比于經典的GBDT,xgboost做了一些改進,從而在效果和性能上有明顯的提升。
    的頭像 發表于 07-16 18:54 ?7.9w次閱讀
    <b class='flag-5'>XGBoost</b>原理概述 <b class='flag-5'>XGBoost</b>和GBDT的區別

    基于遺傳算法和隨機森林的XGBoost改進方法

    ,分別建立 GA Xgboost和GARF模型。然后對 GA Xgboost和GARF進行變權組合,利用訓練集的預測值與真實值的均
    發表于 04-26 15:44 ?10次下載
    基于遺傳算法和隨機森林的<b class='flag-5'>XGBoost</b>改進方法

    基于Xgboost算法的高錳鋼表面粗糙度預測

    基于Xgboost算法的高錳鋼表面粗糙度預測
    發表于 06-19 15:09 ?14次下載

    如何使用FIL后端部署XGBOOST模型

      使用 FIL 后端,NVIDIA Triton 推理服務器現在提供了一個高度優化的實時服務的森林模型,無論是在他們自己或旁邊的深度學習模型
    的頭像 發表于 04-11 14:35 ?1450次閱讀
    如何使用FIL后端部署<b class='flag-5'>XGBOOST</b><b class='flag-5'>模型</b>

    在幾個AWS實例上運行的XGBoost和LightGBM的性能比較

    XGBoost(eXtreme Gradient Boosting)是一個在Gradient Boosting Decision Tree(GBDT)框架下的開源機器學習庫(https://github.com/dmlc/xgboost)。
    的頭像 發表于 10-24 10:24 ?1440次閱讀

    XGBoost超參數調優指南

    對于XGBoost來說,默認的超參數是可以正常運行的,但是如果你想獲得最佳的效果,那么就需要自行調整一些超參數來匹配你的數據,以下參數對于XGBoost非常重要
    的頭像 發表于 06-15 18:15 ?836次閱讀
    <b class='flag-5'>XGBoost</b>超參數調優指南

    XGBoost中無需手動編碼的分類特征

    XGBoost 中無需手動編碼的分類特征
    的頭像 發表于 07-05 16:30 ?683次閱讀

    XGBoost 2.0介紹

    XGBoost是處理不同類型表格數據的最著名的算法,LightGBM 和Catboost也是為了修改他的缺陷而發布的。近日XGBoost發布了新的2.0版,本文除了介紹XGBoost
    的頭像 發表于 11-03 10:12 ?492次閱讀
    <b class='flag-5'>XGBoost</b> 2.0<b class='flag-5'>介紹</b>

    詳解XGBoost 2.0重大更新!

    另外還有一點是基于樹的模型可以輕松地可視化和解釋,這進一步增加了吸引力,特別是在理解表格數據結構時。通過利用這些固有的優勢,基于樹的方法——尤其是像XGBoost這樣的高級方法——非常適合處理數據科學中的各種挑戰,特別是在處理表格數據時。
    的頭像 發表于 11-14 16:22 ?812次閱讀
    詳解<b class='flag-5'>XGBoost</b> 2.0重大更新!
    主站蜘蛛池模板: 亚洲欧美一区二区三区久久| 国产精品A8198V久久A片| 精品无码无人网站免费视频 | hd性欧美俱乐部中文| 双腿被绑成M型调教PLAY照片| 国产一区二区在线免费观看| 一道本无吗d d在线播放| 欧美成人猛片aaaaaaa| 国产免费毛片在线观看| 直插下身完整的欧美版| 日本无码人妻丰满熟妇5G影院| 国产在线精品亚洲| 99热这里只有精品9| 性欧美video| 女子叉开腿让男子桶免费软件| 国产三级级在线电影| 91免费网站在线看入口黄| 婷婷综合久久狠狠色| 麻豆国产自制在线观看| 国产精品久久人妻无码网站一区L| 综合人妻久久一区二区精品| 偷偷鲁青春草原视频| 免费一级特黄欧美大片久久网| 国产午夜精品一区二区三区| 97影院理论午夜伦不卡偷| 乡村教师电影完整版在线观看| 美女用手扒开粉嫩的屁股| 国产午夜亚洲精品一区| GAY东北澡堂激情2022| 一本道mw高清码二区三区| 视频一区二区三区蜜桃麻豆| 免费看a毛片| 久久高清内射无套| 国产精品一区二区20P| bbbbbxxxxx肥胖| 伊人AV一区二区三区夜色撩人| 神马影院在线eecss伦理片| 女bbbbxxx孕妇| 久久成人免费观看全部免费| 国产精品免费观看视频播放| yellow免费|