您的位置:首页 > 其它

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

2020-02-13 23:14 411 查看

目的

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

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

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

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

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

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

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

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

二、例子

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

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

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

1 2
1 1
Total 2 3

G长=1−(12)2−(12)2=0.5G_长=1-(\frac{1}{2}){^2} - (\frac{1}{2}){^2} = 0.5G长​=1−(21​)2−(21​)2=0.5
G短=1−(13)2−(23)2=0.444G_短={1-}(\frac{1}{3}){^2} - (\frac{2}{3}){^2} = 0.444G短​=1−(31​)2−(32​)2=0.444
G{头发}=25∗G长+35∗G短=0.466G_{\{头发\}} = \frac{2}{5}*G_长 + \frac{3}{5}*G_短= 0.466G{头发}​=52​∗G长​+53​∗G短​=0.466

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

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

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

非中
1 2
1 1
Total 2 3

G中=1−(12)2−(12)2=0.5G_中={1-}(\frac{1}{2}){^2} - (\frac{1}{2}){^2} = 0.5G中​=1−(21​)2−(21​)2=0.5
G非中=1−(13)2−(23)2=0.444G_{非中}={1-}(\frac{1}{3}){^2} - (\frac{2}{3}){^2} = 0.444G非中​=1−(31​)2−(32​)2=0.444
G{身高−中}=25∗G中+35∗G非中=0.466G_{\{身高-中\}} = \frac{2}{5}*G_中 + \frac{3}{5}*G_{非中}= 0.466G{身高−中}​=52​∗G中​+53​∗G非中​=0.466

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

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

非高
2 1
0 2
Total 2 3

G高=1−(22)2−(02)2=0G_高={1-}(\frac{2}{2}){^2} - (\frac{0}{2}){^2} = 0G高​=1−(22​)2−(20​)2=0
G非高=1−(13)2−(23)2=0.444G_{非高}={1-}(\frac{1}{3}){^2} -( \frac{2}{3}){^2} = 0.444G非高​=1−(31​)2−(32​)2=0.444
G{身高−高}=25∗G高+35∗G非高=0.266G_{\{身高-高\}} = \frac{2}{5}*G_高 + \frac{3}{5}*G_{非高}= 0.266G{身高−高}​=52​∗G高​+53​∗G非高​=0.266

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

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

非矮
0 3
1 1
Total 1 4

G矮=1−(01)2−(11)2=0G_矮={1-}(\frac{0}{1}){^2} - (\frac{1}{1}){^2} = 0G矮​=1−(10​)2−(11​)2=0
G非矮=1−(34)2−(14)2=0.375G_{非矮}={1-}(\frac{3}{4}){^2} - (\frac{1}{4}){^2} = 0.375G非矮​=1−(43​)2−(41​)2=0.375
G{身高−矮}=15∗G矮+45∗G非矮=0.3G_{\{身高-矮\}} = \frac{1}{5}*G_矮 + \frac{4}{5}*G_{非矮}= 0.3G{身高−矮}​=51​∗G矮​+54​∗G非矮​=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−(11)2−(01)2=0G_{<=52.5}={1-}(\frac{1}{1}){^2} - (\frac{0}{1}){^2} = 0G<=52.5​=1−(11​)2−(10​)2=0
G>52.5=1−(24)2−(24)2=0.5G_{>52.5}={1-}(\frac{2}{4}){^2} - (\frac{2}{4}){^2} = 0.5G>52.5​=1−(42​)2−(42​)2=0.5
G{体重−分界点1}=15∗G<=52.5+45∗G>52.5=0.4G_{\{体重-分界点1\}} = \frac{1}{5}*G_{<=52.5}+ \frac{4}{5}*G_{>52.5}= 0.4G{体重−分界点1}​=51​∗G<=52.5​+54​∗G>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−(13)2−(23)2=0.444G_{<=62.5}={1-}(\frac{1}{3}){^2} - (\frac{2}{3}){^2} = 0.444G<=62.5​=1−(31​)2−(32​)2=0.444
G>62.5=1−(22)2−(02)2=0G_{>62.5}={1-}(\frac{2}{2}){^2} - (\frac{0}{2}){^2} = 0G>62.5​=1−(22​)2−(20​)2=0
G{体重−分界点2}=35∗G<=62.5+25∗G>62.5=0.266G_{\{体重-分界点2\}} = \frac{3}{5}*G_{<=62.5}+ \frac{2}{5}*G_{>62.5}= 0.266G{体重−分界点2}​=53​∗G<=62.5​+52​∗G>62.5​=0.266

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

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

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

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

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

头发 体重 性别
60
55
50

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

(1)以{头发}分类

0 1
1 1
Total 1 2

G长=1−(01)2−(11)2=0G_长={1-}(\frac{0}{1}){^2} - (\frac{1}{1}){^2} = 0G长​=1−(10​)2−(11​)2=0
G短=1−(12)2−(12)2=0.5G_{短}={1-}(\frac{1}{2}){^2} -( \frac{1}{2}){^2} = 0.5G短​=1−(21​)2−(21​)2=0.5
G{身高−高}=13∗G高+23∗G非高=0.333G_{\{身高-高\}} = \frac{1}{3}*G_高 + \frac{2}{3}*G_{非高}= 0.333G{身高−高}​=31​∗G高​+32​∗G非高​=0.333

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

(2)以{体重}分类

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

G<=52.5=1−(11)2−(01)2=0G_{<=52.5}={1-}(\frac{1}{1}){^2} - (\frac{0}{1}){^2} = 0G<=52.5​=1−(11​)2−(10​)2=0
G>52.5=1−(02)2−(22)2=0G_{>52.5}={1-}(\frac{0}{2}){^2} - (\frac{2}{2}){^2} = 0G>52.5​=1−(20​)2−(22​)2=0
G{体重−分界点1}=13∗G<=52.5+23∗G>52.5=0G_{\{体重-分界点1\}} = \frac{1}{3}*G_{<=52.5}+ \frac{2}{3}*G_{>52.5}= 0G{体重−分界点1}​=31​∗G<=52.5​+32​∗G>52.5​=0

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

6.选择GiniGiniGini最小的

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

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

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

三、总结

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

四、扩展——剪枝

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

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

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

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

  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
Subin_ 发布了5 篇原创文章 · 获赞 3 · 访问量 780 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: