【Kaggle】Intermediate Machine Learning(XGBoost + Data Leakage)
文章目錄
- 6. XGBoost
- 7. Data Leakage 數(shù)據(jù)泄露
上一篇:【Kaggle】Intermediate Machine Learning(管道+交叉驗(yàn)證)
6. XGBoost
參考:《統(tǒng)計(jì)學(xué)習(xí)方法》提升方法(Boosting)
extreme gradient boosting “梯度提升”是指對(duì)損失函數(shù)使用梯度下降來(lái)確定此新模型中的參數(shù)
from xgboost import XGBRegressormy_model = XGBRegressor(n_estimators=500) my_model.fit(X_train, y_train)from sklearn.metrics import mean_absolute_errorpredictions = my_model.predict(X_valid) print("Mean Absolute Error: " + str(mean_absolute_error(predictions, y_valid)))參數(shù)調(diào)整:
XGBoost 具有一些可以極大地影響準(zhǔn)確性和訓(xùn)練速度的參數(shù)
- n_estimators :等于我們包含在集合中的模型數(shù)量
值太低會(huì)導(dǎo)致擬合不足,導(dǎo)致訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)的預(yù)測(cè)不正確。
值太高會(huì)導(dǎo)致擬合過(guò)度,導(dǎo)致對(duì)訓(xùn)練數(shù)據(jù)的準(zhǔn)確預(yù)測(cè),但對(duì)測(cè)試數(shù)據(jù)的預(yù)測(cè)不準(zhǔn)確
典型值范圍是100-1000,盡管這在很大程度上取決于下面討論的 learning_rate 參數(shù)
- early_stopping_rounds :提供了一種自動(dòng)為n_estimators查找理想值的方法。為n_estimators設(shè)置一個(gè)較高的值,然后使用early_stopping_rounds查找停止迭代的最佳時(shí)間是很明智的
設(shè)置early_stopping_rounds = 5是一個(gè)合理的選擇。在這種情況下,連續(xù)5輪驗(yàn)證評(píng)分下降后停止
當(dāng)使用early_stopping_rounds時(shí),還需要預(yù)留一些數(shù)據(jù)來(lái)計(jì)算驗(yàn)證分?jǐn)?shù),這是通過(guò)設(shè)置eval_set參數(shù)來(lái)完成的
my_model = XGBRegressor(n_estimators=500) my_model.fit(X_train, y_train, early_stopping_rounds=5, eval_set=[(X_valid, y_valid)],verbose=False)- learning_rate
與其簡(jiǎn)單地將每個(gè)組件模型的預(yù)測(cè)相加即可得到預(yù)測(cè),還可以在將每個(gè)模型的預(yù)測(cè)相加之前將其乘以一小數(shù)(稱為學(xué)習(xí)率)
這意味著添加到集合中的每棵樹(shù)對(duì)我們的幫助都會(huì)有所減少
因此,可以為n_estimators設(shè)置更高的值而不會(huì)過(guò)度擬合
如果我們使用 early stopping,則會(huì)自動(dòng)確定適當(dāng)?shù)?tree 的數(shù)量
通常,學(xué)習(xí)率較高 且 estimators 多,會(huì)生成更精確的模型,但迭代次數(shù)較多,花費(fèi)較長(zhǎng)時(shí)間,默認(rèn)情況下,XGBoost 設(shè)置 learning_rate = 0.1
my_model = XGBRegressor(n_estimators=1000, learning_rate=0.05) my_model.fit(X_train, y_train, early_stopping_rounds=5, eval_set=[(X_valid, y_valid)], verbose=False)- n_jobs:運(yùn)行較大數(shù)據(jù)集,并行更快地構(gòu)建模型
通常將參數(shù) n_jobs 設(shè)置為等于計(jì)算機(jī)上的內(nèi)核數(shù)
在較小的數(shù)據(jù)集上,這無(wú)濟(jì)于事
但是,在大型數(shù)據(jù)集中很有用,否則將花費(fèi)很長(zhǎng)時(shí)間在fit命令中等待
7. Data Leakage 數(shù)據(jù)泄露
Data Leakage 相關(guān)博文
泄漏會(huì)導(dǎo)致模型看起來(lái)很準(zhǔn)確,當(dāng)開(kāi)始對(duì)模型進(jìn)行決策為止,然后模型變得非常不準(zhǔn)確
泄漏有兩種主要類型:目標(biāo)泄漏 target leakage和訓(xùn)練-測(cè)試污染train-test contamination
- 目標(biāo)泄漏 target leakage
例子:人們得了肺炎后要服用抗生素藥物才能康復(fù)
原始數(shù)據(jù)顯示這些列之間存在很強(qiáng)的關(guān)系,但是在確定got_pneumonia的值后,took_antibiotic_medicine經(jīng)常更改。這是目標(biāo)泄漏,因?yàn)槲覀円A(yù)測(cè)的是 是否會(huì)患肺炎,是否吃藥是在得了肺炎之后的選擇,會(huì)不確定,因果關(guān)系反了
該模型將發(fā)現(xiàn),對(duì)于took_antibiotic_medicine值為False的任何人都沒(méi)有肺炎。由于驗(yàn)證數(shù)據(jù)與訓(xùn)練數(shù)據(jù)來(lái)自同一來(lái)源,模型將具有很高的驗(yàn)證(或交叉驗(yàn)證)分?jǐn)?shù)
但是,此模型隨后在現(xiàn)實(shí)世界中部署時(shí)將非常不準(zhǔn)確,因?yàn)橛行┗加蟹窝椎幕颊咭膊粫?huì)接受抗生素治療
為防止此類數(shù)據(jù)泄漏,應(yīng)當(dāng)將該特征數(shù)據(jù)排除
- 訓(xùn)練-測(cè)試污染 Train-Test Contamination
驗(yàn)證旨在衡量模型如何處理之前未考慮過(guò)的數(shù)據(jù)
例如,在調(diào)用train_test_split()之前進(jìn)行了預(yù)處理(例如 fitting an Imputer)。模型可能會(huì)獲得良好的驗(yàn)證評(píng)分,但是在部署模型進(jìn)行決策時(shí)卻表現(xiàn)不佳
將驗(yàn)證數(shù)據(jù)或測(cè)試數(shù)據(jù)中的數(shù)據(jù)合并到了如何進(jìn)行預(yù)測(cè)中,因此即使無(wú)法將其推廣到新數(shù)據(jù),該方法也可能會(huì)對(duì)特定數(shù)據(jù)表現(xiàn)良好。當(dāng)執(zhí)行更復(fù)雜的特征工程時(shí),此問(wèn)題變得更加微妙(更加危險(xiǎn))
例子:信用卡
沒(méi)有信用卡的人 —> 100%沒(méi)有消費(fèi)支出
有信用卡的人 —> 2%的人,沒(méi)有消費(fèi)記錄
根據(jù)此特征來(lái)預(yù)測(cè)是否會(huì)發(fā)放信用卡申請(qǐng),正確率98%
但是有部分持有信用卡的人可能平時(shí)沒(méi)有消費(fèi),并且統(tǒng)計(jì)出來(lái)的費(fèi)用是這張申請(qǐng)的信用卡的消費(fèi),還是申請(qǐng)這張信用卡之前的消費(fèi)呢?這些都不是很清楚,這就可能造成很大偏差
所以這種可能造成很大偏差的特征要棄用,或者非常謹(jǐn)慎
# Drop leaky predictors from dataset potential_leaks = ['expenditure', 'share', 'active', 'majorcards'] X2 = X.drop(potential_leaks, axis=1)# Evaluate the model with leaky predictors removed cv_scores = cross_val_score(my_pipeline, X2, y, cv=5,scoring='accuracy')print("Cross-val accuracy: %f" % cv_scores.mean())總結(jié):
- 仔細(xì)分離訓(xùn)練和驗(yàn)證數(shù)據(jù)可以防止Train-Test Contamination,并且Pipeline可以幫助實(shí)現(xiàn)這種分離
- 謹(jǐn)慎,常識(shí)和數(shù)據(jù)探索相結(jié)合可以幫助識(shí)別target leakage
- 思考數(shù)據(jù)泄露問(wèn)題,本質(zhì)上需要考慮特征產(chǎn)生的時(shí)間順序:
如果該特征在你做出類型判斷之前可以確定,那么就可以作為類型判斷的依據(jù);
如果該特征必須在你做出類型判斷之后才可以確定,那么就不可以作為類型判斷的依據(jù),否則就是因果倒置
完成了課程,獲得證書(shū)鼓勵(lì),🚀🚀🚀 加油
上一篇:【Kaggle】Intermediate Machine Learning(管道+交叉驗(yàn)證)
總結(jié)
以上是生活随笔為你收集整理的【Kaggle】Intermediate Machine Learning(XGBoost + Data Leakage)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MySQL 增加、更新、删除
- 下一篇: LeetCode 426. 将二叉搜索树