CART(分类回归树)分类算法原理
目的
生成一颗决策树,输入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∑Kpi(1−pi)=1−i=1∑Kpi2
在选择根节点属性时,计算每一种属性分类后的基尼指数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
当有基尼指数相同的属性时,选择第一次出现的,
那么根节点就是身高,分为高和非高。
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。
现在每一个叶子节点性别都确定了,不需要再分类
一颗简单的CART树就完成了
三、总结
CART根据基尼系数选择分类属性,进行二叉树分类,不断递归这个过程,直到
(1) 当前结点包含的样本全属于同一类别,无需划分;
(2) 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;
四、扩展——剪枝
剪枝的目的:训练时会尽可能多得生成枝子,往往对训练集分类效果很好,但在验证集分类误差大。为防止过拟合,提高决策树的泛化性,需要修剪一些分支。
剪枝过程:首先将样本分为训练集和验证集。
1)预剪枝
预剪枝要对划分前后,验证集精度进行估计,如精度提高则进行划分。
2)后剪枝
后剪枝先从训练集生成一棵完整决策树,再依次对每个叶枝剪除前后,验证集精度进行评估,如精度提高则剪枝。
后剪枝决策树通常比预剪枝决策树保留了更多的分支。
一般情形下后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。
但后剪枝过程是在生成完全决策树之后进行的
并且要白底向上地对树中的所有非叶结点进行逐一考察,
因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。
- 点赞 1
- 收藏
- 分享
- 文章举报
- 数据挖掘十大经典算法(10) CART: 分类与回归树
- CART分类与回归树的原理与实现
- 数据挖掘十大经典算法(10) CART: 分类与回归树
- CART分类决策树、回归树和模型树算法详解及Python实现
- CART分类与回归树的原理与实现
- 数据挖掘十大经典算法--CART: 分类与回归树
- Logistic回归分类算法原理分析与代码实现
- 连续值的CART(分类回归树)原理和实现
- 数据挖掘10大算法(8)--CART: 分类与回归树
- cart(分类与回归树)原理与实现
- 数据挖掘十大经典算法(10) CART: 分类与回归树
- Cart文本分类算法原理和例子
- 利用CART算法建立分类回归树
- 机器学习经典算法详解及Python实现--CART分类决策树、回归树和模型树
- 连续值的CART(分类回归树)原理和实现
- 数据挖掘经典算法--CART算法分类和回归树
- 分类算法系列2----逻辑回归Logistic原理和Python实现
- 机器学习经典算法详解及Python实现--CART分类决策树、回归树和模型树
- Ng机器学习系列补充:2、分类和回归树算法CART
- 对于分类与回归树CART的学习(一)-------原理