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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

9.XGBoost

發(fā)布時間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 9.XGBoost 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本教程是機器學(xué)習(xí)系列的一部分。 在此步驟中,您將學(xué)習(xí)如何使用功能強大的xgboost庫構(gòu)建和優(yōu)化模型。

What is XGBoost

XGBoost是處理標(biāo)準(zhǔn)表格數(shù)據(jù)的領(lǐng)先模型(您在Pandas DataFrames中存儲的數(shù)據(jù)類型,而不是像圖像和視頻這樣的更奇特的數(shù)據(jù)類型)。 XGBoost模型在許多Kaggle比賽中占據(jù)主導(dǎo)地位。

為了達(dá)到峰值精度,XGBoost模型比Random Forest等技術(shù)需要更多的知識和模型調(diào)整。 在本教程之后,你將能夠

  • ???? 遵循XGBoost的完整建模工作流程
  • ???? 微調(diào)XGBoost模型以獲得最佳性能

XGBoost是Gradient Boosted決策樹算法的一種實現(xiàn)(scikit-learn有另一個版本的算法,但XGBoost有一些技術(shù)優(yōu)勢。)什么是Gradient Boosted決策樹? 我們將通過一個圖表。

我們經(jīng)歷了重復(fù)構(gòu)建新模型的循環(huán),并將它們組合成一個整體模型。 我們通過計算數(shù)據(jù)集中每個觀察的誤差來開始循環(huán)。 然后我們構(gòu)建一個新模型來預(yù)測。 我們將此誤差預(yù)測模型的預(yù)測添加到“模型集合”中。

為了進(jìn)行預(yù)測,我們添加了以前所有模型的預(yù)測。 我們可以使用這些預(yù)測來計算新誤差,構(gòu)建下一個模型,并將其添加到整體中。

那個周期之外還有一件。 我們需要一些基礎(chǔ)預(yù)測來開始循環(huán)。 在實踐中,最初的預(yù)測可能非常幼稚。 即使它的預(yù)測非常不準(zhǔn)確,隨后對整體的添加將解決這些錯誤。

這個過程可能聽起來很復(fù)雜,但使用它的代碼很簡單。 我們將在下面的模型調(diào)整部分填寫一些額外的解釋性細(xì)節(jié)。

Example

我們將從預(yù)先加載到train_X,test_X,train_y,test_x的數(shù)據(jù)開始。

[1]

import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import Imputerdata = pd.read_csv('../input/train.csv') data.dropna(axis=0, subset=['SalePrice'], inplace=True) y = data.SalePrice X = data.drop(['SalePrice'], axis=1).select_dtypes(exclude=['object']) train_X, test_X, train_y, test_y = train_test_split(X.as_matrix(), y.as_matrix(), test_size=0.25)my_imputer = Imputer() train_X = my_imputer.fit_transform(train_X) test_X = my_imputer.transform(test_X) /opt/conda/lib/python3.6/site-packages/ipykernel_launcher.py:9: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.if __name__ == '__main__': /opt/conda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:58: DeprecationWarning: Class Imputer is deprecated; Imputer was deprecated in version 0.20 and will be removed in 0.22. Import impute.SimpleImputer from sklearn instead.warnings.warn(msg, category=DeprecationWarning)

我們像在scikit-learn建立模型和擬合。

【2】

from xgboost import XGBRegressormy_model = XGBRegressor() # Add silent=True to avoid printing out updates with each cycle my_model.fit(train_X, train_y, verbose=False)

我們同樣評估模型并像在scikit-learn中那樣進(jìn)行預(yù)測。

【3】

# make predictions predictions = my_model.predict(test_X)from sklearn.metrics import mean_absolute_error print("Mean Absolute Error : " + str(mean_absolute_error(predictions, test_y))) Mean Absolute Error : 17543.750299657535

Model Tuning

XGBoost有一些參數(shù)可以顯著影響您的模型的準(zhǔn)確性和訓(xùn)練速度。您應(yīng)該了解的第一個參數(shù)是:
n_estimators 和 early_stopping_rounds

n_estimators指定完成上述建模周期的次數(shù)。

在欠擬合vs過擬合圖中,n_estimators將您向右移動。值太低會導(dǎo)致欠擬合,這對訓(xùn)練數(shù)據(jù)和新數(shù)據(jù)的預(yù)測都是不準(zhǔn)確的。太大的值會導(dǎo)致過度擬合,這時對訓(xùn)練數(shù)據(jù)的預(yù)測準(zhǔn)確,但對新數(shù)據(jù)的預(yù)測不準(zhǔn)確(這是我們關(guān)心的)。您可以試驗數(shù)據(jù)集以找到理想值。典型值范圍從100到1000,但這很大程度上取決于下面討論的學(xué)習(xí)率。

參數(shù)early_stopping_rounds提供了一種自動查找理想值的方法。過早停止會導(dǎo)致模型在驗證分?jǐn)?shù)停止改善時停止迭代,即使我們不是n_estimators的硬停止。為n_estimators設(shè)置一個高值然后使用early_stopping_rounds找到停止迭代的最佳時間是明智的。

由于隨機機會有時會導(dǎo)致單輪,其中驗證分?jǐn)?shù)沒有提高,因此您需要指定一個數(shù)字,以確定在停止前允許多少輪直線惡化。 early_stopping_rounds = 5是一個合理的值。因此,我們在連續(xù)5輪惡化的驗證分?jǐn)?shù)后停止。

以下是適合early_stopping的代碼:

【4】

my_model = XGBRegressor(n_estimators=1000) my_model.fit(train_X, train_y, early_stopping_rounds=5, eval_set=[(test_X, test_y)], verbose=False) XGBRegressor(base_score=0.5, booster='gbtree', colsample_bylevel=1,colsample_bytree=1, gamma=0, learning_rate=0.1, max_delta_step=0,max_depth=3, min_child_weight=1, missing=None, n_estimators=1000,n_jobs=1, nthread=None, objective='reg:linear', random_state=0,reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,silent=True, subsample=1)

使用early_stopping_rounds時,您需要留出一些數(shù)據(jù)來檢查要使用的輪數(shù)。 如果您以后想要使用所有數(shù)據(jù)擬合模型,請將n_estimators設(shè)置為在過早停止運行時發(fā)現(xiàn)的最佳值。

learning_rate

對于更好的XGBoost模型,這是一個微妙但重要的技巧:

我們不是通過簡單地將每個組件模型中的預(yù)測相加來獲得預(yù)測,而是將每個模型的預(yù)測乘以一個小數(shù)字,然后再添加它們。這意味著我們添加到集合中的每個樹都會減少我們的預(yù)測。 在實踐中,這降低了模型過度擬合的傾向。

因此,您可以使用更高的n_estimators值而不會過度擬合。 如果使用過早停止,將自動設(shè)置適當(dāng)數(shù)量的樹。

一般來說,較小的學(xué)習(xí)率(以及大量的估算器)將產(chǎn)生更準(zhǔn)確的XGBoost模型,盡管它也會使模型更長時間進(jìn)行訓(xùn)練,因為它在整個循環(huán)中進(jìn)行了更多的迭代。

修改上面的示例以包含學(xué)習(xí)率將產(chǎn)生以下代碼:

【5】

my_model = XGBRegressor(n_estimators=1000, learning_rate=0.05) my_model.fit(train_X, train_y, early_stopping_rounds=5, eval_set=[(test_X, test_y)], verbose=False) XGBRegressor(base_score=0.5, booster='gbtree', colsample_bylevel=1,colsample_bytree=1, gamma=0, learning_rate=0.05, max_delta_step=0,max_depth=3, min_child_weight=1, missing=None, n_estimators=1000,n_jobs=1, nthread=None, objective='reg:linear', random_state=0,reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,silent=True, subsample=1)

n_jobs

在較大數(shù)據(jù)集上需要考慮運行時間,您可以使用并行性來更快地構(gòu)建模型。通常將參數(shù)n_jobs設(shè)置為等于計算機上的核心數(shù)。在較小的數(shù)據(jù)集上,這無濟(jì)于事。

由此產(chǎn)生的模型將不會更好,因此對于擬合時間的微優(yōu)化通常只是分散注意力。但是,它在大型數(shù)據(jù)集中非常有用,否則您將在fit命令期間等待很長時間。

XGBoost有許多其他參數(shù),但這些參數(shù)將消耗更長時間幫助您微調(diào)XGBoost模型以獲得最佳性能。

Conclusion


XGBoost是目前用于在傳統(tǒng)數(shù)據(jù)(也稱為表格或結(jié)構(gòu)數(shù)據(jù))上構(gòu)建精確模型的主要算法。去應(yīng)用它來改進(jìn)你的模型!

Your Turn


使用XGBoost轉(zhuǎn)換你的模型。
使用提前停止為n_estimators找到一個好的值。然后使用所有訓(xùn)練數(shù)據(jù)和n_estimators的值重新估計模型。
完成后,返回學(xué)習(xí)機器學(xué)習(xí),繼續(xù)改進(jìn)。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的9.XGBoost的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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