GBDT解決分類問題

2021-10-21 18:22:13 字數 1404 閱讀 8862

一、gbdt是通過梯度下降(作為殘差的近似)更新的決策樹整合的boosting模型。

(1)gbdt無論用於分類還是回歸一直是使用的cart回歸樹。

原因:如果選用的弱分類器是分類樹,類別相減是沒有意義的。上一輪輸出的是樣本x屬於a類,本輪訓練輸出的是樣本x屬於b類,a類減b類是沒有意義的。

(2)gbdt每輪的訓練是在上一輪訓練的殘差基礎上進行訓練的,殘差指的是當前模型的負梯度值。

二、使用gbdt來解決多分類問題,實質是把它轉化為回歸問題。在回歸問題中,gbdt每一輪迭代都構建了一棵樹,實質是構建了乙個函式f,當輸入為x時,樹的輸出為f(x)。

在多分類問題中,假設有k個類別,那麼每一輪迭代實質是構建了k棵樹,對某個樣本x的**值為

在這裡我們仿照多分類的邏輯回歸,使用softmax來產生概率,則屬於某個類別c的概率為

此時該樣本的loss即可以用logitloss來表示,並對f1fk都可以算出乙個梯度,f1fk便可以計算出當前輪的殘差,供下一輪迭代學習。最終做**時,輸入的x會得到k個輸出值,然後通過softmax獲得其屬於各類別的概率即可。

三、gbdt如何用於分類的

第一步:訓練的時候,是針對樣本 x 每個可能的類都訓練乙個分類回歸樹。如目前的訓練集共有三類,即k = 3,樣本x屬於第二類,那麼針對樣本x的分類結果,我們可以用乙個三維向量[0,1,0]來表示,0表示不屬於該類,1表示屬於該類,由於樣本已經屬於第二類了,所以第二類對應的向量維度為1,其他位置為0。

針對樣本有三類的情況,我們實質上是在每輪的訓練的時候是同時訓練三顆樹。第一顆樹針對樣本x的第一類,輸入是(x,0),第二顆樹針對樣本x的第二類,輸入是(x,1),第三顆樹針對樣本x的第三類,輸入是(x,0)。

在對樣本x訓練後產生三顆樹,對x 類別的**值分別是f1(x),f2(x),f3(x),那麼在此類訓練中,樣本x屬於第一類,第二類,第三類的概率分別是:

然後可以求出針對第一類,第二類,第三類的殘差分別是:

然後開始第二輪訓練,針對第一類輸入為(x,y11(x)),針對第二類輸入為(x,y22(x)),針對第三類輸入為(x,y33(x)),繼續訓練出三顆樹。一直迭代m輪,每輪構建三棵樹

當訓練完畢以後,新來乙個樣本x1,我們需要**該樣本的類別的時候,便產生三個值f1(x),f2(x),f3(x),則樣本屬於某個類別c的概率為:

XGBoost解決多分類問題

xgboost官方給的二分類問題的例子是區別蘑菇有無毒,資料集和 都可以在xgboost中的demo資料夾對應找到,我是用的anaconda安裝的xgboost,實現起來比較容易。唯一的梗就是在終端中執行所給命令 xgboost mushroom.conf 時會報錯,是路徑設定的問題,所以我乾脆把x...

邏輯回歸解決多分類問題

第二種方法 從演算法入手 傳統的邏輯回歸只能處理二分類問題,對於多分類任務,主要有如下兩種方案。某個分類演算法有n類,將某一類和另一模擬較作為二分類問題,總共可分為cn2 c cn 2 種不同的二分類模型,給定乙個新的樣本點,求出每種二分類對應的概率,概率最高的一類作為新樣本的 結果。某個分類演算法...

TensorFlow解決分類問題 示例 命令解釋

shape 對於輸入x.shape 樣本數,單個樣本的特徵長度 打平或不打平 對於輸出y.shape 樣本數,輸出數 import os os.environ tf cpp min log level 2 import tensorflow as tf from tensorflow import ...