輸入:
訓練資料集x,樣本標籤y
輸出:回歸樹f(x)
若d中所有例項屬於同一類c
kc_k
ck,則t為單結點樹,並將類c
kc_k
ck作為該結點的類標記,返回t
對每個特徵feature的每個取值value,將y分為r
1r_1
r1和r
2r_2
r2兩個集合,因為現在還不是真正的split,只是要計算split後的基尼指數,只需要用到split之後的y
y 1(
feat
ure,
valu
e)=y
2(fe
atur
e,va
lue)
=y_1(feature, value) = \ \le value\} \\ y_2(feature, value) = \ \gt value\}
y1(fe
atur
e,va
lue)
=y2
(fea
ture
,val
ue)=
計算y
1y_1
y1和y
2y_2
y2的基尼指數之和 gin
i(p)
=∑kp
k(1−
pk)=
1−∑k
pk
2gini(p) = \sum^k p_k(1-p_k) = 1 - \sum^kp_k^2
gini(p
)=∑k
pk
(1−p
k)=
1−∑k
pk2
選擇基尼指數計算結果最小的(feature, value)作為當前的最優劃分
基於最優劃分生成2個子結點,將資料分配到兩個子結點中
對子結點遞迴呼叫cart演算法
def
gini
(y):
yset =
set(y)
ret, n =
1, y.shape[0]
for yi in yset:
ret -=
(y[y==yi]
.shape[0]
/n)**
2return ret
defcart
(x, y)
:# 若d中所有例項屬於同一類$$c_k$$
iflen
(set
(y))==1
:# 將類$$c_k$$作為該結點的類標記
return y[0]
bestgini = np.inf
# 對每個特徵feature的每個取值value
for feature in
range
(x.shape[1]
):for value in
set(x[
:,feature]):
# 將x分為$$r_1$$和$$r_2$$兩個集合
y1 = y[x[
:,feature]
<= value]
y2 = y[x[
:,feature]
> value]
# 計算$$r_1$$和$$r_2$$的基尼指數之和
sumgini = gini(y1)
+ gini(y2)
# 選擇基尼指數計算結果最小的(feature, value)作為當前的最優劃分
if sumgini < bestgini:
bestfeature, bestvalue, bestgini = feature, value, sumgini
# 基於最優劃分生成2個子結點,將資料分配到兩個子結點中
node =
return node
二叉樹剪枝 決策樹,生成剪枝,CART演算法
決策樹 1.原理 1.1模型簡介 決策樹是一種基本的回歸和分類演算法。在分類問題中,可以認為是一系列 if then 規則的幾何。決策樹學通常包括三個步驟 特徵選擇,決策樹的生成,決策樹的修剪。定義 決策樹由結點和有向邊組成,內部節點表示乙個特徵和屬性,葉子 結點表示乙個類。性質 決策樹路徑 或者對...
分類回歸樹 CART 的快速理解
回歸樹 回歸樹是乙個回歸模型,模型具有二叉樹結構。實際思想就是將特徵空間劃分為若干個子空間,並計算每個子空間內樣本標註的均值。時,只需判斷樣本落入哪個子空間,其對應的子空間標註均值即是其 值。如何劃分特徵空間?以連續性特徵空間為例,要選擇合適的特徵維度和合適的劃分點。具體方法就是遍歷所有的特徵維度和...
決策樹CART的python實現
cart演算法只做二元切分,因此每個樹節點包含待切分的特徵,待切分的特徵值,左子樹,右子樹。import numpy as np class treenode object def init self,feat,val,right,left featuretospliton feat valueof...