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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【Kaggle】Intermediate Machine Learning(XGBoost + Data Leakage)

發布時間:2024/7/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Kaggle】Intermediate Machine Learning(XGBoost + Data Leakage) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 6. XGBoost
    • 7. Data Leakage 數據泄露

上一篇:【Kaggle】Intermediate Machine Learning(管道+交叉驗證)

6. XGBoost

參考:《統計學習方法》提升方法(Boosting)

extreme gradient boosting “梯度提升”是指對損失函數使用梯度下降來確定此新模型中的參數

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)))

參數調整
XGBoost 具有一些可以極大地影響準確性和訓練速度的參數

  • n_estimators :等于我們包含在集合中的模型數量

值太低會導致擬合不足,導致訓練數據和測試數據的預測不正確。

值太高會導致擬合過度,導致對訓練數據的準確預測,但對測試數據的預測不準確

典型值范圍是100-1000,盡管這在很大程度上取決于下面討論的 learning_rate 參數

  • early_stopping_rounds :提供了一種自動為n_estimators查找理想值的方法。為n_estimators設置一個較高的值,然后使用early_stopping_rounds查找停止迭代的最佳時間是很明智的

設置early_stopping_rounds = 5是一個合理的選擇。在這種情況下,連續5輪驗證評分下降后停止

當使用early_stopping_rounds時,還需要預留一些數據來計算驗證分數,這是通過設置eval_set參數來完成的

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
    與其簡單地將每個組件模型的預測相加即可得到預測,還可以在將每個模型的預測相加之前將其乘以一小數(稱為學習率)

這意味著添加到集合中的每棵樹對我們的幫助都會有所減少
因此,可以為n_estimators設置更高的值而不會過度擬合
如果我們使用 early stopping,則會自動確定適當的 tree 的數量

通常,學習率較高 且 estimators 多,會生成更精確的模型,但迭代次數較多,花費較長時間,默認情況下,XGBoost 設置 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:運行較大數據集,并行更快地構建模型

通常將參數 n_jobs 設置為等于計算機上的內核數
在較小的數據集上,這無濟于事
但是,在大型數據集中很有用,否則將花費很長時間在fit命令中等待

my_model = XGBRegressor(n_estimators=1000, learning_rate=0.05, n_jobs=4) my_model.fit(X_train, y_train, early_stopping_rounds=5, eval_set=[(X_valid, y_valid)], verbose=False)

7. Data Leakage 數據泄露

Data Leakage 相關博文

泄漏會導致模型看起來很準確,當開始對模型進行決策為止,然后模型變得非常不準確

泄漏有兩種主要類型:目標泄漏 target leakage和訓練-測試污染train-test contamination

  • 目標泄漏 target leakage

例子:人們得了肺炎后要服用抗生素藥物才能康復

原始數據顯示這些列之間存在很強的關系,但是在確定got_pneumonia的值后,took_antibiotic_medicine經常更改。這是目標泄漏,因為我們要預測的是 是否會患肺炎,是否吃藥是在得了肺炎之后的選擇,會不確定,因果關系反了

該模型將發現,對于took_antibiotic_medicine值為False的任何人都沒有肺炎。由于驗證數據與訓練數據來自同一來源,模型將具有很高的驗證(或交叉驗證)分數

但是,此模型隨后在現實世界中部署時將非常不準確,因為有些患有肺炎的患者也不會接受抗生素治療
為防止此類數據泄漏,應當將該特征數據排除

  • 訓練-測試污染 Train-Test Contamination

驗證旨在衡量模型如何處理之前未考慮過的數據

例如,在調用train_test_split()之前進行了預處理(例如 fitting an Imputer)。模型可能會獲得良好的驗證評分,但是在部署模型進行決策時卻表現不佳

將驗證數據或測試數據中的數據合并到了如何進行預測中,因此即使無法將其推廣到新數據,該方法也可能會對特定數據表現良好。當執行更復雜的特征工程時,此問題變得更加微妙(更加危險)


例子:信用卡

沒有信用卡的人 —> 100%沒有消費支出
有信用卡的人 —> 2%的人,沒有消費記錄

根據此特征來預測是否會發放信用卡申請,正確率98%
但是有部分持有信用卡的人可能平時沒有消費,并且統計出來的費用是這張申請的信用卡的消費,還是申請這張信用卡之前的消費呢?這些都不是很清楚,這就可能造成很大偏差

所以這種可能造成很大偏差的特征要棄用,或者非常謹慎

# 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())

總結:

  • 仔細分離訓練和驗證數據可以防止Train-Test Contamination,并且Pipeline可以幫助實現這種分離
  • 謹慎,常識和數據探索相結合可以幫助識別target leakage
  • 思考數據泄露問題,本質上需要考慮特征產生的時間順序:
    如果該特征在你做出類型判斷之前可以確定,那么就可以作為類型判斷的依據;
    如果該特征必須在你做出類型判斷之后才可以確定,那么就不可以作為類型判斷的依據,否則就是因果倒置

完成了課程,獲得證書鼓勵,🚀🚀🚀 加油

上一篇:【Kaggle】Intermediate Machine Learning(管道+交叉驗證)

總結

以上是生活随笔為你收集整理的【Kaggle】Intermediate Machine Learning(XGBoost + Data Leakage)的全部內容,希望文章能夠幫你解決所遇到的問題。

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