實戰(zhàn)人品預(yù)測之二_熱門模型xgboost

1. 介紹

?有人戲稱數(shù)據(jù)挖掘比賽為GBDT調(diào)參大賽朴摊,因為在很多比賽后期袋毙,大家都使用GBDT類的算法,特征類似砸烦,只有模型參數(shù)不同弃鸦,模型集成方法不同,最終大家的成績差別也很小幢痘。
?上篇《實戰(zhàn)人品預(yù)測之一_國內(nèi)大數(shù)據(jù)競賽平臺》唬格,介紹DataCastle平臺的“微額借款用戶人品預(yù)測大賽”比賽規(guī)則,以及一些初步的嘗試颜说。本篇說說最終獲勝的购岗,也是GDBT類算法中使用頻率最高的xgboost算法的使用和調(diào)參方法。

2. xgboost原理

?之前在《機器學習_集成算法》篇(http://www.reibang.com/p/3c8cca3e1ca2)中介紹過GBDT類的算法门粪,簡單回顧一下:
?Boosting算法不斷地使用同一算法(比如決策樹)建立新模型喊积,而新模型分配給上一次錯分樣本更大的權(quán)重,最終根據(jù)按成功度加權(quán)組合得到結(jié)果玄妈。由于引入了逐步改進的思想乾吻,重要屬性會被加權(quán)。
?Gradient Boosting Machine(GBM)梯度提升算法是目前比較流行的數(shù)據(jù)挖掘模型拟蜻,它通過求損失函數(shù)在梯度方向下降的方法绎签,層層改進,是泛化能力較強的算法瞭郑,常用于各種數(shù)據(jù)挖掘比賽之中辜御。常用的工具有XGBoost,LightGBM屈张,sklearn提供的?GradientBoostingClassifier等等擒权。GBM常把決策樹作為基模型,我們看到的GBDT梯度提升決策樹阁谆,指的就是該算法碳抄。

3. xgboost簡單使用

(1) 安裝庫

?xgboost是一個獨立的軟件包,需要單獨安裝

$ pip install xgboost

(2) 示例代碼

import xgboost as xgb

model = xgb.XGBClassifier()
model.fit(train_x, train_y)
model.score(test_x, test_y)
test_y = model.predict(test_x)

4. xgboost與sklearn

?xgboost提供了兩種接口场绿,一種是它自身的調(diào)用接口剖效,另一種與sklearn的調(diào)用方式一樣,上面的代碼使用的是sklearn調(diào)用方式,它讓用戶能很快從sklearn的GBDT轉(zhuǎn)到xgboost上璧尸。(不只xgboost咒林,很多數(shù)據(jù)挖掘庫都提供類似sklearn的調(diào)用方法)
?另外一個好處是,它能與sklearn的工具GridSearchCV結(jié)合爷光,實現(xiàn)自動調(diào)參垫竞,后面細說。

5. xgboost參數(shù)

?xgboost參數(shù)分為三類:boost參數(shù)蛀序,tree參數(shù)欢瞪,其它參數(shù)。

(1) Tree參數(shù)

?雖然xgboost也提供了linear作為弱分類器徐裸,但是大家一般都使用樹分類器遣鼓,這部分設(shè)置主要是控制樹的大小,避免過擬合重贺,具體參數(shù)是由實例的多少及分布密度決定的骑祟。

  • max_depth:最大樹深(默認6,同sklearn中max_depth)
  • max_leaf_nodes:樹上最大的節(jié)點或葉子的數(shù)量(同sklearn中max_ leaf_ nodes)

(2) Boost參數(shù)

  • scale_pos_weight:正反例數(shù)據(jù)權(quán)重气笙,使用它就不再需要增加反例了曾我。
  • early_stopping_rounds:多少輪內(nèi)無提高則停止。
  • eta:學習率(默認0.3健民,同sklearn中l(wèi)earning_ rate)抒巢。
  • min_child_weight:最小葉子節(jié)點樣本權(quán)重和(默認1,類似sklearn中min_child_leaf)秉犹。
  • max_delta_step:每棵樹權(quán)重改變的最大步長(默認0蛉谜,為沒約束,一般不設(shè))崇堵。
  • subsample:每棵樹所用到的子樣本占總樣本的比例(默認1型诚,一般用0.8,同sklearn中subsample)鸳劳。
  • colsample_bytree:樹對特征采樣的比例(默認1狰贯,類似sklearn中max_features)。
  • colsample_bylevel:每一級的每一次分裂赏廓,對列數(shù)的采樣的占比涵紊。
  • lambda:權(quán)重的L2正則化項,避免過擬合幔摸,降低復雜度(默認1摸柄,不常用)
  • alpha:權(quán)重的L1正則化項,避免過擬合既忆,降低復雜度(默認1)
  • gamma:節(jié)點分裂所需的最小損失函數(shù)下降值(默認0)

(3) 其它參數(shù)

  • booster:選擇分類器類型樹或線性(默認為gbtree驱负,一般不改)
  • silent:是否打印輸出信息(默認為0嗦玖,輸出信息,一般不改)
  • nthread:最大線程數(shù)(默認為CPU全部核跃脊,一般不改)
  • seed:隨機種子宇挫,使用后隨機結(jié)果變得可復現(xiàn)(類似sklearn中random_ state)
  • objective:損失函數(shù)
  • eval_metric:有效數(shù)據(jù)的度量方法,有rmse, mae, logloss, auc等

6. 調(diào)參

?當我第一次用xgboost替代了sklearn的 gdbt時酪术,同樣是默認參數(shù)捞稿,在不調(diào)參的情況下拼缝,成績下降了0.05,主要是由于xgboost默認參數(shù)導致的彰亥,后來使用了冠軍的參數(shù)咧七,大概有0.02的提升。這說明調(diào)參是必須的任斋。
?調(diào)參總體來說就是在確定其它參數(shù)的情況下继阻,調(diào)某個參數(shù)。雖然這樣單獨調(diào)參會有一些問題废酷,比如組合特征后最佳參數(shù)可能變化瘟檩,但是除了窮舉和人對特征的理解以外,好像也沒什么別的辦法澈蟆。
?調(diào)參時注意先把學習率調(diào)到0.1以上墨辛,以加快運行速度,后期模型穩(wěn)定后再將值調(diào)低趴俘。
?sklearn提供了調(diào)參工具GridSearchCV睹簇,可與xgboost配合,簡單例程如下:

from sklearn import svm, datasets
from sklearn.model_selection import GridSearchCV
import xgboost as xgb 

iris = datasets.load_iris()

parameters = {'max_depth':[4,5,6], 'min_child_weight':[4,5,6]}
model = xgb.XGBClassifier()
clf = GridSearchCV(model, parameters)
clf.fit(iris.data, iris.target)

print(clf.grid_scores_)
print(clf.best_params_)
print(clf.best_score_)

?調(diào)參先后也很重要寥闪,具體方法請見:
http://blog.csdn.net/han_xiaoyang/article/details/52665396

7. 總結(jié)

?通過本次實驗太惠,明顯看到xgboost好處,比如支持多線程疲憋,可調(diào)節(jié)正反例權(quán)重凿渊,自帶交叉驗證,處理缺省值缚柳,包含了很多預(yù)處理的工作埃脏。
?使用冠軍代碼做預(yù)測,沒加任何的特征處理和其它算法的情況下秋忙,迭代共進行了50000次剂癌,線上得分超過0.7,這個得分和比賽結(jié)束時的最高分0.734已經(jīng)差不太多了翰绊。每次打印出AUC值佩谷,能明顯看出它的進化過程:不斷迭代旁壮,直到收斂。從原理上看谐檀,該算法在基礎(chǔ)參數(shù)沒問題抡谐,在機器算力也足夠的情況下,應(yīng)該可以取得接近最佳的成績桐猬。
?擴展地看麦撵,增加錯誤權(quán)重,不斷迭代的集成算法溃肪,與多算法結(jié)合效果都不錯免胃,具體可以參考sklearn自帶工具AdaBoost。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惫撰,一起剝皮案震驚了整個濱河市羔沙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厨钻,老刑警劉巖扼雏,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異夯膀,居然都是意外死亡诗充,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門诱建,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝴蜓,“玉大人,你說我怎么就攤上這事俺猿±恚” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵辜荠,是天一觀的道長汽抚。 經(jīng)常有香客問我,道長伯病,這世上最難降的妖魔是什么造烁? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮午笛,結(jié)果婚禮上惭蟋,老公的妹妹穿的比我還像新娘。我一直安慰自己药磺,他們只是感情好告组,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著癌佩,像睡著了一般木缝。 火紅的嫁衣襯著肌膚如雪便锨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天我碟,我揣著相機與錄音放案,去河邊找鬼。 笑死矫俺,一個胖子當著我的面吹牛吱殉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播厘托,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼友雳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了铅匹?” 一聲冷哼從身側(cè)響起押赊,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伊群,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體策精,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年咽袜,在試婚紗的時候發(fā)現(xiàn)自己被綠了丸卷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片询刹。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡谜嫉,死狀恐怖凹联,靈堂內(nèi)的尸體忽然破棺而出沐兰,到底是詐尸還是另有隱情,我是刑警寧澤蔽挠,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布住闯,位于F島的核電站,受9級特大地震影響澳淑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜杠巡,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一量窘、第九天 我趴在偏房一處隱蔽的房頂上張望氢拥。 院中可真熱鬧蚌铜,春花似錦锨侯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至造壮,卻和暖如春渡讼,著一層夾襖步出監(jiān)牢的瞬間耳璧,已是汗流浹背成箫。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工旨枯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蹬昌,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓皂贩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親明刷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容