決策樹(二)決策樹回歸

2022-06-22 23:48:09 字數 1762 閱讀 5732

回歸

決策樹也可以用於執行回歸任務。我們首先用sk-learn的decisiontreeregressor類構造一顆回歸決策樹,並在乙個帶雜訊的二次方資料集上進行訓練,指定max_depth=2:

import

numpy as np

#quadratic training set + noise

np.random.seed(42)

m = 200x = np.random.rand(m, 1)

y = 4 * (x - 0.5) ** 2y = y + np.random.randn(m, 1) / 10

from sklearn.tree import

decisiontreeregressor

tree_reg = decisiontreeregressor(max_depth=2, random_state=42)

tree_reg.fit(x, y)

下圖是這棵樹的結果:

這棵樹看起來與之前構造的分類樹類似。主要的區別是:在每個節點中,**的不是乙個類別,而是乙個值。例如,假設我們想為乙個新的例項x1=0.6做**。我們會先從根節點遍歷樹,最終到達**value=0.111的葉子節點。這個**值是與這個葉子節點關聯的110條訓練資料的平均值,並且它在這110條資料上的均方誤差等於0.015。

這個模型的**在如下左圖中進行表示。如果設定max_depth=3,則得到如下右圖。需要注意的是:每個區域的**值,都是當前區域中所有目標值的平均值。演算法在分割區域時,會以一種讓大部分訓練資料盡可能地靠近**的值的方式進行分割。

cart演算法在這與之前提到的原理基本類似,除了在分割訓練集時,之前是找到一種分割讓不純度最小;現在是找到一種分割讓mse最小。下面是演算法要最小化的損失函式:

與分類任務一樣,在處理回歸任務時,決策樹也會傾向於過擬合。如果沒有任何的正則(例如使用的是預設的引數),則我們會得到下面左圖的(在訓練集上)**的結果。很明顯這些**在訓練集上是過擬合的。在僅設定min_samples_leaf=10 後,我們可以得到乙個更合理的模型,如下右圖所示:

不穩定性

不過在決策樹中最常見也最主要的問題是:它們對訓練集中的微小變化都非常敏感。例如,假設我們僅僅是從iris訓練集中移除掉最寬的iris versicolor(這條資料的length=4.8 cm,width=1.8cm) ,然後重新訓練乙個新的決策樹,我們可能會得到下面的模型:

從這模型裡我們可以看到,它與之前訓練的決策樹模型差別非常大。不過實際上由於sk-learn是隨機的(它會隨機選擇一組特徵,在每個節點中進行評估),所以即使是在同樣的訓練資料上,每次訓練出來的模型可能都是差別比較大的(除非設定了random_state 超引數)。

隨機森林可以限制這種不穩定性,通過在多個樹上取平均**,我們之後會介紹。

回歸決策樹

決策樹是處理分類的常用演算法,但它也可以用來處理回歸問題,其關鍵在於選擇最佳分割點,基本思路是 遍歷所有資料,嘗試每個資料作為分割點,並計算此時左右兩側的資料的離差平方和,並從中找到最小值,然後找到離差平方和最小時對應的資料,它就是最佳分割點。sklearn.tree.decisiontreereg...

決策樹 回歸

決策樹常用於分類問題,但是也能解決回歸問題。在回歸問題中,決策樹只能使用cart決策樹,而cart決策樹,既可以分類,也可以回歸。所以我們說的回歸樹就是指cart樹。為什麼只能是cart樹 1.回想下id3,後需要計算每個類別佔總樣本的比例,回歸哪來的類別,c4.5也一樣 2.回歸問題肯定是連續屬性...

決策樹 回歸樹

回歸樹重要介面 交叉驗證 1 如何確定最佳節點和最佳分支 2 決策數什麼時候停止生長 防止過擬合 from sklearn import tree 匯入需要的模組 clf tree.decisiontreeclassifier 例項化 clf clf.fit x train,y train 訓練集資...