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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python调参工作都是干啥的_xgboost原理及调参方法-通俗易懂版本

發(fā)布時間:2024/1/23 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python调参工作都是干啥的_xgboost原理及调参方法-通俗易懂版本 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

xgboost是各種比賽中最常使用的方法,網(wǎng)上介紹非常多,但是大部分看起來都比較費勁,這篇文章我將通俗的講一下xgboost是在干什么,是怎么實現(xiàn)的,每一步的細節(jié)中要注意什么問題,達到理解—應(yīng)用的程度,想了解具體理論的各位看官請移步其他文章。

1.xgboost原理

說起xgboost,我們不得不提一下GBDT,也就是梯度提升決策樹,這是一種基于樹的集成算法,至于什么方法構(gòu)成了GBDT的決策樹,無非就是ID3、C4.5、C5.0、CART,最常用的就是那個CART,多棵樹的集合就構(gòu)成了GBDT。其實GBDT是對殘差的擬合,什么意思呢?假設(shè)目標(biāo)函數(shù)是9,第一棵樹預(yù)測為5,剩下4的誤差,那么下一顆樹繼續(xù)擬合4,直至誤差滿足我們的要求,這和xgboost的思路是一樣的。那么問題來了,有了GBDT為啥還要用xgboost呢,有一種說法是,GBDT的每一步優(yōu)化都依賴于上一步的誤差,當(dāng)大數(shù)據(jù)量的時候就太慢了,xgboost通過改變目標(biāo)函數(shù)來避免了這個問題。

GBDT的目標(biāo)函數(shù)是預(yù)測值和真實值差的累加,也就是誤差累加,可以看出每一步計算都依賴于上面所有步的誤差,效率比較低。xgboost自然要做出改進,怎么優(yōu)化呢,一步步分解來看。

形式上,在目標(biāo)函數(shù)后面加一個懲罰項:

xgboost目標(biāo)函數(shù)

目標(biāo)函數(shù)簡化,采用高數(shù)中的泰勒展開,回憶一下泰勒展開是什么:

泰勒展開模式

好了怎么應(yīng)用到上面的目標(biāo)函數(shù)中呢,先來確認f(x)是啥,這個f(x)是上面說的那個損失函數(shù)l(yi,),也就是我們只泰勒展開這個l(yi,)就行了,那么扎展開的時候我們需要知道這個

是什么,來看損失函數(shù)的形式,

是個常量我們上一步求的,可以當(dāng)f(x)來看,其中x自然是變量

,求導(dǎo)也要對它求。f(xi)是這把我們求的,是導(dǎo)致函數(shù)值變化的原因,巧了這個

也表示變化的原因,那么他兩是一個東西。

現(xiàn)在能展開了吧,請看下式:

損失函數(shù)的泰勒展開

這不還是坑人嗎,怎么變得這么簡潔的,其實吧gi和hi是下面這樣的:

好了前面那個l,我們上一步不是求出來了嗎,把它忽略掉吧,損失函數(shù)變成這樣了:

損失函數(shù)的簡化形式

到了這一步,目標(biāo)函數(shù)已經(jīng)和上一步的損失無關(guān)了,也就是xgboost擺脫了GBDT的缺點,可以并行計算了,核心做法是做了個泰勒展開,但你以為xgboost就這樣了嗎,那你就太年輕了,繼續(xù)來看。

樹復(fù)雜度表達式展開

怎么還有個Ω沒給我解釋呢,別急啊,來了,這個Ω是表示樹的復(fù)雜度的,你想啊樹的復(fù)雜度能怎么表示,首先你得考慮葉子節(jié)點個數(shù)吧,然后xgboost人家考慮的更多一些,還把葉子節(jié)點的得分給考慮進去了,并且為了防止葉子節(jié)點太多影響你計算,給你加了個L2正則化,啥不懂L2正則化,自己去百度吧。同時為了平衡這兩個指標(biāo),人家還給加了兩個權(quán)重,是不是很貼心。

樹的復(fù)雜度的表示方法

等一下啊,道理我都明白,但是你能不能告訴我葉子節(jié)點得分是怎么算的。這個吧,其實對于單顆決策樹是很好理解的,如果是分類問題那么這個數(shù)就是0-1之間的一個數(shù),代表的是樣本分到這個節(jié)點上的得分值,如果是回歸問題,那么這個值就是樣本的平均值。但是對于xgboost,我們都把決策樹的目標(biāo)給改了,這個東西你不得算出來啊,計算方法在后邊說,就是一個最優(yōu)目標(biāo)函數(shù)對應(yīng)一個最優(yōu)得分值。

目標(biāo)函數(shù)的整合,目標(biāo)函數(shù)的兩個部分都知道咋回事了吧,把它放到一起吧,這樣的話我們才能看怎么去優(yōu)化,合并以后的公式是這樣子的:

整合以后的目標(biāo)函數(shù)形式

這個w好像能合并到一起啊,合到一起試試。

進一步整合目標(biāo)函數(shù)

看上去頭暈眼花的,什么東西啊,能不能再簡單點,當(dāng)然能。先這樣:

然后再這樣:

目標(biāo)函數(shù)的最終形式

目標(biāo)函數(shù)的優(yōu)化,都到這一步了可以優(yōu)化了吧,這里邊變量就剩葉子節(jié)點的得分了,我們來求導(dǎo),得到下面這個東西:

目標(biāo)函數(shù)的優(yōu)化

等一下啊,這個w不就是前面說的葉子節(jié)點得分值,原來是這么算的,求這個其實就是為了求目標(biāo)函數(shù)值。好了有了目標(biāo)函數(shù)值,接下來干嘛。回頭想想我們的目標(biāo),我們現(xiàn)在知道要擬合的殘差,我們有特征,接下來我們要找一顆最優(yōu)的樹進行樣本劃分啊,咋找,決策樹找最優(yōu)劃分點不是算增益最大嗎,那么我們拿著這個目標(biāo)函數(shù)去找最大的增益不就是現(xiàn)在這棵樹的目標(biāo)了嗎。好了怎么算呢,看下面式子:

樹結(jié)構(gòu)劃分標(biāo)準(zhǔn)

其實劃分算法太多了,有很多是為了提高效率的,這個就交給包內(nèi)部去解決吧,我們知道他是要劃分樹了就好了。

如此循環(huán)往復(fù),一個xgboost過程就完成了,其實大概就是拿到值先找到一顆差不多的樹,一看不行啊還有誤差啊,拿著這個誤差再去找一棵樹繼續(xù)擬合,等到擬合的差不多了,這些個樹就集成到一起進行劃分。那么xgboost是怎么預(yù)測的,其實一句話就可以理解,就是每棵樹葉子節(jié)點得分的加和,想想你的指標(biāo)在每棵樹上都有滿足條件的劃分,如果劃分到那一類就把葉子節(jié)點的得分加起來。其實xgboost還有縮減和列取樣的問題,意思是防止過擬合,就是說每一步葉子節(jié)點的權(quán)重都要乘上一個系數(shù),這樣的話使每棵樹葉子節(jié)點權(quán)重對結(jié)果影響不會太大,剩下更多的空間交給模型去擬合,還有一個列取樣其實是為了計算簡便,每次計算時從特征空間中選出幾個來構(gòu)建樹。

2.python導(dǎo)入相關(guān)包

python簡直太友好了,可以直接調(diào)用xgboost包跑程序,我們要做的就是提取指標(biāo)和調(diào)參,提取指標(biāo)這個事我教不了你,得根據(jù)業(yè)務(wù)來,調(diào)參倒是有套路可尋。首先你要實現(xiàn)一個xgboost,你要知道你用什么工具去實現(xiàn),python里有兩個包,一個就叫xgboost,另外一個是xgboost的sklearn接口,叫XGBClassifer。另外要調(diào)參還有一個并行的網(wǎng)格搜索包,sklearn里的GridSearchCV。其他還有一些包需要引入就是打打輔助。

import pandas as pd

import numpy as np

import xgboost as xgb

from xgboost.sklearn import XGBClassifier

from sklearn import cross_validation, metrics #交叉驗證和效果評估,其他模型也很常用。

from sklearn.grid_search import GridSearchCV #并行搜索,加快速度。

3.xgboost調(diào)參

準(zhǔn)備工作已經(jīng)做好了,接下來開始調(diào)參工作了,調(diào)參之前大家記得要做兩件件事,就是先把數(shù)據(jù)整理好,把模型搭建好。

3.1 搭建模型

簡單的很,已經(jīng)引入了XGBClassifier,直接把相關(guān)默認參數(shù)設(shè)置好就可以了。

clf1 = XGBClassifier(learning_rate =0.1,

n_estimators=1000,

max_depth=5,

min_child_weight=1,

gamma=0,

subsample=0.8,

colsample_bytree=0.8,

objective= 'binary:logistic',

nthread=4,

scale_pos_weight=1,

seed=27)

3.2 參數(shù)解釋

我們看到在建立xgboost的模型時,有很多參數(shù),這些參數(shù)是什么意思呢,我們來看一下。

一般參數(shù)

這些參數(shù)用來控制XGBoost的整體功能,是一些通用的設(shè)置,有的時候都不用調(diào)整。

(1)booster[默認gbtree]

每次迭代的模型選擇,有兩個gbtree:基于樹的模型和gbliner:線性模型,顯然我們一般都會選擇gbtree。

(2)silent[默認0]

是否開啟靜默模式,0為不開啟,1為開啟,開啟后不輸出任何信息,顯然這不利于我們調(diào)參,默認選0就好了。

(3)nthread[默認取最大線程數(shù)]

這個參數(shù)用來控制最大并行的線程數(shù),如果你希望取得所有CPU的核,那么你就不用管它。

booster參數(shù)或者說樹的參數(shù)

這些參數(shù)是要重點調(diào)整的,比較重要,主要是用來控制每一步樹的生成。

(1)eta [default=0.3]

學(xué)習(xí)率參數(shù),就是原理中說的縮減,保證每一顆樹對于結(jié)果的影響不太大,從而保證模型的效果。更新葉子節(jié)點權(quán)重時,乘以該系數(shù),避免步長過大。參數(shù)值越大,越可能無法收斂。把學(xué)習(xí)率 eta 設(shè)置的小一些,小學(xué)習(xí)率可以使得后面的學(xué)習(xí)更加仔細。 典型值為0.01-0.2。

(2)min_child_weight [default=1]

大家對他的解釋是決定最小葉子節(jié)點樣本權(quán)重和,不太好理解。看了一些解釋的文章,這個值可以理解為H值,還記得H值嗎,就是損失函數(shù)對y(t-1)的二階導(dǎo)數(shù)和,那么如果損失函數(shù)是平方函數(shù)(回歸問題),這個就是1,如果是對數(shù)損失函數(shù)(分類問題),導(dǎo)數(shù)是a(1-a)的形式,a代表sigmoid函數(shù),這樣的話當(dāng)y預(yù)測值非常大的時候,這個式子的值接近于0,這當(dāng)然是不好的,因此你要給他設(shè)定一個閾值,小于這個閾值就不分裂了。現(xiàn)在可以解釋了,這個值代表所有樣本二階導(dǎo)數(shù)的和,和上邊說的葉子得分不是一個事,如果是回歸問題實際代表樣本個數(shù),如果是分類問題實際代表a(1-a)所有樣本計算值的加和。

明白這個參數(shù)是啥以后,來看他是干嘛的,這個參數(shù)用于避免過擬合,當(dāng)它的值較大時,可以避免模型學(xué)習(xí)到局部的特殊樣本。舉個栗子來說,對正負樣本不均衡時的 0-1 分類而言,假設(shè) h 在 0.01 附近,min_child_weight 為 1 意味著葉子節(jié)點中最少需要包含 100 個樣本,實際是通過控制樣本數(shù)來控制過擬合的。你們應(yīng)該看出來這個值越小越容易過擬合,需要通過cv進行調(diào)整優(yōu)化。

(3)max_depth [default=6]

這個沒啥好說的,每棵樹的最大深度,也是用來避免過擬合的,max_depth越大,模型會學(xué)到更具體更局部的樣本,典型值3-10,要用cv調(diào)優(yōu)。

(4)max_leaf_nodes

樹上最大節(jié)點的數(shù)量,和上面的那個參數(shù)一樣,如果定義了這個參數(shù)就會忽略掉max_depth參數(shù),我們調(diào)優(yōu)還是以max_depth為主吧。

(5)gamma[default=0]

一聽這種希臘字母就知道是個系數(shù),在樹的葉子節(jié)點上作進一步分區(qū)所需的最小損失減少。越大,算法越保守。取值在[0,∞] 。通俗點講就是,這個節(jié)點還劃不劃分,先看看損失減不減少了再說。同樣需要cv調(diào)優(yōu)。

(6)max_delta_step [default=0]

這參數(shù)限制每棵樹權(quán)重改變的最大步長。如果這個參數(shù)的值為0,那就意味著沒有約束。如果它被賦予了某個正值,那么它會讓這個算法更加保守。通常,這個參數(shù)不需要設(shè)置。但是當(dāng)各類別的樣本十分不平衡時,它對邏輯回歸是很有幫助的。也就是說這個參數(shù)不用管啊。

(7)subsample [default=1]

樣本采樣用的,減小這個參數(shù)的值,算法會更加保守,避免過擬合,但是如果這個值設(shè)置得過小,它可能會導(dǎo)致欠擬合。典型值:0.5-1。既然有個范圍,給他個面子cv調(diào)優(yōu)一把吧。

(8)colsample_bytree [default=1]

列采樣,就是選擇生成樹的特征,前面介紹過了,和設(shè)置縮減率一樣是為了干嘛來著,是為了防止過擬合的,一般設(shè)置為: 0.5-1 ,也要用cv擬合。

(9)colsample_bylevel[default=1]

等一下哈,這個怎么和上面參數(shù)這么像,哦,它是在上面樹的基礎(chǔ)上,對每一級進行分裂時對列(就是特征)進行采樣,大神們都說這個參數(shù)不用用了,用上面那個就行了。

(10)lambda [default=1]

又是個系數(shù),這個是控制L2正則的,就是目標(biāo)函數(shù)里的那個葉子節(jié)點得分前邊的系數(shù),用不用看你自己了。

(11)alpha [default=0]

想必你也想到了吧,有L2就有L1,用不用全憑自己了。

(12) scale_pos_weight [default=1]

這個是控制樣本均衡與否的,如果是不均衡樣本,設(shè)置一個正數(shù)可以保證快速收斂,具體為什么,也沒人解釋,先留著吧。

(13)tree_method[default=’auto’]

還記得我說過樹的生成有很多方法吧,他們介紹的老復(fù)雜了,別看了,人家自動給我們打包好了,有三個可選的值, {‘a(chǎn)uto’, ‘exact’, ‘a(chǎn)pprox’} ,分別對應(yīng) 貪心算法(小數(shù)據(jù)集)/近似算法(大數(shù)據(jù)集) 。

大概就這么多吧,如果看到了別的,我再補充。

學(xué)習(xí)目標(biāo)參數(shù)

這個是最后一類參數(shù)了,跟目標(biāo)函數(shù)有關(guān)。

(1)objective [ default=reg:linear ]

這是返回目標(biāo)函數(shù)值,這個東西包含的函數(shù)還挺多,默認是線形的。此外你還可以選擇:binary:logistic 二分類的邏輯回歸,返回預(yù)測的概率(不是類別)。multi:softmax 使用softmax的多分類器,返回預(yù)測的類別(不是概率)。在這種情況下,你還需要多設(shè)一個參數(shù):num_class(類別數(shù)目)。multi:softprob 和multi:softmax參數(shù)一樣,但是返回的是每個數(shù)據(jù)屬于各個類別的概率。

(2)eval_metric[默認值取決于objective參數(shù)的取值]

也就是說怎么計算目標(biāo)函數(shù)值,根據(jù)你目標(biāo)函數(shù)的形式來,對于回歸問題,默認值是rmse,對于分類問題,默認值是error。比較典型的有(我直接截圖了懶得打字):

損失函數(shù)計算方法

你應(yīng)該知道吧目標(biāo)函數(shù)值和實際值之間的差距,就是這個參數(shù)要計算的重點。

(3)seed(default=0)

這個叫隨機數(shù)種子,還記得random包里那個seed嗎,這個參數(shù)就是為了可以使結(jié)果復(fù)現(xiàn)。

命令行參數(shù)

n_estimators 這個參數(shù)叫迭代次數(shù),也就是說生成樹的個數(shù)。

更多參數(shù)

更多參數(shù)請移步官方文檔:xgboost官方文檔

知道了這些參數(shù),想要弄明白調(diào)參是干啥,調(diào)整什么就很容易了,下面會結(jié)合例子來說明。

3.3 調(diào)參方法

先來推薦一個大哥的博客,這個鏈接里https://blog.csdn.net/u014465639/article/details/74351982寫了好幾種模型的調(diào)參方法,想要了解的不妨去看看。

開始之前,給大家介紹一個新朋友,這個東西可以很好的幫助我們進行調(diào)參,它是sklearn里的一個包,[sklearn.model_selection.GridSearchCV],我們調(diào)參就是基于這個包的。那么這個包怎么實現(xiàn)調(diào)參呢,來看一眼它的常用參數(shù)。

(1)estimator:優(yōu)化器,也就是你建立的模型,這里自然就是xgboost模型,如果要對其他集成算法調(diào)優(yōu),那就寫其他模型了,注意模型需要初始化哦。

(2)param_grid:字典或者列表,一般用字典,請在這里輸入你要優(yōu)化的參數(shù)值。

(3)scoring :用啥子估計誤差,如果不設(shè)置,那我沒辦法了,就用estimator的誤差來衡量吧。

有了上面的方法,我們還會怕調(diào)參數(shù)嗎,當(dāng)然不會了,先設(shè)置好常用的參數(shù),然后再依次調(diào)參。請注意,調(diào)參是有順序的,按照下面這個來。

1.n_estimators

叫迭代次數(shù),也就是生成樹的個數(shù)。

cv_params = {'n_estimators': [400, 500, 600, 700, 800]}

other_params = {'learning_rate': 0.1, 'n_estimators': 500, 'max_depth': 5, 'min_child_weight': 1, 'seed': 0,

'subsample': 0.8, 'colsample_bytree': 0.8, 'gamma': 0, 'reg_alpha': 0, 'reg_lambda': 1}

咦,這里邊有n_estimators的值了,其實就是以他為基準(zhǔn)進行挑選啊,首先給個基礎(chǔ)值進去,給誰啊,當(dāng)然是建立的初始模型了。

model = xgb.XGBRegressor(**other_params)

然后跑一下模型,這個我最后統(tǒng)一說,反正最后給出一個最優(yōu)值,但是我們設(shè)置的粒度太粗了,不能直接用,接下來細調(diào),同樣方法跑一遍。

cv_params = {'n_estimators': [550, 575, 600, 650, 675]}

2.min_child_weight和max_depth

這兩個參數(shù)是控制樹生成的,樹的結(jié)構(gòu)對于最終的結(jié)果影響還是很大的,所以這個放到第二個調(diào)整批次是應(yīng)當(dāng)?shù)?#xff0c;兩個參數(shù)可以一起調(diào)。

cv_params = {'max_depth': [3, 4, 5, 6, 7, 8, 9, 10], 'min_child_weight': [1, 2, 3, 4, 5, 6]}

other_params = {'learning_rate': 0.1, 'n_estimators': 550, 'max_depth': 5, 'min_child_weight': 1,

'seed': 0,'subsample': 0.8, 'colsample_bytree': 0.8, 'gamma': 0, 'reg_alpha': 0, 'reg_lambda': 1}

3.gamma

控制節(jié)點分裂標(biāo)準(zhǔn)的。

cv_params = {'gamma': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]}

4.subsample和colsample_bytree

采樣的放一起,都是比例。

cv_params = {'subsample': [0.6, 0.7, 0.8, 0.9], 'colsample_bytree': [0.6, 0.7, 0.8, 0.9]}

reg_alpha和reg_lambda

正則化的指標(biāo),這里有一點需要注意你看這個寫法和上面原理好像不一樣啊,其實就是直接XGB包和XGB包的sklearn接口的區(qū)別,一般都調(diào)用sklearn接口,所以就寫成符合sklearn習(xí)慣的樣子了。

cv_params = {'reg_alpha': [0.05, 0.1, 1, 2, 3], 'reg_lambda': [0.05, 0.1, 1, 2, 3]}

6.learning_rate

學(xué)習(xí)率,每一葉子節(jié)點得分需要乘上這個數(shù),一般比較小,從小的數(shù)字調(diào)起。

cv_params = {'learning_rate': [0.01, 0.05, 0.07, 0.1, 0.2]}

基本調(diào)參就告一段落了,這里需要特別指出一點就是調(diào)參可以提高模型性能,但是更重要的還是特征選擇,數(shù)據(jù)清洗,特征融合等工作,大家注意把基礎(chǔ)工作做好。

4.完整代碼

基礎(chǔ)數(shù)據(jù)啥的我就不列了啊,大概說一下概要吧,和網(wǎng)上的不一樣,我也是按照自己的想法做了一些省略。

#1.建立一個初步的模型,看一下效果怎么樣。

xgb1 = XGBClassifier(

learning_rate =0.1,

n_estimators=1000,

max_depth=5,

min_child_weight=1,

gamma=0,

subsample=0.8,

colsample_bytree=0.8,

objective= 'binary:logistic',

nthread=4,

scale_pos_weight=1,

seed=27)#經(jīng)驗值

xgb_param = xgb1.get_xgb_params()#得到模型的參數(shù)

xgtrain = xgb.DMatrix(dtrain[predictors].values, label=dtrain[target].values)#轉(zhuǎn)換成原生xgboost需要的數(shù)據(jù)格式。

cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], nfold=cv_folds,

metrics='auc', early_stopping_rounds=early_stopping_rounds, show_progress=False)#注意啊這是原生的模型自帶的,你只需傳參,cv_folds=5,表示5%的數(shù)據(jù)用于交叉驗證。這個cvresults返回訓(xùn)練集和測試集的誤差,行數(shù)就是最大迭代的次數(shù)。

xgb1.set_params(n_estimators=cvresult.shape[0])

xgb1.fit(dtrain[predictors], dtrain['Disbursed'],eval_metric='auc')

dtrain_predictions = alg.predict(dtrain[predictors])#算準(zhǔn)確率用的

dtrain_predprob = alg.predict_proba(dtrain[predictors])[:,1]#算auc用的

feat_imp = pd.Series(alg.booster().get_fscore()).sort_values(ascending=False)#算重要度的指標(biāo)

#‘weight’ - the number of times a feature is used to split the data across all trees.‘gain’ - the average gain of the feature when it is used in trees.‘cover’ - the average coverage of the feature when it is used in trees.

#weight - 該特征在所有樹中被用作分割樣本的特征的次數(shù)。gain - 在所有樹中的平均增益。cover - 在樹中使用該特征時的平均覆蓋范圍。

#

#2開始按步驟調(diào)參用的XGBclassifer。

#第一步調(diào)優(yōu)

params_test1 = {'n_estimators': [400, 500, 600, 700, 800]}

other_params = {'learning_rate': 0.1, 'n_estimators': 500, 'max_depth': 5, 'min_child_weight': 1, 'seed': 27,

'subsample': 0.8, 'colsample_bytree': 0.8, 'gamma': 0, 'reg_alpha': 0, 'reg_lambda': 1}

model = XGBClassfoer(**other_params)

optimized_XGB 1= GridSearchCV(estimator=model, param_grid=cv_params, scoring='r2', cv=5, verbose=1, n_jobs=4)

optimized_XGB.fit(X_train, y_train)

evalute_result = optimized_GBM.grid_scores_

##第二步調(diào)優(yōu)

param_test2 = { 'max_depth':range(3,10,2), 'min_child_weight':range(1,6,2)}

optimized_XGB2= GridSearchCV(estimator = XGBClassifier( learning_rate =0.1, n_estimators=140, max_depth=5,

min_child_weight=1, gamma=0, subsample=0.8, colsample_bytree=0.8,

objective= 'binary:logistic', nthread=4, scale_pos_weight=1, seed=27), param_grid = param_test2, scoring='roc_auc',n_jobs=4,iid=False, cv=5)

optimized_XGB2.fit(train[predictors],train[target])

optimized_XGB2.grid_scores_, optimized_XGB2.best_params_, optimized_XGB2.best_score_

#依次類推,得到最后的最優(yōu)參數(shù)集合,再建立模型用于預(yù)測

#3.最終模型

model = XGBClassifer(learning_rate=0.1, n_estimators=550, max_depth=4, min_child_weight=5, seed=27,

subsample=0.7, colsample_bytree=0.7, gamma=0.1, reg_alpha=1, reg_lambda=1)

model.fit(X_train, y_train)

ans = model.predict(X_test)

??以上就是本篇的所有內(nèi)容,很多東西就是講思路,讓大家都知道怎么回事,準(zhǔn)確性可能差點,如果你想有更深的理解,還是結(jié)合其他人的文章看看。

總結(jié)

以上是生活随笔為你收集整理的python调参工作都是干啥的_xgboost原理及调参方法-通俗易懂版本的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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