機器學習 GBDT

2022-08-05 07:00:12 字數 2967 閱讀 4237

###基礎概念

gbdt(gradient boosting decision tree) 全稱梯度提公升決策樹,是一種迭代的決策樹演算法。gbdt是整合學習boosting的家族成員,gbdt中的樹是回歸樹,用於回歸**,調整後也可以用於分類。

####分類樹與回歸樹的差異

分類樹大致的實現過程是:窮舉每乙個屬性特徵的資訊增益值,每一次都選取使資訊增益最大(或資訊增益比,基尼係數等)的特徵進行分枝,直到分類完成或達到預設的終止條件,實現決策樹的遞迴構建。

回歸樹的實現過程與分類樹大體類似,在劃分標準上回歸樹使用最小化均方差(x-x1)2/n+(x-x2)2/n+...+(x-xn)2/n,而不是使用資訊增益等指標。同時回歸樹的**值是數值型。

關於決策樹原理可檢視我之前的文章:決策樹演算法

####gradient boosting:

gradient boosting是一種boosting的方法,它主要的思想是沿著梯度方向,構造一系列的弱分類器函式,並以一定權重組合起來,形成最終決策的強分類器。

具體的實現方式是:

下乙個分類器是在前乙個分類器得到的殘差基礎上進行進一步分類,採用平方誤差損失函式時,每一棵回歸樹學習的是之前所有樹的結論和殘差(殘差 = 真實值 - **值 ),擬合得到乙個當前的殘差回歸樹。它是一種序列的分類器集合方法。

####梯度下降:

梯度下降是迭代法的一種,可以用於求解最小二乘問題(線性和非線性都可以)。在求解機器學習演算法的模型引數,即無約束優化問題時,梯度下降(gradient descent)是最常採用的方法之一。

在求解損失函式的最小值時,可以通過梯度下降法來一步步的迭代求解,得到最小化的損失函式和模型引數值。反過來,如果我們需要求解損失函式的最大值,這時就需要用梯度上公升法來迭代了。在機器學習中,基於基本的梯度下降法發展了兩種梯度下降方法,分別為隨機梯度下降法和批量梯度下降法。

同樣的,gbdt的核心也是讓損失函式沿著梯度方向下降。

迭代過程:

結合gradient boosting和梯度下降兩個概念,說明gbdt的迭代過程:

針對資料集:t=,xi∈χ=rn,yi∈γ=, i=1,2,⋅⋅⋅,n

迴圈過程:

迭代完成後,輸出最終模型 :

####負梯度方向:

負梯度方向(negative gradient direction)多元可微函式在一點處梯度向量的反方向,它是使函式f在點x附近下降最快的方向.

####殘差

在gbdt中,殘差是損失函式為mse平方損失下的真實值和某一輪模型**值的差值即 yi - f(xi)。其實這個是對平方損失函式求導之後的結果,也就是說在平方損失下求完導,它的負梯度就是殘差。

####gbdt的優缺點:

優點:缺點:

###gbdt的回歸與分類

gbdt既可以用於處理回歸問題也可以處理分類問題,二者之間的差異主要是通過改變模型的損失函式進行更換。

回歸問題對應的損失及在sklearn中的引數值:

分類問題對應的損失及在sklearn中的引數值:

###python**實現

from sklearn.datasets import load_boston

import pandas as pd

from sklearn.cross_validation import train_test_split

from sklearn.metrics import accuracy_score

from sklearn.ensemble import gradientboostingclassifier

boston = load_boston()

#檢視波士頓資料集的keys

print(boston.keys())

boston_data=boston.data

target_var=boston.target

feature=boston.feature_names

boston_df=pd.dataframe(boston_data,columns=boston.feature_names)

boston_df['tar_name']=target_var

#檢視目標變數描述統計

print(boston_df['tar_name'].describe())

#把資料集轉變為二分類資料

boston_df.loc[boston_df['tar_name']<=21,'tar_name']=0

boston_df.loc[boston_df['tar_name']>21,'tar_name']=1

x_train, x_test, y_train, y_test = train_test_split(boston_df[feature], boston_df['tar_name'], test_size=0.30, random_state=1)

gb=gradientboostingclassifier(n_estimators=500,max_depth=2,random_state=1,learning_rate=0.03)

gb.fit(x_train,y_train)

# 度量gbdt的準確性

y_train_pred = gb.predict(x_train)

y_test_pred = gb.predict(x_test)

tree_train = accuracy_score(y_train, y_train_pred)

tree_test = accuracy_score(y_test, y_test_pred)

print('gbdt train/test accuracies %.3f/%.3f' % (tree_train, tree_test))

結果:

random forest train/test accuracies 0.986/0.882

機器學習 GBDT

在gbdt的迭代中,假設前一輪迭代得到的強學習器 ft 1 x f x ft 1 x 損失函式 l y ft 1 x l y,f x l y,ft 1 x 本輪迭代的目標是找到乙個cart回歸樹模型的弱學習器ht x h t x ht x 讓本輪的損失函式l y ft x l y,f t 1 x h...

機器學習 整合學習GBDT

gbdt也是整合學習boosting的其中一種,boosting是由多個弱學習器組成,與bagging不同,boosting學習器之間有關聯的關係。adaboost是通過前面的學習器模型來決定當前的學習器模型的每個樣本的權重,然後計算出當前學習器組合權重,最後將學習器線性組合起來。而gbdt則是通過...

機器學習 整合學習(GBDT)

形式 第一輪,確定n 90 gbdt gradientboostingclassifier model gbdt1 gridsearchcv gbdt,param grid cv 5 model gbdt1.fit x train,y train print model gbdt1.best par...