我们前面讲了两种决策树算法
I
D
3
ID3
ID3和
C
4.5
C4.5
C4.5,还有一种比较经典的决策树算法就是
C
A
R
T
CART
CART,也叫分类回归树算法,它是一种二分递归分割算法,把当前样本划分为两个子样本,使得生成的每个非叶子结点都有两个分支,因此CART算法生成的决策树是结构简洁的二叉树。由于
C
A
R
T
CART
CART算法构成的是一个二叉树,因此它在每一步的决策时只能用是或者否,不管一个特征有多少个取值,它也是把数据分为两部分。
当
C
A
R
T
CART
CART是分类树时,采用
G
I
N
I
GINI
GINI值作为节点分裂的依据;当
C
A
R
T
CART
CART是回归树时,采用样本的最小方差作为节点分裂的依据。
节点
A
A
A的不纯度
G
I
N
I
GINI
GINI通常表示为:
G
i
n
i
(
A
)
=
1
−
∑
i
=
1
C
p
i
2
Gini(A) = 1 - \sum\limits_{i = 1}^C {p_i^2}
Gini(A)=1−i=1∑Cpi2 其中
p
i
p_i
pi表示属于
i
i
i类的概率。而
G
I
N
I
GINI
GINI值越大,代表节点越不纯。当
G
i
n
i
(
A
)
=
0
Gini(A)=0
Gini(A)=0时,所有样本属于同类。
方差
σ
{\sigma _{}}
σ通常表示为:
σ
=
∑
i
=
1
I
(
x
i
−
u
)
2
=
∑
i
=
1
I
x
i
2
−
n
u
2
\sigma = \sqrt {\sum\limits_{i = 1}^I {{{({x_i} - u)}^2}} } = \sqrt {\sum\limits_{i = 1}^I {x_i^2 - n{u^2}} }
σ=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 |
在上面的列表中有四个属性
o
u
t
l
o
o
k
outlook
outlook,
t
e
m
tem
tem,
h
u
m
hum
hum,
w
i
n
d
y
windy
windy。
p
l
a
y
play
play为分类的结果。下面我们就根据
o
u
t
l
o
o
k
outlook
outlook来预测
p
l
a
y
play
play情况。
当特征为
o
u
t
l
o
o
k
outlook
outlook时,有三个属性
r
a
i
n
rain
rain、
o
v
e
r
c
a
s
t
overcast
overcast、
s
u
n
n
y
sunny
sunny,其中属性为
r
a
i
n
rain
rain时,
y
e
s
yes
yes的结果有1个,
n
o
no
no的结果有7个。属性为
o
v
e
r
c
a
s
t
overcast
overcast时,
y
e
s
yes
yes的结果有4个,
n
o
no
no的结果有5个。属性为
s
u
n
n
y
sunny
sunny时,
y
e
s
yes
yes的结果有7个,
n
o
no
no的结果有0个。对
o
u
t
l
o
o
k
outlook
outlook有三种属性,那么它的取值也就有三种,每种的
G
I
N
I
GINI
GINI指数和方差
σ
{\sigma _{}}
σ计算如下:
(1):
rain或overcast | sunny | |
---|---|---|
yes | 5 | 7 |
no | 12 | 0 |
分类预测
p
l
a
y
play
play:
G
i
n
i
(
r
a
i
n
∣
o
v
e
r
c
a
s
t
)
=
1
−
(
5
17
)
2
−
(
12
17
)
2
=
0.4152
Gini(rain|overcast) = 1 - {(\frac{5}{{17}})^2} - {(\frac{{12}}{{17}})^2} = 0.4152
Gini(rain∣overcast)=1−(175)2−(1712)2=0.4152
G
i
n
i
(
s
u
n
n
y
)
=
1
−
(
7
7
)
2
=
0
Gini(sunny) = 1 - {(\frac{7}{7})^2} = 0
Gini(sunny)=1−(77)2=0
G
i
n
i
(
p
l
a
y
)
=
17
24
∗
Gini(rain|overcast)
+
7
24
Gini(sunny)
=
0.2941
Gini(play) = \frac{{17}}{{24}}*{\text{Gini(rain|overcast)}} + \frac{7}{{24}}{\text{Gini(sunny) }} = 0.2941
Gini(play)=2417∗Gini(rain|overcast)+247Gini(sunny) =0.2941
回归预测
a
g
e
age
age:
G
a
i
n
(
a
g
e
)
=
18
2
+
22
2
+
.
.
.
+
36
2
+
27
2
−
17
∗
26.47
2
+
24
2
+
20
2
+
.
.
.
+
35
2
+
30
2
−
7
∗
27.29
2
=
43.8
Gain(age) = \sqrt {{{18}^2} + {{22}^2} + ... + {{36}^2} + {{27}^2} - 17*{{26.47}^2}} + \sqrt {{{24}^2} + {{20}^2} +...+ {{35}^2} + {{30}^2} - 7*{{27.29}^2}} = 43.8
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 |
分类预测
p
l
a
y
play
play:
G
i
n
i
(
r
a
i
n
∣
s
u
n
n
y
)
=
1
−
(
8
15
)
2
−
(
7
15
)
2
=
0.4978
Gini(rain|sunny) = 1 - {(\frac{8}{{15}})^2} - {(\frac{7}{{15}})^2} = 0.4978
Gini(rain∣sunny)=1−(158)2−(157)2=0.4978
G
i
n
i
(
o
v
e
r
c
a
s
t
)
=
1
−
(
4
9
)
2
−
(
5
9
)
2
=
0.4938
Gini(overcast) = 1 - {(\frac{4}{9})^2} - {(\frac{5}{9})^2} = 0.4938
Gini(overcast)=1−(94)2−(95)2=0.4938
G
i
n
i
(
p
l
a
y
)
=
15
24
∗
G
i
n
i
(
o
v
e
r
c
a
s
t
)
+
9
24
∗
G
i
n
i
(
rain|sunny
)
=
0.4963
Gini(play) = \frac{{15}}{{24}}*Gini(overcast) + \frac{9}{{24}}*Gini({\text{rain|sunny}}) = 0.4963
Gini(play)=2415∗Gini(overcast)+249∗Gini(rain|sunny)=0.4963
回归预测
a
g
e
age
age:
回归计算跟上面一样,这里数据有点多,所以我就不在此一一计算了,各位看官如果感兴趣,就自己动手计算一下了。
(3):
sunny或overcast | rainy | |
---|---|---|
yes | 11 | 1 |
no | 5 | 7 |
分类预测
p
l
a
y
play
play:
G
i
n
i
(
s
u
n
n
y
∣
o
v
e
r
c
a
s
t
)
=
1
−
(
11
16
)
2
−
(
5
16
)
2
=
0.4297
Gini(sunny|overcast) = 1 - {(\frac{{11}}{{16}})^2} - {(\frac{5}{{16}})^2} = 0.4297
Gini(sunny∣overcast)=1−(1611)2−(165)2=0.4297
G
i
n
i
(
r
a
i
n
y
)
=
1
−
(
1
8
)
2
−
(
7
8
)
2
=
0.2188
Gini(rainy) = 1 - {(\frac{1}{8})^2} - {(\frac{7}{8})^2} = 0.2188
Gini(rainy)=1−(81)2−(87)2=0.2188
G
i
n
i
(
p
l
a
y
)
=
16
24
∗
G
a
i
n
(
r
a
i
n
y
)
+
8
24
∗
G
a
i
n
(
sunny|overcast
)
=
0.3594
Gini(play) = \frac{{16}}{{24}}*Gain(rainy) + \frac{8}{{24}}*Gain({\text{sunny|overcast}}) = 0.3594
Gini(play)=2416∗Gain(rainy)+248∗Gain(sunny|overcast)=0.3594
回归预测
a
g
e
age
age:
同上,这里数据有点多,我就不一一计算了,各位看官如果感兴趣,就自己动手计算一下了。
如果要预测是否
p
l
a
y
play
play,从上面三种划分计算出的
G
i
n
i
(
p
l
a
y
)
Gini(play)
Gini(play)值,可以算出 {
r
a
i
n
∣
o
v
e
r
c
a
s
t
,
s
u
n
n
y
{rain|overcast,sunny}
rain∣overcast,sunny} 的
G
i
n
i
(
p
l
a
y
)
Gini(play)
Gini(play)值最小,所以为最优划分。
其他特征预测也是跟上面一样,这里也不一一介绍了,以上就是个人对
C
A
R
T
CART
CART算法的理解,欢迎大家一起来讨论。