一、XGBoost參數
xgboost參數可以分為三種類型:通用參數、booster參數以及學習目標參數
- General parameters:參數控制在提升(boosting)過程中使用哪種booster,常用的booster有樹模型(tree)和線性模型(linear model)。
- Booster parameters:這取決於使用哪種booster。
- Learning Task parameters:控制學習的場景,例如在回歸問題中會使用不同的參數控制排序。
- 命令行參數:與XGBoost的CLI版本的行為有關
官網文檔地址:https://xgboost.readthedocs.io/en/latest/parameter.html
下面詳細介紹每種類型的參數
二、General Parameters通用參數
(1)booster [default=gbtree] :
可以gbtree
,gblinear
或者dart
; gbtree
並dart
使用基於樹的模型,同時gblinear
使用線性函數
(2)silent [default=0] :
取0時表示打印出運行時信息,取1時表示以緘默方式運行,不打印運行時的信息。缺省值為0
建議取0,過程中的輸出數據有助於理解模型以及調參。另外實際上我設置其為1也通常無法緘默運行。。
(3)nthread [如果未設置,默認為最大可用線程數] :
XGBoost運行時的線程數。缺省值是當前系統可以獲得的最大線程數
如果你希望以最大速度運行,建議不設置這個參數,模型將自動獲得最大線程,使用線程數,一般我們設置成-1
,使用所有線程。如果有需要,我們設置成多少就是用多少線程
(4)num_pbuffer [由XGBoost自動設置,無需由用戶設置]:
預測緩沖區的大小,通常設置為訓練實例數。緩沖區用於保存最后提升步驟的預測結果
(5)num_feature [由XGBoost自動設置,無需由用戶設置] :
boosting過程中用到的特征維數,設置為特征個數。XGBoost會自動設置,不需要手工設置
三、Booster Parameters
Parameter for Tree Booster
(1)eta
[默認= 0.3,別名:learning_rate
]
-
在更新中使用步長收縮以防止過度擬合。在每個增強步驟之后,我們都可以直接獲得新特征的權重,並
eta
縮小特征權重以使增強過程更加保守。 -
范圍:[0,1],通常最后設置eta為0.01~0.2
(2)gamma
[默認= 0,別名:min_split_loss
]
-
在樹的葉子節點上進行進一步分區所需的最小損失減少。越大
gamma
,算法將越保守。 - 模型在默認情況下,對於一個節點的划分只有在其loss function 得到結果大於0的情況下才進行,而gamma 給定了所需的最低loss function的值,在模型中應該進行調參。
-
范圍:[0,∞]
(3)max_depth [default=6]
- 樹的最大深度。
缺省值為6
- 取值范圍為:[1,∞]
- 指樹的最大深度
- 樹的深度越大,則對數據的擬合程度越高(過擬合程度也越高)。即該參數也是控制過擬合
- 建議通過交叉驗證(xgb.cv ) 進行調參
- 通常取值:3-10
(4)min_child_weight
[默認值= 1]
- 子節點中最小的樣本權重和。如果一個葉子節點的樣本權重和小於min_child_weight則拆分過程結束。在線性回歸模型中,這個參數是指建立每個模型所需要的最小樣本數。該成熟越大算法越conservative。即調大這個參數能夠控制過擬合。
- 取值范圍為: [0,∞]
(5)max_delta_step
[默認= 0]
-
我們允許每個葉子輸出的最大增量步長。如果將該值設置為0,則表示沒有約束。如果將其設置為正值,則可以幫助使更新步驟更加保守。通常不需要設置這個值,但在使用logistics 回歸時,若類別極度不平衡,則調整該參數[1,10]可能有效果
-
范圍:[0,∞]
(6)subsample
[默認值= 1]
- 用於訓練模型的子樣本占整個樣本集合的比例。如果設置為0.5則意味着XGBoost將隨機的從整個樣本集合中抽取出50%的子樣本建立樹模型,這能夠防止過擬合。
- 取值范圍為:(0,1]
(7)sampling_method
[默認= uniform
]
-
用於對訓練實例進行采樣的方法。
-
uniform
:每個訓練實例被選擇的可能性相同。通常將subsample
> = 0.5 設置 為良好的效果。 -
gradient_based
:每個訓練實例的選擇概率與規則化的梯度絕對值成正比 (更具體地說,)。
subsample
可以設置為低至0.1,而不會損失模型精度。請注意,只有tree_method
將設置為時,才支持此采樣方法gpu_hist
。其他樹方法僅支持uniform
采樣
(8)colsample_bytree
,colsample_bylevel
,colsample_bynode
[默認= 1]
-
這是用於抽取列(特征)的一組參數。
-
所有
colsample_by*
參數的范圍為(0,1],默認值為1,並指定要進行二次采樣的列的分數。 -
colsample_bytree:在建立樹時對特征隨機采樣的比例
。 -
colsample_bylevel
決定每次節點划分時子樣例的比例,通常不使用,因為subsample和colsample_bytree已經可以起到相同的作用了 -
colsample_bynode
是每個節點(拆分)的列的子樣本比率。每次評估新的分割時,都會進行一次二次采樣。列是從為當前級別選擇的一組列中進行子采樣的。 -
colsample_by*
參數累積工作。例如,具有64個功能的組合將在每個拆分中保留8個功能供您選擇。{'colsample_bytree':0.5, 'colsample_bylevel':0.5, 'colsample_bynode':0.5}
在Python界面上,可以設置
feature_weights
for DMatrix來定義使用列采樣時每個功能被選中的概率。fit
sklearn界面中的方法有一個類似的參數
(9)lambda
[默認= 1,別名:reg_lambda
]
- L2正則化權重項(線性回歸)。增加此值將使模型更加保守。
(10)alpha
[默認= 0,別名:reg_alpha
]
-
L1正則化權重項(邏輯回歸)。增加此值將使模型更加保守。
(11)tree_method
字符串[default = auto
] 也就是算法原理提到的貪心算法之類的
-
XGBoost中使用的樹構建算法。請參閱參考文件中的描述。
-
XGBoost支持
approx
,hist
並gpu_hist
用於分布式培訓。外部存儲器實驗支持可用於approx
和gpu_hist
。 -
選擇:
auto
,exact
,approx
,hist
,gpu_hist
,這是常用的更新程序的組合。對於其他更新程序,例如refresh
,updater
直接設置參數。 -
auto
:使用啟發式選擇最快的方法。-
對於小型數據集,
exact
將使用精確貪婪()。 -
對於較大的數據集,
approx
將選擇近似算法()。它建議嘗試hist
,並gpu_hist
用大量的數據可能更高的性能。(gpu_hist
)支持。external memory
-
由於舊行為總是在單個計算機上使用完全貪婪,因此,當選擇近似算法來通知該選擇時,用戶將收到一條消息。
-
-
exact
:精確的貪婪算法。枚舉所有拆分的候選人。 -
approx
:使用分位數草圖和梯度直方圖的近似貪婪算法。 -
hist
:更快的直方圖優化的近似貪婪算法。 -
gpu_hist
:GPUhist
算法的實現。
(12)sketch_eps
[默認值= 0.03]
-
僅用於
tree_method=approx
。 -
這大致轉化為箱數。與直接選擇垃圾箱數量相比,這具有草圖准確性的理論保證。
O(1 / sketch_eps)
-
通常,用戶不必對此進行調整。但是,請考慮設置較低的數字,以更精確地枚舉拆分后的候選人。
-
范圍:(0,1)
(13)scale_pos_weight
[默認值= 1]
-
控制正負權重的平衡,這對於不平衡的類別很有用。需要考慮的典型值:。有關更多討論,請參見參數調整。另外,請參見Higgs Kaggle競賽演示,例如:R,py1,py2,py3。
sum(negative instances) / sum(positive instances)
(14)updater
[默認= grow_colmaker,prune
]
-
逗號分隔的字符串,定義要運行的樹更新程序的序列,提供了構建和修改樹的模塊化方法。這是一個高級參數,通常會根據其他一些參數自動設置。但是,它也可以由用戶顯式設置。存在以下更新程序:
-
grow_colmaker
:基於樹的非分布式列結構。 -
grow_histmaker
:基於直方圖計數的全局建議,基於行的數據拆分的分布式樹結構。 -
grow_local_histmaker
:基於本地直方圖計數。 -
grow_quantile_histmaker
:使用量化直方圖生長樹。 -
grow_gpu_hist
:使用GPU種植樹。 -
sync
:同步所有分布式節點中的樹。 -
refresh
:根據當前數據刷新樹的統計信息和/或葉子值。注意,不對數據行進行隨機子采樣。 -
prune
:修剪損失<min_split_loss(或伽瑪)的分割。
-
-
在分布式設置中,
grow_histmaker,prune
默認情況下會將隱式更新程序序列值調整為,您可以將其設置tree_method
為hist
使用grow_histmaker
學習任務參數
指定學習任務和相應的學習目標。目標選項如下:
-
objective
[默認= reg:squarederror]-
reg:squarederror
:損失平方回歸。 -
reg:squaredlogerror
:對數損失平方回歸 12[log(pred+1)−log(label+1)]212[log(pred+1)−log(label+1)]2。所有輸入標簽都必須大於-1。另外,請參閱指標rmsle
以了解此目標可能存在的問題。 -
reg:logistic
:邏輯回歸 -
reg:pseudohubererror
:使用偽Huber損失進行回歸,這是絕對損失的兩倍可微選擇。 -
binary:logistic
:二元分類的邏輯回歸,輸出概率 -
binary:logitraw
:用於二進制分類的邏輯回歸,邏輯轉換之前的輸出得分 -
binary:hinge
:二進制分類的鉸鏈損失。這使預測為0或1,而不是產生概率。 -
count:poisson
–計數數據的泊松回歸,泊松分布的輸出平均值-
max_delta_step
在泊松回歸中默認設置為0.7(用於維護優化)
-
-
survival:cox
:針對正確的生存時間數據進行Cox回歸(負值被視為正確的生存時間)。請注意,預測是按危險比等級返回的(即,比例危險函數中的HR = exp(marginal_prediction))。h(t) = h0(t) * HR
-
survival:aft
:用於檢查生存時間數據的加速故障時間模型。有關詳細信息,請參見具有加速故障時間的生存分析。 -
aft_loss_distribution
:survival:aft
目標和aft-nloglik
度量使用的概率密度函數。 -
multi:softmax
:設置XGBoost以使用softmax目標進行多類分類,還需要設置num_class(類數) -
multi:softprob
:與softmax相同,但是輸出的向量,可以進一步調整為矩陣。結果包含屬於每個類別的每個數據點的預測概率。ndata * nclass
ndata * nclass
-
rank:pairwise
:使用LambdaMART進行成對排名,從而使成對損失最小化 -
rank:ndcg
:使用LambdaMART進行列表式排名,使標准化折讓累積收益(NDCG)最大化 -
rank:map
:使用LambdaMART進行列表平均排名,使平均平均精度(MAP)最大化 -
reg:gamma
:使用對數鏈接進行伽馬回歸。輸出是伽馬分布的平均值。例如,它對於建模保險索賠的嚴重性或對於可能是伽馬分布的任何結果可能是有用的。 -
reg:tweedie
:使用對數鏈接進行Tweedie回歸。它可能有用,例如,用於建模保險的總損失,或用於可能是Tweedie分布的任何結果。
-
-
base_score
[默認值= 0.5]-
所有實例的初始預測得分,全局偏差
-
對於足夠的迭代次數,更改此值不會有太大影響。
-
-
eval_metric
[根據目標默認]-
驗證數據的評估指標,將根據目標分配默認指標(回歸均方根,分類誤差,排名的平均平均精度)
-
用戶可以添加多個評估指標。Python用戶:記住將指標作為參數對的列表而不是映射進行傳遞,以使后者
eval_metric
不會覆蓋前一個 -
下面列出了這些選擇:
-
rmse
:均方根誤差 -
rmsle
:均方根對數誤差: 1N[log(pred+1)−log(label+1)]2−−−−−−−−−−−−−−−−−−−−−−−−−−−√1N[log(pred+1)−log(label+1)]2。reg:squaredlogerror
目標的默認指標。此指標可減少數據集中異常值所產生的錯誤。但是由於log
采用功能,rmsle
可能nan
在預測值小於-1時輸出。有關reg:squaredlogerror
其他要求,請參見。 -
mae
:平均絕對誤差 -
mphe
:平均偽Huber錯誤。reg:pseudohubererror
目標的默認指標。 -
logloss
:負對數似然 -
error
:二進制分類錯誤率。計算公式為。對於預測,評估會將預測值大於0.5的實例視為肯定實例,而將其他實例視為否定實例。#(wrong cases)/#(all cases)
-
error@t
:可以通過提供't'的數值來指定不同於0.5的二進制分類閾值。 -
merror
:多類分類錯誤率。計算公式為。#(wrong cases)/#(all cases)
-
mlogloss
:多類logloss。 -
auc
:曲線下面積 -
aucpr
:PR曲線下的面積 -
ndcg
:歸一化累計折扣 -
map
:平均平均精度 -
ndcg@n
,map@n
:'n'可以指定為整數,以切斷列表中的最高位置以進行評估。 -
ndcg-
,map-
,ndcg@n-
,map@n-
:在XGBoost,NDCG和MAP將評估清單的比分沒有任何陽性樣品為1加入-在評價指標XGBoost將評估這些得分為0,是在一定條件下一致“”。 -
poisson-nloglik
:泊松回歸的負對數似然 -
gamma-nloglik
:伽馬回歸的對數似然比為負 -
cox-nloglik
:Cox比例風險回歸的負對數似然率 -
gamma-deviance
:伽馬回歸的剩余偏差 -
tweedie-nloglik
:Tweedie回歸的負對數似然(在tweedie_variance_power
參數的指定值處) -
aft-nloglik
:加速故障時間模型的負對數可能性。有關詳細信息,請參見具有加速故障時間的生存分析。 -
interval-regression-accuracy
:其預測標簽位於間隔檢查的標簽中的數據點的分數。僅適用於間隔檢查的數據。有關詳細信息,請參見具有加速故障時間的生存分析。
-
-
-
seed
[默認= 0]-
隨機數種子。在R程序包中將忽略此參數,請改用set.seed()。
-
命令行參數
以下參數僅在控制台版本的XGBoost中使用
-
num_round
-
提升輪數
-
-
data
-
訓練數據的路徑
-
-
test:data
-
測試數據進行預測的路徑
-
-
save_period
[默認= 0]-
保存模型的時間段。設置
save_period=10
意味着XGBoost每10輪將保存一個模型。將其設置為0意味着在訓練期間不保存任何模型。
-
-
task
[默認=train
]選項:train
,pred
,eval
,dump
-
train
:使用數據進行訓練 -
pred
:預測測試:數據 -
eval
:用於評估指定的統計信息eval[name]=filename
-
dump
:用於將學習到的模型轉儲為文本格式
-
-
model_in
[默認值= NULL]-
路徑輸入模型,需要的
test
,eval
,dump
任務。如果在訓練中指定了XGBoost,它將從輸入模型繼續訓練。
-
-
model_out
[默認值= NULL]-
訓練完成后輸出模型的路徑。如果未指定,則XGBoost將輸出名稱為
0003.model
where0003
of boosting rounds的文件。
-
-
model_dir
[默認=models/
]-
訓練期間保存的模型的輸出目錄
-
-
fmap
-
特征圖,用於轉儲模型
-
-
dump_format
[default =text
]選項:text
,json
-
模型轉儲文件的格式
-
-
name_dump
[默認=dump.txt
]-
模型轉儲文件的名稱
-
-
name_pred
[默認=pred.txt
]-
預測文件的名稱,在pred模式下使用
-
-
pred_margin
[默認= 0]-
預測利潤率而不是轉換概率
-