決策樹系列(三):CART(分類迴歸樹)-詳細原理解析

1 CART,又名分類迴歸樹

有以下特點:

(1)CART是一棵二叉樹;
(2)CART既能是分類樹,又能是迴歸樹,由目標任務決定;
(3)當CART是分類樹時,採用GINI值作爲結點分裂的依據;當CART是迴歸樹時,採用MSE(均方誤差)作爲結點分裂的依據;

2 分類樹和迴歸樹的區別?

針對分類任務,就是分類樹;針對迴歸任務,就是迴歸樹。
分類任務:預測目標是離散值,例如預測該用戶是否會逾期,逾期是一類,用1表示,不逾期是另一類,用0表示。分類樹採用GINI值作爲結點分裂的依據;
迴歸任務:預測目標是連續值,例如預測用戶的身高。迴歸樹採用MSE(均方誤差)作爲結點分裂的依據。

下面以迴歸樹爲例,詳細寫一下樹的分裂和生成過程。

3 迴歸樹算法詳解

迴歸樹的算法詳解,其實就是迴歸樹的生成過程,說的是一回事兒。

  • 樣本集:Samples = {s_1, s_2, …, s_N},有N個樣本
  • 特徵集:Features = {f_1, f_2, … , f_M},每一個樣本對應一組特徵
  • 目標值/真實值 集合:T = {t_1, t_2, …, t_N},每一個樣本對應一個目標值,對於迴歸任務來說,每一個目標值都是一個具有連續值屬性的數值。

3.1 步驟如下

1、原始數據集S,此時樹的深度depth=0。
2、針對集合S,遍歷每一個feature的每一個value,用該value將原數據集S分裂成2個集合:左集合S_left(<=value的樣本)、右集合S_right(>value的樣本),每一個集合也叫做一個結點。分別計算這2個集合的mse,找到使得(left_mse+right_mse)最小的那個value,記錄下此時的feature名稱和value,這個就是最佳分割特徵以及最佳分割值;
每一個集合/結點mse的計算方法如下:

1、mean = sum(該集合內每一個樣本的目標值) / 該集合內樣本總數。(ps:這個mean就是該結點的值,也就是落在該結點內的樣本的預測值,同一個結點中的樣本具有同一個預測值。)
2、mse = sum((該集合內每一個樣本的目標值 - mean)^2 )

爲什麼要用均方差mse來作爲分裂的依據呢?

只要是能衡量預測值和真實值/目標值之間的差距的數學公式,都可以用,例如信息增益、信息增益比、基尼係數等等。但是均方差有更好的好處:一階導數和二階導數可求並好求。

3、找到最佳分割feature以及最佳分割value之後,用該value將集合S分裂成2個集合:左集合S_left、右集合S_right,每一個集合也叫做一個結點。此時樹的深度depth += 1。
4、針對集合S_left、S_right分別重複步驟2,3,直到達到終止條件。

終止條件有:
1、特徵已經用完了:沒有可供使用的特徵再進行分裂了,則樹停止分裂;
2、子結點中的樣本已經都是同一類:此時,樣本已經全部被劃分出來了,不用再進行區分,該結點停止分裂(不過一般很難達到,達到的話,該樹肯定過擬合);
3、子節點中沒有樣本了:此時該結點已經沒有樣本可供劃分,該結點停止分裂;
很多算法中還有以下終止條件,爲了防止過擬合:
1、樹達到了最大深度:depth >= max_depth,樹停止分裂。
2、結點的樣本數量達到了閾值:如果一個集合(結點)的樣本數量 < min_samples_leaf,則樹停止分裂;
其中,max_depth和min_samples_leaf都是人爲制定的超參數。

5、最後生成的、不再進行分裂的集合就叫做葉子結點。落在該葉子節點內的樣本的預測值,就是該葉子結點的值。同一個葉子結點中的樣本具有同一個預測值。

葉子結點值的計算方法:不是簡單的均值了
1、sum1 = sum(該葉子節點內每一個樣本的目標值)
2、sum2 = sum( abs(該葉子結點內每一個樣本的目標值)* (2 - abs(每一個樣本的目標值)) )
3、leaf_value = sum1 / sum2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章