CART(分类回归树)分类算法原理

目的

生成一颗决策树,输入X(各种特征条件)输出Y(该样本分类结果)。

一、分类树选择特征的依赖——基尼指数

  • 基尼指数——总体内包含的类别越杂乱,基尼指数就越大

在CART算法中, 基尼不纯度表示一个随机选中的样本在子集中被分错的可能性。

基尼不纯度 = ∑ i = 1 K ( \sum_{i=1}^K( i=1K(样本 i i i被选中的概率 ∗ * 它被分错的概率)

(当一个节点中所有样本都是一个类时,基尼不纯度为零。)

假设y的可能取值有K个,令 p k p_k pk是样本取值为k的概率,
则基尼指数可以通过如下公式计算:

G i n i ( p ) = ∑ i = 1 K p i ( 1 − p i ) = 1 − ∑ i = 1 K p i 2 Gini(p)=\sum_{i=1}^Kp_i(1-p_i)=1-\sum_{i=1}^K{p_i}^2 Gini(p)=i=1Kpi(1pi)=1i=1Kpi2
在选择根节点属性时,计算每一种属性分类后的基尼指数 G i n i Gini Gini,选择 G i n i Gini Gini最小的那种属性作为该节点的分类依据。

二、例子

头发 身高 体重 性别
60
65
70
55
50

要对上表的数据构建一颗决策树,它的特征集合A={头发、身高、体重}

1.当选择{头发}分类时,对应的样本数如下表:

1 2
1 1
Total 2 3

G 长 = 1 − ( 1 2 ) 2 − ( 1 2 ) 2 = 0.5 G_长=1-(\frac{1}{2}){^2} - (\frac{1}{2}){^2} = 0.5 G=1212212=0.5
G 短 = 1 − ( 1 3 ) 2 − ( 2 3 ) 2 = 0.444 G_短={1-}(\frac{1}{3}){^2} - (\frac{2}{3}){^2} = 0.444 G=1312322=0.444
G { 头 发 } = 2 5 ∗ G 长 + 3 5 ∗ G 短 = 0.466 G_{\{头发\}} = \frac{2}{5}*G_长 + \frac{3}{5}*G_短= 0.466 G{}=52G+53G=0.466

(两种值的加权值为该属性的基尼系数)


2.当选择{身高}分类时,有三种值,对应三种分法,

(1)按照中和非中分类如下表:

非中
1 2
1 1
Total 2 3

G 中 = 1 − ( 1 2 ) 2 − ( 1 2 ) 2 = 0.5 G_中={1-}(\frac{1}{2}){^2} - (\frac{1}{2}){^2} = 0.5 G=1212212=0.5
G 非 中 = 1 − ( 1 3 ) 2 − ( 2 3 ) 2 = 0.444 G_{非中}={1-}(\frac{1}{3}){^2} - (\frac{2}{3}){^2} = 0.444 G=1312322=0.444
G { 身 高 − 中 } = 2 5 ∗ G 中 + 3 5 ∗ G 非 中 = 0.466 G_{\{身高-中\}} = \frac{2}{5}*G_中 + \frac{3}{5}*G_{非中}= 0.466 G{}=52G+53G=0.466

(两种值的加权值为该属性的基尼系数)

(2)按照高和非高分类如下表:

非高
2 1
0 2
Total 2 3

G 高 = 1 − ( 2 2 ) 2 − ( 0 2 ) 2 = 0 G_高={1-}(\frac{2}{2}){^2} - (\frac{0}{2}){^2} = 0 G=1222202=0
G 非 高 = 1 − ( 1 3 ) 2 − ( 2 3 ) 2 = 0.444 G_{非高}={1-}(\frac{1}{3}){^2} -( \frac{2}{3}){^2} = 0.444 G=1312322=0.444
G { 身 高 − 高 } = 2 5 ∗ G 高 + 3 5 ∗ G 非 高 = 0.266 G_{\{身高-高\}} = \frac{2}{5}*G_高 + \frac{3}{5}*G_{非高}= 0.266 G{}=52G+53G=0.266

(两种值的加权值为该属性的基尼系数)

(3)按照矮和非矮分类如下表:

非矮
0 3
1 1
Total 1 4

G 矮 = 1 − ( 0 1 ) 2 − ( 1 1 ) 2 = 0 G_矮={1-}(\frac{0}{1}){^2} - (\frac{1}{1}){^2} = 0 G=1102112=0
G 非 矮 = 1 − ( 3 4 ) 2 − ( 1 4 ) 2 = 0.375 G_{非矮}={1-}(\frac{3}{4}){^2} - (\frac{1}{4}){^2} = 0.375 G=1432412=0.375
G { 身 高 − 矮 } = 1 5 ∗ G 矮 + 4 5 ∗ G 非 矮 = 0.3 G_{\{身高-矮\}} = \frac{1}{5}*G_矮 + \frac{4}{5}*G_{非矮}= 0.3 G{}=51G+54G=0.3

(两种值的加权值为该属性的基尼系数)


3.当选择{体重}分类时,由于是连续值,从小到大排列:

性别
体重 50 55 60 65 70
分界点1
<=52.5 >52.5
1 2
0 2
Total 1 4

(1)对于分界点1

G < = 52.5 = 1 − ( 1 1 ) 2 − ( 0 1 ) 2 = 0 G_{<=52.5}={1-}(\frac{1}{1}){^2} - (\frac{0}{1}){^2} = 0 G<=52.5=1112102=0
G > 52.5 = 1 − ( 2 4 ) 2 − ( 2 4 ) 2 = 0.5 G_{>52.5}={1-}(\frac{2}{4}){^2} - (\frac{2}{4}){^2} = 0.5 G>52.5=1422422=0.5
G { 体 重 − 分 界 点 1 } = 1 5 ∗ G < = 52.5 + 4 5 ∗ G > 52.5 = 0.4 G_{\{体重-分界点1\}} = \frac{1}{5}*G_{<=52.5}+ \frac{4}{5}*G_{>52.5}= 0.4 G{1}=51G<=52.5+54G>52.5=0.4

(两种值的加权值为该属性的基尼系数)


性别
体重 50 55 60 65 70
分界点2
<=62.5 >62.5
1 2
2 0
Total 3 2

(2)对于分界点2

G < = 62.5 = 1 − ( 1 3 ) 2 − ( 2 3 ) 2 = 0.444 G_{<=62.5}={1-}(\frac{1}{3}){^2} - (\frac{2}{3}){^2} = 0.444 G<=62.5=1312322=0.444
G > 62.5 = 1 − ( 2 2 ) 2 − ( 0 2 ) 2 = 0 G_{>62.5}={1-}(\frac{2}{2}){^2} - (\frac{0}{2}){^2} = 0 G>62.5=1222202=0
G { 体 重 − 分 界 点 2 } = 3 5 ∗ G < = 62.5 + 2 5 ∗ G > 62.5 = 0.266 G_{\{体重-分界点2\}} = \frac{3}{5}*G_{<=62.5}+ \frac{2}{5}*G_{>62.5}= 0.266 G{2}=53G<=62.5+52G>62.5=0.266

(两种值的加权值为该属性的基尼系数)


4.比较以上各个分类方法基尼指数

G i n i Gini Gini最小的属性为:
G { 身 高 − 高 } = 0.266 G_{\{身高-高\}} = 0.266 G{}=0.266
G { 体 重 − 分 界 点 2 } = 0.266 G_{\{体重-分界点2\}}=0.266 G{2}=0.266
当有基尼指数相同的属性时,选择第一次出现的,
那么根节点就是身高,分为高和非高。

非高
身高=?
男女2:0
男女1:2

5.左分支都是男,不用再分类;现在右分支的数据如下表

头发 体重 性别
60
55
50

身高的属性已经用了,剩下两种属性,分别计算基尼指数:

(1)以{头发}分类

0 1
1 1
Total 1 2

G 长 = 1 − ( 0 1 ) 2 − ( 1 1 ) 2 = 0 G_长={1-}(\frac{0}{1}){^2} - (\frac{1}{1}){^2} = 0 G=1102112=0
G 短 = 1 − ( 1 2 ) 2 − ( 1 2 ) 2 = 0.5 G_{短}={1-}(\frac{1}{2}){^2} -( \frac{1}{2}){^2} = 0.5 G=1212212=0.5
G { 身 高 − 高 } = 1 3 ∗ G 高 + 2 3 ∗ G 非 高 = 0.333 G_{\{身高-高\}} = \frac{1}{3}*G_高 + \frac{2}{3}*G_{非高}= 0.333 G{}=31G+32G=0.333

(两种值的加权值为该属性的基尼系数)

(2)以{体重}分类

性别
体重 50 55 60
分界点1
<=52.5 >52.5
1 0
0 2
Total 1 2

G < = 52.5 = 1 − ( 1 1 ) 2 − ( 0 1 ) 2 = 0 G_{<=52.5}={1-}(\frac{1}{1}){^2} - (\frac{0}{1}){^2} = 0 G<=52.5=1112102=0
G > 52.5 = 1 − ( 0 2 ) 2 − ( 2 2 ) 2 = 0 G_{>52.5}={1-}(\frac{0}{2}){^2} - (\frac{2}{2}){^2} = 0 G>52.5=1202222=0
G { 体 重 − 分 界 点 1 } = 1 3 ∗ G < = 52.5 + 2 3 ∗ G > 52.5 = 0 G_{\{体重-分界点1\}} = \frac{1}{3}*G_{<=52.5}+ \frac{2}{3}*G_{>52.5}= 0 G{1}=31G<=52.5+32G>52.5=0

(两种值的加权值为该属性的基尼系数)


6.选择 G i n i Gini Gini最小的

G i n i Gini Gini最小的属性为:
G { 体 重 − 分 界 点 1 } = 0 G_{\{体重-分界点1\}}=0 G{1}=0
那么此节点选体重,分界点为52.5。

非高
<=52.5
>52.5
身高=?
体重=?

现在每一个叶子节点性别都确定了,不需要再分类
一颗简单的CART树就完成了


三、总结

CART根据基尼系数选择分类属性,进行二叉树分类,不断递归这个过程,直到
(1) 当前结点包含的样本全属于同一类别,无需划分;
(2) 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;


四、扩展——剪枝

剪枝的目的:训练时会尽可能多得生成枝子,往往对训练集分类效果很好,但在验证集分类误差大。为防止过拟合,提高决策树的泛化性,需要修剪一些分支。

剪枝过程:首先将样本分为训练集和验证集。

1)预剪枝
预剪枝要对划分前后,验证集精度进行估计,如精度提高则进行划分。
2)后剪枝
后剪枝先从训练集生成一棵完整决策树,再依次对每个叶枝剪除前后,验证集精度进行评估,如精度提高则剪枝。

后剪枝决策树通常比预剪枝决策树保留了更多的分支。
一般情形下后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。
但后剪枝过程是在生成完全决策树之后进行的
并且要白底向上地对树中的所有非叶结点进行逐一考察,
因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。

你可能感兴趣的:(决策树,算法,决策树,CART,分类,基尼)