XGBoost特點、調參、討論
XGBoost是在GBDT(梯度提升決策樹)基礎上發展而來。
GBDT含有幾個關鍵點:梯度提升,提升決策樹,迴歸問題。
本質模型為加法模型,基函式為決策樹,迭代擬合標註和模型的殘差,來不斷逼近損失函式最小化。更一般的情況,以當前模型在L負梯度方向的值,作為殘差的近似。
XGBoost(eXtreme Gradient Boosting)針對GBDT框架,加入了很多改進點。
1. XGB的特點
(1)傳統GBDT以CART作為基函式,xgb還支援線性分類器,此時XGB相當於來L1/L2正則化項的LR(分類)或者Liear R(迴歸)。
booster [default=gbtree]
設定引數:gbtree: tree-based models/gblinear: linear models
(2)傳統GBDT在優化時只用到一階導數資訊(負梯度),xgboost則對代價函式進行了二階泰勒展開,同時用到一階和二階導數。且xgboost工具支援自定義代價函式,只要函式可一階和二階求導。
(3)xgboost在代價函式里加入了正則項,控制模型複雜度。正則項裡包含了樹的葉節點個數、每個葉子節點上輸出的score的L2模的平方和。從Bias-variance tradeoff角度來講,正則項降低了模型variance,使學習出來的模型更加簡單,防止過擬合,這也是xgboost優於傳統GBDT的一個特性。 剪枝是都有的,葉子節點輸出L2平滑是新增的。
(4)shrinkage縮減和column_subsampling
shrinkage縮減:類似於學習速率,在每一步tree boosting之後增加了一個引數n(權重),通過這種方式來減小每棵樹的影響力,給後面的樹提供空間去優化模型。
column subsampling:列(特徵)抽樣,隨機森林那邊學習來的,防止過擬合的效果比傳統的行抽樣還好(行抽樣功能也有),並且有利於後面提到的並行化處理演算法。
(5)split finding algorithms(劃分點查詢演算法)
樹節點在進行分裂時,我們需要計算每個特徵的每個分割點對應的增益,即用貪心法 greedy algorithm列舉所有可能的分割點。當資料無法一次載入記憶體或者在分散式情況下,貪心演算法效率就會變得很低,所以xgboost還提出了一種可並行的近似approximate algorithm直方圖演算法Weighted Quantile Sketch,用於高效地生成候選的分割點。
(6)對缺失值的處理。對於特徵的值有缺失的樣本,xgboost可以自動學習出它的分裂方向。 稀疏感知演算法 Sparsity-aware Split Finding
(7)Built-in Cross-Validation(內建交叉驗證)
XGBoost allows user to run a cross-validation at each iteration of the boosting process and thus it is easy to get the exact optimum number of boosting iterations in a single run.
This is unlike GBM where we have to run a grid-search and only a limited values can be tested.
(8)High Flexibility(高靈活性)
XGBoost allow users to define custom optimization objectives and evaluation criteria.
This adds a whole new dimension to the model and there is no limit to what we can do.
(9)xgboost支援並行,提高計算速度。
2. XGB並行化
boosting不是一種序列的結構嗎?怎麼並行的?
注意xgboost的並行不是在tree粒度的並行,xgboost也是一次迭代完才能進行下一次迭代的(第t次迭代的代價函式裡包含了前面t-1次迭代的預測值)。
xgboost的並行是在特徵粒度上的(是在構建樹的過程中)。我們知道,決策樹的學習最耗時的一個步驟就是對特徵的值進行排序(因為要確定最佳分割點),xgboost在訓練之前,預先對資料進行排序,然後儲存為block結構,後面的迭代中重複地使用這個結構,大大減小計算量。
這個block結構也使得並行成為了可能,在進行節點分裂時,需要計算每個特徵的增益,最終選增益最大的那個特徵去做分裂,那麼各個特徵的增益計算就可以開多執行緒進行。
構建樹包括外層迴圈和內層迴圈。外層迴圈是構建樹的子節點中,對子節點分別使用CART,那麼此處可以並行化處理。內層迴圈是在某個節點做CART,需要遍歷特徵列,確定特徵及特徵最佳分割點,此處也可以並行。
3. XGB關鍵調參
3.1 常規引數
(1)booster [default=gbtree]:選擇基分類器
gbtree: tree-based models/gblinear: linear models
(2)silent [default=0]:設定成1則沒有執行資訊輸出,最好是設定為0.
(3)nthread [default to maximum number of threads available if not set]:執行緒數
3.2 模型引數
(1)eta:shrinkage引數,更新葉子節點權重時,乘以該係數避免步長過大。
(2)min_child_weight:default=1]引數預設是 1,每個葉子裡面 h 的和至少是多少,對正負樣本不均衡時的 0-1 分類而言,假設 h 在 0.01 附近,min_child_weight 為 1 意味著葉子節點中最少需要包含 100 個樣本。這個引數非常影響結果,控制葉子節點中二階導的和的最小值,該引數值越小,越容易 overfitting。
(3) max_depth [default=6]:每顆樹最大深度,樹高越深,葉節點越多,越容易過擬合。
(4)max_leaf_nodes:最大葉結點數,與max_depth作用有點重合。
(5) gamma [default=0]:後剪枝時,用於控制是否後剪枝的引數。
(6)max_delta_step [default=0]:這個引數在更新步驟中起作用,如果取0表示沒有約束,如果取正值則使得更新步驟更加保守。可以防止做太大的更新步子,使更新更加平緩。
(7)subsample [default=1]:樣本隨機取樣,較低的值使得演算法更加保守,防止過擬合,但是太小的值也會造成欠擬合。是Bagging思想,樣本擾動。
(8)colsample_bytree [default=1]:列取樣,對每棵樹的生成用的特徵進行列取樣。一般設定為: 0.5-1。如RF的思想,屬性擾動。
(9) lambda [default=1]:控制模型複雜度的權重值的L2正則化項引數,引數越大,模型越不容易過擬合。 (葉節點上輸出的score的L2模的平方和)
(10)alpha [default=0]:控制模型複雜程度的權重值的 L1 正則項引數,引數值越大,模型越不容易過擬合。 (葉節點個數)
(11)scale_pos_weight [default=1]:如果取值大於0的話,在類別樣本不平衡的情況下有助於快速收斂。
3.3 學習任務引數
(1)objective [default=reg:linear]:定義最小化損失函式型別。
常用引數:
binary:logistic –logistic regression for binary classification, returns 預測概率值 (not class)
multi:softmax –multiclass classification using the softmax objective, returns 預測的類別 (not probabilities)
you also need to set an additional num_class (number of classes) parameter defining the number of unique classes
multi:softprob –same as softmax, but returns predicted probability of each data point belonging to each class.
(2)eval_metric [ default according to objective ]: The metric to be used for validation data.
The default values are rmse for regression and error for classification.
Typical values are:
rmse – root mean square error
mae – mean absolute error
logloss – negative log-likelihood
error – Binary classification error rate (0.5 threshold)
merror – Multiclass classification error rate
mlogloss – Multiclass logloss
auc: Area under the curve
(3)seed [default=0]:
The random number seed. 隨機種子,用於產生可復現的結果
Can be used for generating reproducible results and also for parameter tuning.
注意::
python sklearn引數名會有所變化
eta –> learning_rate
lambda –> reg_lambda
alpha –> reg_alpha
參考資料
相關推薦
XGBoost特點、調參、討論
XGBoost是在GBDT(梯度提升決策樹)基礎上發展而來。 GBDT含有幾個關鍵點:梯度提升,提升決策樹,迴歸問題。 本質模型為加法模型,基函式為決策樹,迭代擬合標註和模型的殘差,來不斷逼近損失函式最小化。更一般的情況,以當前模型在L負梯度方向的值,作為殘
Xgboost原理、程式碼、調參和上線實錄
對於一個演算法工程師而言,xgboost應該算的上是起手式,網上也有各式各樣的教程,這篇部落格主要從原理、程式碼、調參和上線進行覆蓋,進而構建一個直觀的演算法體系; 生成的二叉樹是滿二叉樹還是完全二叉樹? 調參方法
開源俄版三軸雲臺軟硬體、調參軟體除錯可用,程式碼開源,入門說明
本方案採用開源方案,雲臺嵌入式軟體採用simpleBGC開原始碼,並參考了網上“SimpleBGC32- 開源三軸無刷雲臺演算法完全解說”修改而成,程式在STorM32 BGC V1.31硬體開源板卡中除錯成功並通過實測。調參軟體採用storm32-bgc開源調參軟體程式修改而成,繼續秉
KMeans原理、調參及應用
一、前言 KMeans是資料探勘十大演算法之一,在資料探勘實踐中,我們也常常將KMeans運用於各種場景,因為它原理簡單、易於實現、適合多種資料探勘情景。 二、原理 KMeans的原理較為簡單:以某種相似性度量為標準,確定樣本的結構,即樣本屬於哪一個簇取決於該樣本與哪一個簇
內參、外參、畸變參數三種參數與相機的標定方法與相機坐標系的理解
整體 沒有 建立 csdn ext 位置 nbsp ons 包含 博客轉載自:http://blog.csdn.net/yangdashi888/article/details/51356385 相機的內參數是六個分別為:1/dx、1/dy、r、u0、v0、f opencv
簡單的函數實參、形參、默認值的定義
python 函數 Python語句中可以進行函數調用來簡化工作,每個函數都可以完成具體的任務。當遇到相同任務,調用函數方便快捷。 函數首先需設定形參(抽象概念),最後賦予具體值(實參),有些具體值可以不變,則可提前設定好默認值。 eg. 編寫一個和T-SHIRT尺碼及標語相關的函數: 設定好T-
第一次個人作業【四】(代碼編寫、調試、debug相關)
pre 運行速度 快速 hfile 配置 osi 命令 字符 最大值 代碼編寫過程中的重要知識點 VS調試命令行參數的輸入 在VS中調試,無法直接輸入命令行參數,但是可以通過一下方法配置命令行參數: 點擊菜單欄的 項目>>屬性 出現屬性對話框之後,選擇 配置屬
C語言中函數聲明、形參、實參
-s 函數返回 int 是什麽 變量 strong 返回值 pro ont 函數原型: 原型prototype是函數的聲明;描述了函數的返回值與參數; 函數原型說明了兩點: 1、該函數的返回值 2、該函數的參數及其類型 ++++++++++++++++++++++++++
Python異常處理機制、調試、測試
solid opera font pad 當我 back asi conf one 類似於Java的try..catch..finally Java的為try_except_finally try: print(‘try...‘) r = 10 / 0
C語言中函式宣告、形參、實參
函式原型: 原型prototype是函式的宣告;描述了函式的返回值與引數; 函式原型說明了兩點: 1、該函式的返回值 2、該函式的引數及其型別 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 函式的引數: 引數到底是什
Python 3.X | 一文看懂不懵圈:位置引數(必選引數)、預設引數、可變引數、關鍵字引數、形參、實參...
Win 10+Python 3.6.3 不管是什麼引數,它們身處環境是:函式(function)。引數讓函式如虎添翼,靈活、強大。 1、概念釋義: def func(x, y=2, *arg, *, z, **kwargs): #print(x, y) #print(len(ar
python之自定義函式、傳參、作用域
一、函式的作用域:表示函式執行時的範圍 注意:返回函式名稱,即返回一個地址;簡單說就是:函式名稱即指代該函式地址,在呼叫函式時,需在函式名稱後面加括號:函式名稱() 如上面圖片中那樣的情況,再最後加兩行程式碼: dz3=dz2() #---接收foo2()函式執行的返回
VS中生成、清理項目、調試、開始運行(不調試)、Debug 和 Release等之間的差別
con clear http clas 程序 最好 span 文件的 shee 版權聲明:本文為博主原創文章。未經博主同意不得轉載。 https://blog.csdn.net/helloUSB2010/article/details/
typescript學習之旅----資料型別及函式、傳參、過載等
typescript中為了使編寫的程式碼更規範,更有利於維護,增加了型別校驗,在typescript中主要給我們提供了以下資料型別 布林型別(boolean) 數字型別(number) 字串型別(string)
如何使用hyperopt對xgboost進行自動調參
本教程重點在於傳授如何使用Hyperopt對xgboost進行自動調參。但是這份程式碼也是我一直使用的程式碼模板之一,所以在其他資料集上套用該模板也是十分容易的。 同時因為xgboost,lightgbm,catboost。三個類庫呼叫方法都比較一致,所以在本部分結束之後,我們有理由
構造方法(定義、有參、無參、過載)
一、構造方法是什麼,有什麼用? 構造方法是類的一個特殊的成員,在類例項化時會自動呼叫。 通過前面的學習,我們知道為一個屬性賦值有兩種方法:①、直接訪問物件屬性 ②、通過setXxx()方法 如果想在例項化物件的同時就為這個物件的屬性進行賦值,可以通過構造方
3.5 抽象類、repr、算術定義、傳參、深淺拷貝、序列化
from abc import ABC, abstractmethod # 抽象基類 class Animal(ABC): # 定義抽象方法:規定介面 @abstractmethod def run(self): pass # 抽象基類不能例項化 # a =
python 利用pymssql連線sqlserver、查詢、傳參、插入新表案例
場景:連線資料庫後,將某個表的查詢結果賦值給另一條查詢語句,並將查詢後的結果插入到新表。 知識點: *1.pymssql如何連線資料庫 2.資料庫查詢傳參 3.字串之間的相互轉換* import pymssql import numpy as np c
golang基礎-函式是變數、自定義type、命名返回值、可變參、defer、匿名
函式是一個變數型別 package main import("fmt" ) func main() { c := add fmt.Println(c) sum := c(10, 20)
9.無線架構之存在的問題(包括Guest限制、調優、限速、通道切換掉線)
拓撲 拓撲可以儲存到本地,然後擴大檢視,這樣才能看的更清楚。(拖動到新視窗開啟即可) 目前環境存在的問題 8.5.1 無線之間都可以訪問。 可以看到內部使用者與Guest之間是可以訪問的,這樣存在一定的安全性,因為訪客是從外面過來的,經過了各種各樣的網路,假