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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

sklearn中的xgboost_xgboost来了

發(fā)布時(shí)間:2023/11/27 生活经验 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sklearn中的xgboost_xgboost来了 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


一.xgboost前奏

1,介紹一下啥是xgboost

XGBoost全稱(chēng)是eXtreme Gradient Boosting,即極限梯度提升算法。它由陳天奇所設(shè)計(jì),致力于讓提升樹(shù)突破自身的計(jì)算極限,以實(shí)現(xiàn)運(yùn)算快速,性能優(yōu)秀的工程目標(biāo)。

2,XGBoost的三大構(gòu)件

XGBoost本身的核心是基于梯度提升樹(shù)實(shí)現(xiàn)的集成算法,整體來(lái)說(shuō)可以有三個(gè)核心部分:集成算法本身,用于集成的弱評(píng)估器,以及應(yīng)用中的其他過(guò)程。三個(gè)部分中,前兩個(gè)部分包含了XGBoost的核心原理以及數(shù)學(xué)過(guò)程,最后的部分主要是在XGBoost應(yīng)用中占有一席之地。


二.梯度提升樹(shù):xgboost的基礎(chǔ)

1,核心參數(shù):n_estimators

集成算法通過(guò)在數(shù)據(jù)上構(gòu)建多個(gè)弱評(píng)估器,匯總所有弱評(píng)估器的建模結(jié)果以獲取比單個(gè)模型更好的回歸或分類(lèi)表現(xiàn)。n_estimators就是弱分類(lèi)器的個(gè)數(shù):n_estimators越大,模型的學(xué)習(xí)能力就會(huì)越強(qiáng),模型也越容易過(guò)擬合。

1),首先XGB中的樹(shù)的數(shù)量決定了模型的學(xué)習(xí)能力,樹(shù)的數(shù)量越多,模型的學(xué)習(xí)能力越強(qiáng)。只要XGB中樹(shù)的數(shù)量足夠了,即便只有很少的數(shù)據(jù),模型也能夠?qū)W到訓(xùn)練數(shù)據(jù)100%的信息,所以XGB也是天生過(guò)擬合的模型。但在這種情況 下,模型會(huì)變得非常不穩(wěn)定。

2),XGB中樹(shù)的數(shù)量很少的時(shí)候,對(duì)模型的影響較大,當(dāng)樹(shù)的數(shù)量已經(jīng)很多的時(shí)候,對(duì)模型的影響比較小,只能有 微弱的變化。當(dāng)數(shù)據(jù)本身就處于過(guò)擬合的時(shí)候,再使用過(guò)多的樹(shù)能達(dá)到的效果甚微,反而浪費(fèi)計(jì)算資源。當(dāng)唯一指標(biāo)

或者準(zhǔn)確率給出的n_estimators看起來(lái)不太可靠的時(shí)候,我們可以改造學(xué)習(xí)曲線來(lái)幫助我們。

3),第三,樹(shù)的數(shù)量提升對(duì)模型的影響有極限,最開(kāi)始,模型的表現(xiàn)會(huì)隨著XGB的樹(shù)的數(shù)量一起提升,但到達(dá)某個(gè)點(diǎn)之后,樹(shù)的數(shù)量越多,模型的效果會(huì)逐步下降,這也說(shuō)明了暴力增加n_estimators不一定有效果。

這些都和隨機(jī)森林中的參數(shù)n_estimators表現(xiàn)出一致的狀態(tài)。在隨機(jī)森林中我們總是先調(diào)整n_estimators,當(dāng)n_estimators的極限已達(dá)到,我們才考慮其他參數(shù),但XGB中的狀況明顯更加復(fù)雜,當(dāng)數(shù)據(jù)集不太尋常的時(shí)候會(huì)更加 復(fù)雜。這是我們要給出的第一個(gè)超參數(shù),因此還是建議優(yōu)先調(diào)整n_estimators,一般都不會(huì)建議一個(gè)太大的數(shù)目, 300以下為佳。

2,有放回隨機(jī)抽樣:重要參數(shù)subsample

隨機(jī)抽樣的時(shí)候抽取的樣本比例,范圍(0,1],在sklearn中,我們使用參數(shù)subsample來(lái)控制我們的隨機(jī)抽樣。在xgb和sklearn中,這個(gè)參數(shù)都默認(rèn)為1且不能取到0,這說(shuō)明我們無(wú)法控制模型是否進(jìn)行隨機(jī)有放回抽樣,只能控制抽樣抽出來(lái)的樣本量大概是多少。采樣還對(duì)模型造成了什么樣的影響呢?采樣會(huì)減少樣本數(shù)量,而從學(xué)習(xí)曲線來(lái)看樣本數(shù)量越少模型的過(guò)擬合會(huì)越嚴(yán)重,因?yàn)閷?duì)模型來(lái)說(shuō)數(shù)據(jù)量越少模型學(xué)習(xí)越容易,學(xué)到的規(guī)則也會(huì)越具體越不適用于測(cè)試樣本。所以subsample參數(shù)通常是在樣本量本身很大的時(shí)候來(lái)調(diào)整和使用。一般保持默認(rèn)就好。

3,迭代決策樹(shù):重要參數(shù)eta

在sklearn中,我們使用參數(shù)learning_rate來(lái)干涉我們的學(xué)習(xí)速率:

集成中的學(xué)習(xí)率,又稱(chēng)為步長(zhǎng),以控制迭代速率,常用于防止過(guò)擬合。

  • xgb.train():eta,默認(rèn)0.3 取值范圍[0,1]

  • xgb.XGBRegressor():learning_rate,默認(rèn)0.1 取值范圍[0,1]

除了運(yùn)行時(shí)間,步長(zhǎng)還是一個(gè)對(duì)模型效果影響巨大的參數(shù),如果設(shè)置太大模型就無(wú)法收斂(可能導(dǎo)致很小或者M(jìn)SE很大的情況),如果設(shè)置太小模型速度就會(huì)非常緩慢,但它最后究竟會(huì)收斂到何處很難由經(jīng)驗(yàn)來(lái)判定,在訓(xùn)練集上表現(xiàn)出來(lái)的模樣和在測(cè)試集上相差甚遠(yuǎn),很難直接探索出一個(gè)泛化誤差很低的步長(zhǎng)。通常我們不調(diào)整這個(gè)參數(shù),即便調(diào)整,一般它也會(huì)在[0.01,0.2]之間變動(dòng)。如 果我們希望模型的效果更好,更多的可能是從樹(shù)本身的角度來(lái)說(shuō),對(duì)樹(shù)進(jìn)行剪枝,而不會(huì)寄希望于調(diào)整η。

現(xiàn)在來(lái)看,我們的梯度提升樹(shù)可是說(shuō)是由三個(gè)重要的部分組成:

  • ?一個(gè)能夠衡量集成算法效果的,能夠被最優(yōu)化的損失函數(shù)

  • ?一個(gè)能夠?qū)崿F(xiàn)預(yù)測(cè)的弱評(píng)估器

  • ?一種能夠讓弱評(píng)估器集成的手段,包括我們講解的迭代方法,抽樣手段,樣本加權(quán)等等過(guò)程

XGBoost是在梯度提升樹(shù)的這三個(gè)核心要素上運(yùn)行,它重新定義了損失函數(shù)和弱評(píng)估器,并且對(duì)提升算法的集成手段進(jìn)行了改進(jìn),實(shí)現(xiàn)了運(yùn)算速度和模型效果的高度平衡。并且,XGBoost將原本的梯度提升樹(shù)拓展開(kāi)來(lái),讓XGBoost不再是單純的樹(shù)的集成模型,也不只是單單的回歸模型。只要我們調(diào)節(jié)參數(shù),我們可以選擇任何我們希望集成的算法, 以及任何我們希望實(shí)現(xiàn)的功能。

三.XGBoost

1,選擇弱評(píng)估器:重要參數(shù)booster

參數(shù)“booster"來(lái)控制我們究竟使用怎樣的弱評(píng)估器。可供選擇的有這些:"gbtree", "gblinear", "dart"

2.XGB的目標(biāo)函數(shù):重要參數(shù)objective

XGB的損失函數(shù)實(shí)現(xiàn)了模型表現(xiàn)和運(yùn)算速度的平衡。普通的損失函數(shù),比如錯(cuò)誤率,均方誤差等,都只能夠衡量模型的表現(xiàn)無(wú)法衡量模型的運(yùn)算速度。我們?cè)谠S多模型中使用空間復(fù)雜度和時(shí)間復(fù)雜度來(lái)衡量模型的運(yùn)算效率。XGB因此引入了模型復(fù)雜度來(lái)衡量算法的運(yùn)算效率。因此XGB的目標(biāo)函數(shù)被寫(xiě)作:傳統(tǒng)損失函數(shù) + 模型復(fù)雜度。

常見(jiàn)的選擇有

輸入

選用的損失函數(shù)

reg:linear

使用線性回歸的損失函數(shù),均方誤差,回歸時(shí)使用

binary:logistic

使用邏輯回歸的損失函數(shù),對(duì)數(shù)損失log_loss,二分類(lèi)時(shí)使用

binary:hinge

使用支持向量機(jī)的損失函數(shù),Hinge Loss,二分類(lèi)時(shí)使用

multi:softmax

使用softmax損失函數(shù),多分類(lèi)時(shí)使用

xgb自身的調(diào)用方式

# encoding=utf-8from sklearn.metrics import r2_score# 默認(rèn)reg:linearreg = XGBR(n_estimators=180, random_state=420).fit(Xtrain, Ytrain)reg.score(Xtest, Ytest)MSE(Ytest, reg.predict(Xtest))# xgb實(shí)現(xiàn)法import xgboost as xgb# 1,使用類(lèi)Dmatrix讀取數(shù)據(jù)dtrain = xgb.DMatrix(Xtrain, Ytrain)dtest = xgb.DMatrix(Xtest, Ytest)# 2,寫(xiě)明參數(shù),silent默認(rèn)為False,通常需要手動(dòng)將它關(guān)閉param = {'silent': False, 'objective': 'reg:linear', "eta": 0.1}num_round = 180# 3,類(lèi)train,可以直接導(dǎo)入的參數(shù)是訓(xùn)練數(shù)據(jù),樹(shù)的數(shù)量,其他參數(shù)都需要通過(guò)params來(lái)導(dǎo)入bst = xgb.train(param, dtrain, num_round)# 4,接口predictr2_score(Ytest, bst.predict(dtest))MSE(Ytest, bst.predict(dtest))

3,尋找最佳分枝:結(jié)構(gòu)分?jǐn)?shù)之差

貪婪算法指的是控制局部最優(yōu)來(lái)達(dá)到全局最優(yōu)的算法,決策樹(shù)算法本身就是一種使用貪婪算法的方法。XGB作為樹(shù)的集成模型,自然也想到采用這樣的方法來(lái)進(jìn)行計(jì)算,所以我們認(rèn)為,如果每片葉子都是最優(yōu),則整體生成的樹(shù)結(jié)構(gòu)就是最優(yōu),如此就可以避免去枚舉所有可能的樹(shù)結(jié)構(gòu)。

決策樹(shù)中我們使用基尼系數(shù)或信息熵來(lái)衡量分枝之后葉子節(jié)點(diǎn)的不純度,分枝前的信息熵與分枝后的信息熵之差叫做信息增益,信息增益最大的特征上的分枝就被我們選中。當(dāng)信息增益低于某個(gè)閾值時(shí)就讓樹(shù)停止生長(zhǎng)。在XGB中我們使用的方式是類(lèi)似的:我們首先使用目標(biāo)函數(shù)來(lái)衡量樹(shù)的結(jié)構(gòu)的優(yōu)劣,然后讓樹(shù)從深度0開(kāi)始生長(zhǎng),每進(jìn)行一次分枝,我們就計(jì)算目標(biāo)函數(shù)減少了多少,當(dāng)目標(biāo)函數(shù)的降低低于我們?cè)O(shè)定的某個(gè)閾 值時(shí),就讓樹(shù)停止生長(zhǎng)。

4,讓樹(shù)停止生長(zhǎng):重要參數(shù)gamma

從目標(biāo)函數(shù)和結(jié)構(gòu)分?jǐn)?shù)之差的式子中來(lái)看,它是我們每增加一片葉子就會(huì)被剪去的懲罰項(xiàng)。增加的葉子越多,結(jié)構(gòu)分?jǐn)?shù)之差會(huì)被懲罰越重,所以它又被稱(chēng)之為是“復(fù)雜性控制”.所以 是我們用來(lái)防止過(guò)擬合的重要參數(shù)。實(shí)踐證明,它是對(duì)梯度提升樹(shù)影響最大的參數(shù)之一,其效果絲毫不遜色于n_estimators和防止過(guò)擬合的神器max_depth。同時(shí),它還是我們讓樹(shù)停止生長(zhǎng)的重要參數(shù)。在XGB中,我們規(guī)定只要結(jié)構(gòu)分?jǐn)?shù)之差Gain是大于0的,即只要目標(biāo)函數(shù)還能夠繼續(xù)減小,我們就允許樹(shù)繼續(xù)進(jìn)行分枝。我們可以直接通過(guò)設(shè)定γ的大小來(lái)讓XGB中的樹(shù)停止生長(zhǎng)。γ因此被定義為:在樹(shù)的葉節(jié)點(diǎn)上進(jìn)行進(jìn)一步分枝所需的最小目標(biāo)函數(shù)減少量,在決策樹(shù)和隨機(jī)森林中也有類(lèi)似的參數(shù)(min_split_loss,min_samples_split)。設(shè)定 越大,算法就越保守,樹(shù)的葉子數(shù)量就越少,模型的復(fù)雜度就越低。

四. XGBoost應(yīng)用中的其他問(wèn)題

1,過(guò)擬合:剪枝參數(shù)與回歸模型調(diào)參

作為天生過(guò)擬合的模型,XGBoost應(yīng)用的核心之一就是減輕過(guò)擬合帶來(lái)的影響。作為樹(shù)模型,減輕過(guò)擬合的方式主要是靠對(duì)決策樹(shù)剪枝來(lái)降低模型的復(fù)雜度,以求降低方差。在之前的講解中,我們已經(jīng)學(xué)習(xí)了好幾個(gè)可以用來(lái)防止過(guò)擬合的參數(shù),包括復(fù)雜度控制γ ,正則化的兩個(gè)參數(shù)λ和α,控制迭代速度的參數(shù)η 以及管理每次迭代前進(jìn)行的隨機(jī)有放回抽樣的參數(shù)subsample。所有的這些參數(shù)都可以用來(lái)減輕過(guò)擬合。但除此之外,我們還有幾個(gè)影響重大的,專(zhuān)用于剪枝的參數(shù):

參數(shù)含義

xgb.train()

xgb.XGBRegressor()

樹(shù)的最大深度

max_depth,默認(rèn)為6

max_depth,默認(rèn)為6

每次生成樹(shù)時(shí)隨機(jī)抽樣特征的比例

colsample_bytree,默認(rèn)1

colsample_bytree,默認(rèn)1

每次生成樹(shù)的一層時(shí)隨機(jī)抽樣特征的比例

colsample_bylevel,默認(rèn)1

colsample_bylevel,默認(rèn)1

每次生成一個(gè)葉子節(jié)點(diǎn)時(shí)隨機(jī)抽樣特征的比例

colsample_bynode,默認(rèn)1

N.A.

i,樹(shù)的最大深度是決策樹(shù)中的剪枝法寶,算是最常用的剪枝參數(shù),不過(guò)在XGBoost中,最大深度的功能與參數(shù)λ相似,因此如果先調(diào)節(jié)了λ ,則最大深度可能無(wú)法展示出巨大的效果。當(dāng)然,如果先調(diào)整了最大深度,則λ也有 可能無(wú)法顯示明顯的效果。通常來(lái)說(shuō),這兩個(gè)參數(shù)中我們只使用一個(gè)。

ii,在建立樹(shù)時(shí)對(duì)特征進(jìn)行抽樣其實(shí)是決策樹(shù)和隨機(jī)森林中比較常見(jiàn)的一種方法,但是在XGBoost之前,這種方法并沒(méi)有被使用到boosting算法當(dāng)中過(guò)。Boosting算法一直以抽取樣本(橫向抽樣)來(lái)調(diào)整模型過(guò)擬合的程度,而實(shí)踐證明其實(shí)縱向抽樣(抽取特征)更能夠防止過(guò)擬合。

iii,通常當(dāng)我們獲得了一個(gè)數(shù)據(jù)集后,我們先使用網(wǎng)格搜索找出比較合適的n_estimators和eta組合,然后使用gamma或 者max_depth觀察模型處于什么樣的狀態(tài)(過(guò)擬合還是欠擬合,處于方差-偏差圖像的左邊還是右邊?),最后再?zèng)Q定是否要進(jìn)行剪枝。通常來(lái)說(shuō),對(duì)于XGB模型,大多數(shù)時(shí)候都是需要剪枝的。

讓我們先從最原始的,設(shè)定默認(rèn)參數(shù)開(kāi)始,先觀察一下默認(rèn)參數(shù)下,我們的交叉驗(yàn)證曲線長(zhǎng)什么樣:
# encoding=utf-8import datetimeimport timeimport matplotlib.pyplot as pltimport pandas as pdimport xgboost as xgbfrom sklearn.datasets import fetch_california_housing as fchhousevalue = fch()X = pd.DataFrame(housevalue.data)y = housevalue.targetdfull = xgb.DMatrix(X, y)param1 = {'silent': True  # 并非默認(rèn)    , 'obj': 'reg:linear'  # 并非默認(rèn)    , "subsample": 1, "max_depth": 6, "eta": 0.3    , "gamma": 0    , "lambda": 1    , "alpha": 0, "colsample_bytree": 1, "colsample_bylevel": 1, "colsample_bynode": 1, "nfold": 5}num_round = 200time0 = time()cvresult1 = xgb.cv(param1, dfull, num_round)print(datetime.datetime.fromtimestamp(time() - time0).strftime("%M:%S:%f"))fig, ax = plt.subplots(1, figsize=(15, 10))# ax.set_ylim(top=5)ax.grid()ax.plot(range(1, 201), cvresult1.iloc[:, 0], c="red", label="train,original")ax.plot(range(1, 201), cvresult1.iloc[:, 2], c="orange", label="test,original")ax.legend(fontsize="xx-large")plt.show()

2,在調(diào)參過(guò)程中可能會(huì)遇到這些問(wèn)題:

i.一個(gè)個(gè)參數(shù)調(diào)整太麻煩,可不可以使用網(wǎng)格搜索呢?

當(dāng)然可以!只要電腦有足夠的計(jì)算資源,并且你信任網(wǎng)格搜索,那任何時(shí)候我們都可以使用網(wǎng)格搜索。只是使用的時(shí)候要注意,首先XGB的參數(shù)非常多,參數(shù)可取的范圍也很廣,究竟是使用np.linspace或者np.arange作為參數(shù)的備選值也會(huì)影響結(jié)果,而且網(wǎng)格搜索的運(yùn)行速度往往不容樂(lè)觀,因此建議至少先使用xgboost.cv來(lái)確認(rèn)參數(shù)的范圍,否則很可能花很長(zhǎng)的時(shí)間做了無(wú)用功。并且,在使用網(wǎng)格搜索的時(shí)候,最好不要一次性將所有的參數(shù)都放入進(jìn)行搜索,最多一次兩三個(gè)。有一些互相影響的參數(shù)需要放在一起使用,比如學(xué)習(xí)率eta和樹(shù)的數(shù)量n_estimators。另外,如果網(wǎng)格搜索的結(jié)果與你的理解相違背,與你手動(dòng)調(diào)參的結(jié)果相違背,選擇模型效果較好的一個(gè)。如果兩者效果差不多,那選擇相信手動(dòng)調(diào)參的結(jié)果。網(wǎng)格畢竟是枚舉出結(jié)果,很多時(shí)候得出的結(jié)果可能會(huì)是具體到數(shù)據(jù)的巧合,我們無(wú)法去一一解釋網(wǎng)格搜索得出的結(jié)論為何是這樣。如果你感覺(jué)都無(wú)法解釋,那就不要去在意,直接選擇結(jié)果較好的一個(gè)。

ii. 調(diào)參的時(shí)候參數(shù)的順序會(huì)影響調(diào)參結(jié)果嗎?

會(huì)影響,因此在現(xiàn)實(shí)中,我們會(huì)優(yōu)先調(diào)整那些對(duì)模型影響巨大的參數(shù)。在這里,我建議的剪枝上的調(diào)參順序是: n_estimators與eta共同調(diào)節(jié),gamma或者max_depth,采樣和抽樣參數(shù)(縱向抽樣影響更大),最后才是正則化 的兩個(gè)參數(shù)。當(dāng)然,可以根據(jù)自己的需求來(lái)進(jìn)行調(diào)整。

iii. 調(diào)參之后測(cè)試集上的效果還沒(méi)有原始設(shè)定上的效果好怎么辦?

如果調(diào)參之后,交叉驗(yàn)證曲線確實(shí)顯示測(cè)試集和訓(xùn)練集上的模型評(píng)估效果是更加接近的,推薦使用調(diào)參之后的效果。我們希望增強(qiáng)模型的泛化能力,然而泛化能力的增強(qiáng)并不代表著在新數(shù)據(jù)集上模型的結(jié)果一定優(yōu)秀,因?yàn)槲粗獢?shù)據(jù)集 并非一定符合全數(shù)據(jù)的分布,在一組未知數(shù)據(jù)上表現(xiàn)十分優(yōu)秀,也不一定就能夠在其他的未知數(shù)據(jù)集上表現(xiàn)優(yōu)秀。因 此不必過(guò)于糾結(jié)在現(xiàn)有的測(cè)試集上是否表現(xiàn)優(yōu)秀。當(dāng)然了,在現(xiàn)有數(shù)據(jù)上如果能夠?qū)崿F(xiàn)訓(xùn)練集和測(cè)試集都非常優(yōu)秀, 那模型的泛化能力自然也會(huì)是很強(qiáng)的。

五,XGBoost模型的保存和調(diào)用

1,使用 pickle保存和調(diào)用模型

pickle是python編程中比較標(biāo)準(zhǔn)的一個(gè)保存和調(diào)用模型的庫(kù),我們可以使用pickle和open函數(shù)的連用,來(lái)將我們的模型保存到本地。以剛才我們已經(jīng)調(diào)整好的參數(shù)和訓(xùn)練好的模型為例,我們可以這樣來(lái)使用pickle:
# encoding=utf-8import pickleimport pandas as pdimport xgboost as xgbfrom sklearn.datasets import fetch_california_housing as fchfrom sklearn.datasets import load_bostonfrom sklearn.metrics import mean_squared_error as MSE, r2_scorefrom sklearn.model_selection import train_test_split as TTShousevalue = fch()X = pd.DataFrame(housevalue.data)y = housevalue.targetX.columns = ["住戶(hù)收入中位數(shù)", "房屋使用年代中位數(shù)", "平均房間數(shù)目"    , "平均臥室數(shù)目", "街區(qū)人口", "平均入住率", "街區(qū)的緯度", "街區(qū)的經(jīng)度"]X.head()Xtrain, Xtest, Ytrain, Ytest = TTS(X, y, test_size=0.3, random_state=420)dtrain = xgb.DMatrix(Xtrain, Ytrain)# 設(shè)定參數(shù),對(duì)模型進(jìn)行訓(xùn)練param = {'silent': True    , 'obj': 'reg:linear', "subsample": 1, "eta": 0.05    , "gamma": 20, "lambda": 3.5, "alpha": 0.2, "max_depth": 4, "colsample_bytree": 0.4, "colsample_bylevel": 0.6,         "colsample_bynode": 1}num_round = 180bst = xgb.train(param, dtrain, num_round)# 保存模型# 注意,open中我們往往使用w或者r作為讀取的模式,但其實(shí)w與r只能用于文本文件,當(dāng)我們希望導(dǎo)入的不是文本文件,而 是模型本身的時(shí)候,我們使用"wb"和"rb"作為讀取的模式。其中wb表示以二進(jìn)制寫(xiě)入,rb表示以二進(jìn)制讀入pickle.dump(bst, open("xgboostonboston.dat", "wb"))data = load_boston()X = data.datay = data.targetXtrain, Xtest, Ytrain, Ytest = TTS(X, y, test_size=0.3, random_state=420)dtest = xgb.DMatrix(Xtest, Ytest)# 導(dǎo)入模型loaded_model = pickle.load(open("xgboostonboston.dat", "rb"))ypreds = loaded_model.predict(dtest)MSE(Ytest, ypreds)r2_score(Ytest, ypreds)

2,使用Joblib保存和調(diào)用模型

Joblib是SciPy生態(tài)系統(tǒng)中的一部分,它為Python提供保存和調(diào)用管道和對(duì)象的功能,處理NumPy結(jié)構(gòu)的數(shù)據(jù)尤其高效,對(duì)于很大的數(shù)據(jù)集和巨大的模型非常有用。Joblib與pickle API非常相似
bst = xgb.train(param, dtrain, num_round)import joblibjoblib.dump(bst,"xgboost-boston.dat")loaded_model = joblib.load("xgboost-boston.dat")ypreds = loaded_model.predict(dtest)MSE(Ytest, ypreds)r2_score(Ytest,ypreds)

總結(jié)

以上是生活随笔為你收集整理的sklearn中的xgboost_xgboost来了的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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