監督學習 八 決策樹整合 梯度提公升回歸樹

2021-09-10 02:34:17 字數 2341 閱讀 5443

梯度提公升回歸樹是另一種決策樹整合方法,通過合併多個決策樹來構建乙個更為強大的模型。雖然名字中含有「回歸」,但這個模型既可以用於回歸也可以用於分類

與隨機森林方法不同,梯度提公升採用連續的方式構造樹,每棵樹都試圖糾正前一棵樹的錯誤。預設情況下,梯度提公升回歸樹中沒有隨機化,而是用到了強預剪枝。梯度提公升樹通常使用深度很小(1到 5 之間)的樹,這樣模型占用的記憶體更少,**速度也更快。

梯度提公升背後的主要思想是合併許多簡單的模型,比如深度較小的樹。每棵樹只能對部分資料做出好的**,因此,新增的樹越來越多,可以不斷迭代提高效能。

梯度提公升樹通常對引數設定更為敏感,正確的設定引數,可以將精度提高很多。除了預剪枝與整合中樹的數量之外,梯度提公升的另乙個重要引數是 learning_rate(學習率),它用於控制每棵樹糾正前一棵樹的錯誤的強度。較高的學習率意味著每棵樹都可以做出較強的修正,這樣模型更為複雜。通過增大 n_estimators 來向整合中新增更多樹,也可以增加模型複雜度,因為模型有更多機會糾正訓練集上的錯誤。

例子利用gradientboostingclassifier,資料用sklearn.datasets中的load_breast_cancer。

第一次,用預設值: 100 棵樹, 最大深度是 3,學習率為 0.1。

cancer = load_breast_cancer()

x_train, x_test, y_train, y_test = train_test_split(

cancer.data, cancer.target, random_state=0)

gbrt = gradientboostingclassifier(random_state=0)

gbrt.fit(x_train, y_train)

print("accuracy on training set: ".format(gbrt.score(x_train, y_train)))

print("accuracy on test set: ".format(gbrt.score(x_test, y_test)))

結果:accuracy on training set: 1.000

accuracy on test set: 0.958

訓練集精度達到 100%,很可能存在過擬合。為了降低過擬合,我們可以限制最 大深度來加強預剪枝,也可以降低學習率:

第二次,將最大深度改為1。

gbrt = gradientboostingclassifier(random_state=0, max_depth=1)

結果:accuracy on training set: 0.991

accuracy on test set: 0.972

第三次,降低學習率。

gbrt = gradientboostingclassifier(random_state=0, learning_rate=0.01)

結果:accuracy on training set: 0.988

accuracy on test set: 0.965

由於梯度提公升和隨機森林兩種方法在類似的資料上表現得都很好,因此一種常用的方法就是先嘗試隨機森林,它的魯棒性很好。如果隨機森林效果很好,但**時間太長,或者機 器學習模型精度小數點後第二位的提高也很重要,那麼切換成梯度提公升通常會有用。

如果你想要將梯度提公升應用在大規模問題上,可以研究一下 xgboost 包及其 python 介面,這個庫在許多資料集上的速度都比 scikit-learn 對梯度提公升的實現要快 。

優點、缺點和引數

梯度提公升決策樹是監督學習中最強大也最常用的模型之一。

其主要缺點是需要仔細調參,而且訓練時間可能會比較長。與其他基於樹的模型類似,這一演算法不需要對資料進行縮放就可以表現得很好,而且也適用於二元特徵與連續特徵同時存在的資料集。與其他基於樹的模型相同,它也通常不適用於高維稀疏資料。

梯度提公升樹模型的主要引數包括樹的數量 n_estimators 和學習率 learning_rate,後者用於控制每棵樹對前一棵樹的錯誤的糾正強度。這兩個引數高度相關,因為 learning_ rate 越低,就需要更多的樹來構建具有相似複雜度的模型。

隨機森林的 n_estimators 值總是越大越好,但梯度提公升不同,增大 n_estimators 會導致模型更加複雜,進而可能導致過擬合。通常的做法是根據時間和記憶體的預算選擇合適的 n_estimators,然後對不同的 learning_rate 進行遍歷。

另乙個重要引數是 max_depth(或 max_leaf_nodes),用於降低每棵樹的複雜度。梯度提公升模型的 max_depth 通常都設定得很小,一般不超過 5。

GBDT 梯度提公升決策樹

gbdt gradient boosting decision tree 又叫 mart multiple additive regression tree 是一種迭代的決策樹演算法,該演算法由多棵決策樹組成,所有樹的結論累加起來做最終答案。它在被提出之初就和svm一起被認為是泛化能力較強的演算法。...

梯度提公升決策樹 GBDT

整合學習經典一類演算法,屬於個體學習器間存在較強依賴關係的一類,需以序列的序列化生成方法構建。原理 所有弱分類器結果相加等於 值,下乙個弱分類器去擬合誤差函式對 值的殘差 值與真實值的誤差 這裡的弱分類器是決策樹。舉例 用gbdt的方法 年齡 step1 在第乙個弱分類器中隨機選擇乙個數字擬合,發現...

梯度提公升決策樹 GBDT)

以決策樹為基函式的提公升方法稱為提公升樹。決策樹可以分為分類樹和回歸樹。提公升樹模型可以表示為決策樹的加法模型。針對不同的問題的提公升術演算法的主要區別就是損失函式的不同,對於回歸問題我們選用平方損失函式,對於分類問題,我們使用指數損失函式。特別的,對於二分類問題,我們提公升樹就是把adaboost...