我们前面讲了两种决策树算法
ID3和
C4.5,还有一种比较经典的决策树算法就是
CART,也叫分类回归树算法,它是一种二分递归分割算法,把当前样本划分为两个子样本,使得生成的每个非叶子结点都有两个分支,因此CART算法生成的决策树是结构简洁的二叉树。由于
CART算法构成的是一个二叉树,因此它在每一步的决策时只能用是或者否,不管一个特征有多少个取值,它也是把数据分为两部分。
当
CART是分类树时,采用
GINI值作为节点分裂的依据;当
CART是回归树时,采用样本的最小方差作为节点分裂的依据。
节点
A的不纯度
GINI通常表示为:
Gini(A)=1−i=1∑Cpi2 其中
pi表示属于
i类的概率。而
GINI值越大,代表节点越不纯。当
Gini(A)=0时,所有样本属于同类。
方差
σ通常表示为:
σ=i=1∑I(xi−u)2
=i=1∑Ixi2−nu2
方差越大,表示该节点的数据越分散,预测的效果就越差。如果一个节点的所有数据都相同,那么方差就为0。
- 实例分析
这里还是用我们前面的例子来做分析,因为之前的数据都是离散的,所以这里我们随机加了一组连续的数据预测回归,数据都是自己编的,不要在意符不符合实际:
outlook |
tem |
hum |
windy |
play |
age |
overcast |
hot |
high |
not |
no |
18 |
overcast |
hot |
high |
very |
no |
22 |
overcast |
hot |
high |
medium |
no |
16 |
sunny |
hot |
high |
not |
yes |
24 |
sunny |
hot |
high |
medium |
yes |
20 |
rain |
mild |
high |
not |
no |
16 |
rain |
mild |
high |
medium |
no |
19 |
rain |
hot |
normal |
not |
yes |
25 |
rain |
cool |
normal |
medium |
no |
30 |
rain |
hot |
normal |
very |
no |
28 |
sunny |
cool |
normal |
very |
yes |
22 |
sunny |
cool |
normal |
medium |
yes |
24 |
overcast |
mild |
high |
not |
no |
24 |
overcast |
mild |
high |
medium |
no |
35 |
overcast |
cool |
normal |
not |
yes |
40 |
overcast |
cool |
normal |
medium |
yes |
28 |
rain |
mild |
normal |
not |
no |
26 |
rain |
mild |
normal |
medium |
no |
34 |
overcast |
mild |
normal |
medium |
yes |
36 |
overcast |
hot |
normal |
very |
yes |
27 |
sunny |
mild |
high |
very |
yes |
36 |
sunny |
mild |
high |
medium |
yes |
35 |
sunny |
hot |
normal |
not |
yes |
30 |
rain |
mild |
high |
very |
no |
26 |
在上面的列表中有四个属性
outlook,
tem,
hum,
windy。
play为分类的结果。下面我们就根据
outlook来预测
play情况。
当特征为
outlook时,有三个属性
rain、
overcast、
sunny,其中属性为
rain时,
yes的结果有1个,
no的结果有7个。属性为
overcast时,
yes的结果有4个,
no的结果有5个。属性为
sunny时,
yes的结果有7个,
no的结果有0个。对
outlook有三种属性,那么它的取值也就有三种,每种的
GINI指数和方差
σ计算如下:
(1):
|
rain或overcast |
sunny |
yes |
5 |
7 |
no |
12 |
0 |
分类预测
play:
Gini(rain∣overcast)=1−(175)2−(1712)2=0.4152
Gini(sunny)=1−(77)2=0
Gini(play)=2417∗Gini(rain|overcast)+247Gini(sunny) =0.2941
回归预测
age:
Gain(age)=182+222+...+362+272−17∗26.472
+242+202+...+352+302−7∗27.292
=43.8
(2):
|
rain或sunny |
overcast |
yes |
8 |
4 |
no |
7 |
5 |
分类预测
play:
Gini(rain∣sunny)=1−(158)2−(157)2=0.4978
Gini(overcast)=1−(94)2−(95)2=0.4938
Gini(play)=2415∗Gini(overcast)+249∗Gini(rain|sunny)=0.4963
回归预测
age:
回归计算跟上面一样,这里数据有点多,所以我就不在此一一计算了,各位看官如果感兴趣,就自己动手计算一下了。
(3):
|
sunny或overcast |
rainy |
yes |
11 |
1 |
no |
5 |
7 |
分类预测
play:
Gini(sunny∣overcast)=1−(1611)2−(165)2=0.4297
Gini(rainy)=1−(81)2−(87)2=0.2188
Gini(play)=2416∗Gain(rainy)+248∗Gain(sunny|overcast)=0.3594
回归预测
age:
同上,这里数据有点多,我就不一一计算了,各位看官如果感兴趣,就自己动手计算一下了。
如果要预测是否
play,从上面三种划分计算出的
Gini(play)值,可以算出 {
rain∣overcast,sunny} 的
Gini(play)值最小,所以为最优划分。
其他特征预测也是跟上面一样,这里也不一一介绍了,以上就是个人对
CART算法的理解,欢迎大家一起来讨论。