目錄
- 常規參數
- Tree Booster的參數
- Linear Booster的參數(booster=gblinear)
- 學習任務參數
- 代碼主要函數
- 參數調整注意事項
在運行XGBoost之前,我們必須設置三種類型的參數:常規參數,增強器參數和任務參數。
常規參數與我們用來進行增強的助推器有關,通常是樹形模型或線性模型
增壓器參數取決於您選擇的增壓器
學習任務參數決定學習場景。例如,回歸任務可以對排名任務使用不同的參數。
命令行參數與XGBoost的CLI版本的行為有關。
基本和官網一致,只是部分翻譯了,便於以后快捷地搜索。
本文對較為重要的參數做底色標示
一、常規參數
booster[默認= gbtree]
使用哪個助推器。可以gbtree,gblinear或者dart; gbtree並dart使用基於樹的模型,同時gblinear使用線性函數。
verbosity [默認值= 1]
打印消息的詳細程度。有效值為0(靜默),1(警告),2(信息),3(調試)。有時,XGBoost會嘗試根據啟發式來更改配置,該顯示為警告消息。如果出現意外行為,請嘗試增加詳細程度。
validate_parameters [默認為false,Python,R和CLI界面除外]
設置為True時,XGBoost將執行輸入參數的驗證,以檢查是否使用了參數。該功能仍處於試驗階段。預期會有一些誤報。
nthread [如果未設置,默認為最大可用線程數]
用於運行XGBoost的並行線程數。選擇它時,請記住線程爭用和超線程。
disable_default_eval_metric [默認=``false'']
標記以禁用默認指標。設置為1或true禁用。
num_pbuffer [由XGBoost自動設置,無需由用戶設置]
預測緩沖區的大小,通常設置為訓練實例數。緩沖區用於保存上一個增強步驟的預測結果。
num_feature [由XGBoost自動設置,無需由用戶設置]
用於增強的特征尺寸,設置為特征的最大尺寸
二、Tree Booster的參數
eta[默認= 0.3,別名:learning_rate]
在更新中使用步長收縮以防止過度擬合。在每個增強步驟之后,我們都可以直接獲得新特征的權重,並eta縮小特征權重以使增強過程更加保守。
范圍:[0,1]
gamma[默認= 0,別名:min_split_loss]
在樹的葉節點上進行進一步分區所需的最小損失減少。越大gamma,算法將越保守。
范圍:[0,∞]
max_depth [默認= 6]
一棵樹的最大深度。增加此值將使模型更復雜,並且更可能過度擬合。僅lossguided當tree_method設置為hist且表示深度沒有限制時,才在增長策略中接受0 。注意,訓練一棵深樹時,XGBoost會大量消耗內存。
范圍:[0,∞](僅lossguided當tree_method設置為時,增長策略才接受0 hist)
min_child_weight [默認值= 1]
子級中實例重量的最小總和(hessian)。如果樹划分步驟導致葉節點的實例權重之和小於min_child_weight,則構建過程將放棄進一步的划分。在線性回歸任務中,這僅對應於每個節點中需要的最少實例數。越大min_child_weight,算法將越保守。
范圍:[0,∞]
max_delta_step [默認= 0]
我們允許每個葉子輸出的最大增量步長。如果將該值設置為0,則表示沒有約束。如果將其設置為正值,則可以幫助使更新步驟更加保守。通常不需要此參數,但是當類極度不平衡時,它可能有助於邏輯回歸。將其設置為1-10的值可能有助於控制更新。
范圍:[0,∞]
subsample [默認值= 1]
訓練實例的子樣本比率。將其設置為0.5意味着XGBoost將在樹木生長之前隨機采樣一半的訓練數據。這樣可以防止過度擬合。二次采樣將在每個增強迭代中進行一次。
范圍:(0,1]
sampling_method[默認= uniform]
用於對訓練實例進行采樣的方法。
uniform:每個訓練實例的選擇概率均等。通常將subsample> = 0.5設置 為良好的效果。
gradient_based:每個訓練實例的選擇概率與規則化的梯度絕對值成正比 (更具體地說,

subsample可以設置為低至0.1,而不會損失模型精度。請注意,只有tree_method將設置為時,才支持此采樣方法gpu_hist。其他樹方法僅支持uniform采樣。
colsample_bytree,colsample_bylevel,colsample_bynode[默認= 1]
這是用於列二次采樣的一組參數。
所有colsample_by*參數的范圍為(0,1],默認值為1,並指定要進行二次采樣的列的分數。
colsample_bytree是構造每棵樹時列的子樣本比率。對每一個構造的樹進行一次二次采樣。
colsample_bylevel是每個級別的列的子采樣率。對於樹中達到的每個新深度級別,二次采樣都會發生一次。從為當前樹選擇的一組列中對列進行子采樣。
colsample_bynode是每個節點(拆分)的列的子樣本比率。每次評估新的分割時,都會進行一次二次采樣。列是從為當前級別選擇的一組列中進行子采樣的。
colsample_by*參數累積工作。例如,具有64個功能的組合將在每個拆分中留下8個功能供您選擇。{'colsample_bytree':0.5, 'colsample_bylevel':0.5, 'colsample_bynode':0.5}
在Python界面上,可以設置feature_weightsfor DMatrix來定義使用列采樣時選擇每個功能的概率。fitsklearn界面中的方法有一個類似的參數。
lambda[默認= 1,別名:reg_lambda]
L2正則化權重項。增加此值將使模型更加保守。
alpha[默認= 0,別名:reg_alpha]
權重的L1正則化項。增加此值將使模型更加保守。
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算法的實現。
sketch_eps [默認值= 0.03]
僅用於tree_method=approx。
這大致轉化為箱數。與直接選擇垃圾箱數量相比,這具有草圖准確性的理論保證。O(1 / sketch_eps)
通常,用戶不必對此進行調整。但是,請考慮設置較低的數字,以更精確地枚舉拆分的候選人。
范圍:(0,1)
scale_pos_weight [默認值= 1]
控制正負權重的平衡,對於不平衡的班級很有用。需要考慮的典型值:。有關更多討論,請參見參數調整。另外,請參見Higgs Kaggle競賽演示,例如:R,py1,py2,py3。sum(negative instances) / sum(positive instances)
updater[默認= grow_colmaker,prune]
逗號分隔的字符串定義要運行的樹更新程序的順序,從而提供了一種構造和修改樹的模塊化方法。這是一個高級參數,通常會根據其他一些參數自動設置。但是,它也可以由用戶顯式設置。存在以下更新程序:
updater[默認= grow_colmaker,prune]
逗號分隔的字符串定義要運行的樹更新程序的順序,從而提供了一種構造和修改樹的模塊化方法。這是一個高級參數,通常會根據其他一些參數自動設置。但是,它也可以由用戶顯式設置。存在以下更新程序:
- grow_colmaker:基於樹的非分布式列結構。
- grow_histmaker:基於直方圖計數的全局提議,基於行的數據拆分的分布式樹結構。
- grow_local_histmaker:基於本地直方圖計數。
- grow_quantile_histmaker:使用量化直方圖來生長樹。
- grow_gpu_hist:使用GPU種植樹。
- sync:同步所有分布式節點中的樹。
- refresh:根據當前數據刷新樹的統計信息和/或葉值。注意,不對數據行進行隨機子采樣。
- prune:修剪損失<min_split_loss(或gamma)的分割。
在分布式設置中,grow_histmaker,prune默認情況下會將隱式更新程序序列值調整為,您可以將其設置tree_method為hist使用grow_histmaker。
refresh_leaf [默認值= 1]
這是refresh更新程序的參數。當此標志為1時,將更新樹葉和樹節點的統計信息。當它為0時,僅更新節點統計信息。
process_type[默認= default]
一種運行的加速過程。
選擇:default,update
- default:創建新樹的正常增強過程。
- update:從現有模型開始,僅更新其樹。在每次增強迭代中,都會從初始模型中提取一棵樹,為該樹運行指定的更新程序序列,然后將修改后的樹添加到新模型中。新模型將具有相同或更少數量的樹,具體取決於執行的增強迭代次數。當前,以下內置更新程序可與此進程類型有意義地使用:refresh,prune。使用時process_type=update,不能使用創建新樹的更新程序。
grow_policy[默認= depthwise]
控制將新節點添加到樹的方式。
當前僅在tree_method設置為時受支持hist。
選擇:depthwise,lossguide
- depthwise:在最靠近根的節點處拆分。
- lossguide:在損耗變化最大的節點處拆分。
max_leaves [默認= 0]
要添加的最大節點數。僅在grow_policy=lossguide設置時相關。
max_bin,[默認值= 256]
僅在tree_method設置為時使用hist。
用於存儲連續特征的最大不連續回收箱數。
增加此數目可提高拆分的最佳性,但需要更長的計算時間。
predictor,[default =`ʻʻauto``]
要使用的預測器算法的類型。提供相同的結果,但允許使用GPU或CPU。
- auto:基於啟發式配置預測變量。
- cpu_predictor:多核CPU預測算法。
- gpu_predictor:使用GPU進行預測。在tree_methodis時使用gpu_hist。當predictor設置為默認值時auto,gpu_histtree方法能夠提供基於GPU的預測,而無需將訓練數據復制到GPU內存中。如果gpu_predictor明確指定,則將所有數據復制到GPU中,僅建議用於執行預測任務。
num_parallel_tree,[default = 1]
-每次迭代期間構造的並行樹的數量。此選項用於支持增強型隨機森林。
monotone_constraints
可變單調性的約束。
interaction_constraints
交互約束表示允許的交互。約束必須以嵌套列表的形式指定,例如,其中每個內部列表是一組允許彼此交互的要素索引。有關更多信息,請參見教程[[0, 1], [2, 3, 4]]
三、Linear Booster的參數(booster=gblinear)
lambda[默認= 0,別名:reg_lambda]
L2正則化權重項。增加此值將使模型更加保守。歸一化為訓練示例數。
alpha[默認= 0,別名:reg_alpha]
權重的L1正則化項。增加此值將使模型更加保守。歸一化為訓練示例數。
updater[默認= shotgun]
選擇適合線性模型的算法
- shotgun:基於shot彈槍算法的平行坐標下降算法。使用" hogwild"並行性,因此每次運行都會產生不確定的解決方案。
- coord_descent:普通坐標下降算法。同樣是多線程的,但仍然可以產生確定性的解決方案。
feature_selector[默認= cyclic]
特征選擇和排序方法
- cyclic:通過一次循環瀏覽功能來進行確定性選擇。
- shuffle:類似於,cyclic但在每次更新之前隨機進行改組。
- random:隨機(帶替換)坐標選擇器。
- greedy:選擇梯度最大的坐標。它具有O(num_feature^2)復雜性。這是完全確定性的。top_k通過設置top_k參數,它允許將選擇限制為每組具有最大單變量權重變化的特征。這樣做將降低復雜度O(num_feature*top_k)。
- thrifty:節儉的近似貪婪的特征選擇器。在循環更新之前,對特征的重排序以其單變量權重變化的降序進行。此操作是多線程的,是二次貪婪選擇的線性復雜度近似值。top_k通過設置top_k參數,它允許將選擇限制為每組具有最大單變量權重變化的特征。
top_k [默認= 0]
要選擇的最重要特征數greedy和thrifty特征選擇器。值0表示使用所有功能。
四、學習任務參數
objective [默認= reg:squarederror]
reg:squarederror:損失平方回歸。
reg:squaredlogerror:對數損失平方回歸

所有輸入標簽都必須大於-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 * nclassndata * 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:均方根對數誤差

reg:squaredlogerror目標的默認指標。此指標可減少數據集中異常值所產生的錯誤。但是由於log采用功能,rmsle可能nan在預測值小於-1時輸出。有關reg:squaredlogerror其他要求,請參見。
- mae:平均絕對誤差
- mape:平均絕對百分比誤差
- 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:其預測標簽位於間隔檢查的標簽中的數據點的分數。僅適用於間隔檢查的數據。有關詳細信息,請參見具有加速故障時間的生存分析。
五、命令行參數
以下參數僅在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 ,其中0003
model_dir[默認= models/]
訓練期間保存的模型的輸出目錄
fmap
特征圖,用於轉儲模型
dump_format[default = text]選項:text,json
模型轉儲文件的格式
name_dump[默認= dump.txt]
模型轉儲文件的名稱
name_pred[默認= pred.txt]
預測文件的名稱,在pred模式下使用
pred_margin [默認= 0]
預測margin 而不是轉換概率
六、代碼主要函數:
載入數據:load_digits()
數據拆分:train_test_split()
建立模型:XGBClassifier()
模型訓練:fit()
模型預測:predict()
性能度量:accuracy_score()
特征重要性:plot_importance()
七、參數調整注意事項
控制過度擬合:
當您觀察到較高的訓練准確度但較低的測試准確度時,很可能遇到了過擬合問題。
通常,您可以通過兩種方法控制XGBoost中的過擬合:
第一種方法是直接控制模型的復雜性。
這包括max_depth,min_child_weight和gamma。
第二種方法是增加隨機性,以使訓練對噪聲具有魯棒性。
這包括subsample和colsample_bytree。
您還可以減小學習率 eta,同時增加num_round。
更快的訓練表現
有一個名為的參數tree_method,請將其設置為hist或gpu_hist以加快計算速度。
處理不平衡的數據集
對於廣告點擊日志等常見情況,數據集極不平衡。這可能會影響XGBoost模型的訓練,有兩種方法可以對其進行改進。
如果您只關心預測的整體效果指標(AUC)
- 通過 scale_pos_weight調整正例和負例的比例
- 使用AUC進行評估
如果您關心預測正確的可能性
- 在這種情況下,您無法重新平衡數據集
- 將參數設置max_delta_step為有限數(例如1)以幫助收斂
更多信息,強烈推薦:
https://xgboost.readthedocs.io/en/latest/python/python_api.html#module-xgboost.training
