server2012 wordpress想找搜索引擎優(yōu)化
一、XGBoost的用法
流程:
代碼案例:
二、XGBoost的幾大參數(shù)
1、一般參數(shù),用于集成算法本身
①n_estimators
集成算法通過在數(shù)據(jù)上構(gòu)建多個(gè)弱 評(píng)估器,匯總所有弱評(píng)估器的建模結(jié)果,以獲取比單個(gè)模型更好的回歸或分類表現(xiàn)。sklearn中n_estimators表示弱評(píng)估器的個(gè)數(shù),在xgboost中用num_boost_round表示,是xgboost.train()中對(duì)應(yīng)第3個(gè)參數(shù)。這個(gè)參數(shù)非常強(qiáng)大,常常能夠一次性將模型調(diào)整到極限, 在XGBoost中它也是如此。
②verbosity?
訓(xùn)練中是否打印每次訓(xùn)練的結(jié)果
verbosity , default = 0, 取值范圍[0,3] 0 (silent), 1 (warning), 2 (info), 3 (debug).
#設(shè)置 verbosity = 3,會(huì)打印詳細(xì)的訓(xùn)練過程
③subsample
隨機(jī)抽樣的時(shí)候抽取的樣本比例,范圍(0,1],默認(rèn)是1
采樣會(huì)減少樣本數(shù)量,而從學(xué)習(xí)曲線 來看樣本數(shù)量越少模型的過擬合會(huì)越嚴(yán)重,因?yàn)閷?duì)模型來說,數(shù)據(jù)量越少模型學(xué)習(xí)越容易,學(xué)到的規(guī)則也會(huì)越具體越 不適用于測(cè)試樣本。所以subsample參數(shù)通常是在樣本量本身很大的時(shí)候來調(diào)整和使用。
④eta
集成中的學(xué)習(xí)率,又稱為步長 以控制迭代速率,常用于防止過擬合,默認(rèn)0.3,取值范圍[0,1]
eta是迭代決策樹時(shí)的步長(shrinkage),又叫做學(xué)習(xí)率(learning rate)。和邏輯回歸中的 類似, 越大,迭代的速度越快,算法的極限很快被達(dá)到,有可能無法收斂到真正的最佳。 越小,越有可能找到更精確的最佳值,更多的空間被留給了后面建立的樹,但迭代速度會(huì)比較緩慢。
2、弱評(píng)估器參數(shù)
①booster(XGBoost中為xgb_model )
使用哪種弱評(píng)估器??梢暂斎?strong>gbtree, gblinear或dart。輸入的評(píng)估器不同,使用 的params參數(shù)也不同,每種評(píng)估器都有自 己的params列表。評(píng)估器必須于param參 數(shù)相匹配,否則報(bào)錯(cuò)。
gbtree:即是論文中主要討論的樹模型,推薦使用
gblinear:是線性模型,表現(xiàn)很差,接近一個(gè)LASSO
dart:Dropouts meet Multiple Additive Regression Trees,可譯為拋棄提升樹,在建樹的過 程中會(huì)拋棄一部分樹,比梯度提升樹有更好的防過擬合功能。
②objective(重要)
(1)集成算法中的損失函數(shù)是可選的,要選用什么損失函數(shù)取決于我們希望解決什么問題,以及希望使用怎樣的模型。比如說,如果我們的目標(biāo)是進(jìn)行回歸預(yù)測(cè),那我們可以選擇調(diào)節(jié)后的均方誤差RMSE作為我們的損失函數(shù)。如果我們是進(jìn)行分類預(yù)測(cè),那我們可 以選擇錯(cuò)誤率error或者對(duì)數(shù)損失log_loss。
(2)XGBoost的目標(biāo)函數(shù)(Obj)被寫作:傳統(tǒng)損失函數(shù) + 模型復(fù)雜度。
使用參數(shù)“objective"來確定我們目標(biāo)函數(shù)的第一部分中的 ,也就是衡量損失的部分。
(3)常見的損失函數(shù)(***)
xgb.train():objective: 默認(rèn)reg:squarederror(XGBoost)
xgb.XGBRegressor() :objective: 默認(rèn)reg:squarederror(Sklearn庫)
xgb.XGBClassifier() : objective: 默認(rèn)binary:logistic(Sklearn庫)
輸入 | 選用的損失函數(shù) |
reg:linear | 使用線性回歸的損失函數(shù),均方誤差,回歸時(shí)使用 |
binary:logistic | 使用邏輯回歸的損失函數(shù),對(duì)數(shù)損失log_loss,二分類時(shí)使用,,輸出為概率 |
binary:hinge | 使用支持向量機(jī)的損失函數(shù),Hinge Loss,二分類時(shí)使用 |
multi:softmax | 使用softmax損失函數(shù),多分類時(shí)使用,同時(shí)需要設(shè)置參數(shù)num_class(類別個(gè) 數(shù)),返回預(yù)測(cè)的類別(不是概率) |
PS:
如果不指定具體使用哪種objective,函數(shù)會(huì)根據(jù)是回歸問題還是分類問題,默認(rèn)選擇相應(yīng)的損失函數(shù);
如果自行設(shè)定objective的類型,其類型需與業(yè)務(wù)的類型(回歸 or 分類)相對(duì)應(yīng),否則容易報(bào)錯(cuò)。
③參數(shù)化決策樹 :參數(shù)alpha,lambda
L1正則項(xiàng)的參數(shù) alpha,默認(rèn)0,取值范圍[0, +∞]
L2正則項(xiàng)的參數(shù) lambda,默認(rèn)1,取值范圍[0, +∞]
④重要參數(shù)gamma
復(fù)雜度的懲罰項(xiàng):gamma,默認(rèn)0,取值范圍[0, +∞]
實(shí)踐證明, gamma是對(duì)梯度提升樹影響最大 的參數(shù)之一,其效果絲毫不遜色于n_estimators和防止過擬合的神器max_depth。同時(shí), 還是我們讓樹停止生長的重要參數(shù)。
⑤剪枝的參數(shù)(減輕過擬合帶來的影響)
以下是幾個(gè)影響比較大,常用于剪枝的參數(shù)
ps:在XGBoost中,最大深度的功能與 參數(shù) 相似,因此如果先調(diào)節(jié)了 ,則最大深度可能無法展示出巨大的效果。當(dāng)然,如果先調(diào)整了最大深度,則 也有 可能無法顯示明顯的效果。
調(diào)參過程:通常當(dāng)我們獲得了一個(gè)數(shù)據(jù)集后,我們先使用網(wǎng)格搜索找出比較合適的n_estimators和eta組合,然后使用gamma或 者max_depth觀察模型處于什么樣的狀態(tài)(過擬合還是欠擬合,處于方差-偏差圖像的左邊還是右邊?),最后再?zèng)Q 定是否要進(jìn)行剪枝。
3、其他參數(shù)
①xgboost中回歸模型的默認(rèn)模型評(píng)估指標(biāo)參數(shù):eval_metric
該參數(shù)的使用是為了我們方便使用xgboost.cv(交叉驗(yàn)證)
指標(biāo) | 含義 |
rmse | 回歸用,調(diào)整后的均方誤差 |
mae | 回歸用,絕對(duì)平均誤差 |
logloss | 二分類用,對(duì)數(shù)損失 |
mlogloss | 多分類用,對(duì)數(shù)損失 |
error | 分類用,分類誤差,等于1-準(zhǔn)確率 |
auc | 分類用,AUC面積 |
? | ? |
②調(diào)節(jié)樣本不平衡的參數(shù)scale_pos_weight
控制正負(fù)樣本比例,表示為負(fù)/正樣本比例 在樣本不平衡問題中使用:scale_pos_weight,默認(rèn)1
③更多計(jì)算資源:n_jobs
nthread和n_jobs都是算法運(yùn)行所使用的線程,與sklearn中規(guī)則一樣,輸入整數(shù)表示使用的線程,輸入-1表示使用計(jì) 算機(jī)全部的計(jì)算資源。如果我們的數(shù)據(jù)量很大,則我們可能需要這個(gè)參數(shù)來為我們調(diào)用更多線程。
④降低學(xué)習(xí)難度:base_score
base_score是一個(gè)比較容易被混淆的參數(shù),它被叫做全局偏差,在分類問題中,它是我們希望關(guān)注的分類的先驗(yàn)概 率。通常我們不會(huì)使用這個(gè)參數(shù),但對(duì)于嚴(yán)重的樣本不均衡問 題,設(shè)置一個(gè)正確的base_score取值是很有必要的。
⑤生成樹的隨機(jī)模式:random_state
對(duì)于那些本質(zhì)上是隨機(jī)的過程,我們有必要控制隨機(jī)的狀態(tài),這樣才能重復(fù)的展現(xiàn)相同的結(jié)果的時(shí)候就需要設(shè)置我們的random_state為一個(gè)固定值。
⑥自動(dòng)處理缺失值:missing
XGBoost被設(shè)計(jì)成是能夠自動(dòng)處理缺失值的模型,這個(gè)設(shè)計(jì)的初衷其實(shí)是為了讓XGBoost能夠處理稀疏矩陣。
三、總結(jié)
? 這里只是簡單介紹了?XGBoost的簡單用法和一些參數(shù)的含義,方便大家入門學(xué)習(xí),而XGBoost本身的運(yùn)用與實(shí)踐是很廣泛的,后期我也會(huì)出一些XGBoost實(shí)戰(zhàn)的案例,分享給大家!最后,如果這篇文章對(duì)小伙伴有所幫助,別忘了點(diǎn)贊、關(guān)注支持一波哦~大家一起進(jìn)步!!!
?