日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xgboost原理及应用

發布時間:2024/1/17 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xgboost原理及应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.背景

關于xgboost的原理網絡上的資源很少,大多數還停留在應用層面,本文通過學習陳天奇博士的PPT地址和xgboost導讀和實戰?地址,希望對xgboost原理進行深入理解。

2.xgboost vs gbdt

說到xgboost,不得不說gbdt。了解gbdt可以看我這篇文章?地址,gbdt無論在理論推導還是在應用場景實踐都是相當完美的,但有一個問題:第n顆樹訓練時,需要用到第n-1顆樹的(近似)殘差。從這個角度來看,gbdt比較難以實現分布式(ps:雖然難,依然是可以的,換個角度思考就行),而xgboost從下面這個角度著手?

注:紅色箭頭指向的l即為損失函數;紅色方框為正則項,包括L1、L2;紅色圓圈為常數項。?
利用泰勒展開三項,做一個近似,我們可以很清晰地看到,最終的目標函數只依賴于每個數據點的在誤差函數上的一階導數和二階導數。

3.原理

(1)定義樹的復雜度?
對于f的定義做一下細化,把樹拆分成結構部分q葉子權重部分w。下圖是一個具體的例子。結構函數q把輸入映射到葉子的索引號上面去,而w給定了每個索引號對應的葉子分數是什么。?

定義這個復雜度包含了一棵樹里面節點的個數,以及每個樹葉子節點上面輸出分數的L2模平方。當然這不是唯一的一種定義方式,不過這一定義方式學習出的樹效果一般都比較不錯。下圖還給出了復雜度計算的一個例子。?

注:方框部分在最終的模型公式中控制這部分的比重?
在這種新的定義下,我們可以把目標函數進行如下改寫,其中I被定義為每個葉子上面樣本集合?

??

?

這一個目標包含了TT個相互獨立的單變量二次函數。我們可以定義

?

?

最終公式可以化簡為

?

?

通過對求導等于0,可以得到

?

?

然后把最優解代入得到:

?

?

(2)打分函數計算示例

Obj代表了當我們指定一個樹的結構的時候,我們在目標上面最多減少多少。我們可以把它叫做結構分數(structure score)

(3)枚舉不同樹結構的貪心法

貪心法:每一次嘗試去對已有的葉子加入一個分割

?

?

對于每次擴展,我們還是要枚舉所有可能的分割方案,如何高效地枚舉所有的分割呢?我假設我們要枚舉所有x < a 這樣的條件,對于某個特定的分割a我們要計算a左邊和右邊的導數和。

?

?

我們可以發現對于所有的a,我們只要做一遍從左到右的掃描就可以枚舉出所有分割的梯度和GL和GR。然后用上面的公式計算每個分割方案的分數就可以了。

觀察這個目標函數,大家會發現第二個值得注意的事情就是引入分割不一定會使得情況變好,因為我們有一個引入新葉子的懲罰項。優化這個目標對應了樹的剪枝, 當引入的分割帶來的增益小于一個閥值的時候,我們可以剪掉這個分割。大家可以發現,當我們正式地推導目標的時候,像計算分數和剪枝這樣的策略都會自然地出現,而不再是一種因為heuristic(啟發式)而進行的操作了。

4.自定義損失函數

在實際的業務場景下,我們往往需要自定義損失函數。這里給出一個官方的 鏈接?地址

5.Xgboost調參

由于Xgboost的參數過多,使用GridSearch特別費時。這里可以學習下這篇文章,教你如何一步一步去調參。地址

6.python、R對于xgboost的簡單使用

任務:二分類,存在樣本不均衡問題(scale_pos_weight可以一定程度上解讀此問題)?
【Python】?

【R】?

7.xgboost中比較重要的參數介紹

(1)objective [ default=reg:linear ] 定義學習任務及相應的學習目標,可選的目標函數如下:

  • “reg:linear” –線性回歸。
  • “reg:logistic” –邏輯回歸。
  • “binary:logistic” –二分類的邏輯回歸問題,輸出為概率。
  • “binary:logitraw” –二分類的邏輯回歸問題,輸出的結果為wTx。
  • “count:poisson” –計數問題的poisson回歸,輸出結果為poisson分布。 在poisson回歸中,max_delta_step的缺省值為0.7。(used to safeguard optimization)
  • “multi:softmax” –讓XGBoost采用softmax目標函數處理多分類問題,同時需要設置參數num_class(類別個數)
  • “multi:softprob” –和softmax一樣,但是輸出的是ndata * nclass的向量,可以將該向量reshape成ndata行nclass列的矩陣。沒行數據表示樣本所屬于每個類別的概率。
  • “rank:pairwise” –set XGBoost to do ranking task by minimizing the pairwise loss

(2)’eval_metric’ The choices are listed below,評估指標:

  • “rmse”: root mean square error
  • “logloss”: negative log-likelihood
  • “error”: Binary classification error rate. It is calculated as #(wrong cases)/#(all cases). For the predictions, the evaluation will regard the instances with prediction value larger than 0.5 as positive instances, and the others as negative instances.
  • “merror”: Multiclass classification error rate. It is calculated as #(wrong cases)/#(all cases).
  • “mlogloss”: Multiclass logloss
  • “auc”: Area under the curve for ranking evaluation.
  • “ndcg”:Normalized Discounted Cumulative Gain
  • “map”:Mean average precision
  • “ndcg@n”,”map@n”: n can be assigned as an integer to cut off the top positions in the lists for evaluation.
  • “ndcg-“,”map-“,”ndcg@n-“,”map@n-“: In XGBoost, NDCG and MAP will evaluate the score of a list without any positive samples as 1. By adding “-” in the evaluation metric XGBoost will evaluate these score as 0 to be consistent under some conditions.

(3)lambda [default=0]?L2 正則的懲罰系數

(4)alpha [default=0]?L1 正則的懲罰系數

(5)lambda_bias?在偏置上的L2正則。缺省值為0(在L1上沒有偏置項的正則,因為L1時偏置不重要)

(6)eta [default=0.3]?
為了防止過擬合,更新過程中用到的收縮步長。在每次提升計算之后,算法會直接獲得新特征的權重。 eta通過縮減特征的權重使提升計算過程更加保守。缺省值為0.3?
取值范圍為:[0,1]

(7)max_depth [default=6]?數的最大深度。缺省值為6 ,取值范圍為:[1,∞]

(8)min_child_weight [default=1]?
孩子節點中最小的樣本權重和。如果一個葉子節點的樣本權重和小于min_child_weight則拆分過程結束。在現行回歸模型中,這個參數是指建立每個模型所需要的最小樣本數。該成熟越大算法越conservative?
取值范圍為: [0,∞]

更多關于Xgboost學習地址

(1)https://github.com/dmlc/xgboost

總結

以上是生活随笔為你收集整理的xgboost原理及应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。