1、xgboost模型函數形式算法
xgboost也是GBDT的一種,只不過GBDT在函數空間進行搜索最優F的時候,採用的是梯度降低法也就是一階泰勒展開;而xgboost採用的是二階泰勒展開也就是牛頓法,去每次逼近最優的F,泰勒展開越多與原函數形狀越接近,好比在x0處進行展開,其展開越多,x0附近與原函數值越接近,且這個附近的區域越大。另一個xgboost加入了正則化項,有效防止過擬合。機器學習
xgboost與GBDT都是採用的cart樹中的迴歸樹來解決全部問題,迴歸樹的預測輸出是實數分數,能夠用於迴歸、分類、排序等任務中。對於迴歸問題,能夠直接做爲目標值,對於分類問題,須要映射成機率,好比採用邏輯迴歸的sigmoid函數。函數
additive表示附加的,所謂additive training,就是每次add一顆樹進行學習,直到損失最小。學習
偏差函數儘可能去擬合訓練數據,正則化項則鼓勵更加簡單的模型。由於當模型簡單以後,有限數據擬合出來結果的隨機性比較小,不容易過擬合,使得最後模型的預測更加穩定。優化
2、目標函數spa
1)回顧傳統參數空間的目標函數3d
偏差函數能夠是square loss,logloss等,正則項能夠是L1正則,L2正則等。正則項若是從Bayes角度來看,至關於對模型參數引入先驗分佈:blog
L1正則,模型參數服從拉普拉斯分佈,對參數加了分佈約束,大部分取值爲0。排序
L2正則,模型參數服從高斯分佈,對參數加了分佈約束,大部分絕對值很小。索引
2)xgboost在函數空間搜索的目標函數
函數空間的目標函數是多棵樹一塊兒構建的目標損失函數,求解多棵樹一塊兒的總體最優解。
第一部分屬於偏差項,訓練模型的精度;第二部分正則項對每一棵迴歸樹的複雜度進行了懲罰,使得學習出來的模型不容易過擬合。
哪些指標能夠衡量樹的複雜度呢?
樹的深度,內部節點個數,葉子節點個數,葉子節點分數等。
xgboost採用葉子節點個數T和葉子節點分數w(其實就是預測值)對樹的複雜度進行約束:
對葉子節點個數進行懲罰,至關於進行了剪枝。
3、泰勒展開
基本形式:
一階與二階泰勒展開:
1)一階泰勒展開(梯度降低法)
在機器學習任務中,須要最小化損失函數L(θ) ,其中θ 是要求解的模型參數。梯度降低法經常使用來求解這種無約束最優化問題,它是一種迭代方法:選取初值 θ0,不斷迭代,更新θ的值,進行損失函數的極小化。
從上面可知,當△θ=-αL丶(θt-1)時候,θ的更新就跟咱們以前理解的梯度降低方法是一摸同樣。將△θ帶入損失函數便可知,這個時候L(θt)是確定比L(θt-1)變小的。
因此,從梯度降低法角度理解,就是函數值沿着梯度的負方向進行減小;從泰勒展開角度理解,就是函數在θt-1處進行一階展開,並根據展開公式找到了比L(θt-1)更小的近似於L(θt)的值,由於泰勒展開自己就是用多項式形式近似表達函數的原形式。
2)二階泰勒展開(牛頓法)
此時如何進行優化,尋找更小的L(θt)?
這時候利用泰勒二階展開求解最優的△θ,使得L(θt)更小,泰勒二階比一階確定更接近原函數的值,所求得的△θ也使得L(θt)降低的更快,這就是牛頓法的優點。
4、xgboost目標函數進行泰勒展開
xgboost在第t次迭代後,模型的預測等於前t-1次的模型預測加上第t棵樹的預測:
因爲模型已經進行了t-1次迭代,也就是已經學習了t-1棵樹,此時只要學習尋找最優的第t棵樹函數ft便可,因此目標函數以下:
其中yi和yi(t-1)都屬於已知的,能夠理解爲常數。
將目標函數在yi(t-1)處進行泰勒二次展開,由於咱們一步步尋找的是最優的函數yi(t)使得L最小,就是上面所說的在函數空間進行的搜索,因此在yi(t-1)處進行泰勒二次展開尋找並學習下一顆樹ft,這裏的ft其實就至關於上文第三部門牛頓法中的△θ,不停的尋找ft,最後將這些樹加起來就成了最優的yt,上文中也是不停的尋找△θ,最後θ*=θ0+Σ△θ,同樣的道理。無非一個是在參數空間進行搜索,一個是在函數空間進行搜索。二次展開以下:
其中gi和hi分佈以下:
將常數項去掉,並把樹的結構形式帶入獲得以下:
其實這個時候已經簡潔地變成對t棵樹的學習優化問題了,以葉子節點形式表示上述目標函數以下,其中Ij={i|q(xi)=j}表示j葉子節點上的樣本集合。
爲了使目標函數最小,能夠令其導數爲0,解得每一個葉節點的最優預測分數爲:
帶入目標函數,獲得最小損失爲:
5、如何進行分裂?
1)如何評測節點分裂的優劣?
ID3採用信息增益來評測,C4.5採用信息增益率、CART樹採用基尼係數和平方損失來評測,xgboost採用以下的打分評測:
其實就是上面的最小損失值的公式,若是分裂後能讓損失變得更小,就值得去分裂,因此分裂先後增益定義爲:
這個Gain就是分裂前的損失-分裂後的損失,差值越大,表明分裂後的損失越小,因此當對一個節點進行分裂時,計算全部候選(feature,value)對應的gain,選區gain最大的進行分裂。
2)尋找分裂節點
一、精確算法-暴力窮舉搜索法
遍歷全部特徵的全部可能的分割點,計算gain值,選取gain值最大的(feature,value)去分割。該方式優勢是精度高,缺點是計算量太大。
二、近似算法-分位點分割
對於某一個特徵,按照百分比肯定候選分裂點,經過遍歷全部特徵的全部候選分裂點來找到最佳分裂點,減小了計算複雜度。
3.weighted quantile sketch(按權重的分位點算法)
該方法將樣本對應的殘差二階導h做爲劃分依據,假設每個分位點區間的h之和佔總h的比率爲rk(z),則兩個相鄰區間的rk之差小於一個固定值,以下所示: