生成一颗决策树,输入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=1∑Kpi(1−pi)=1−i=1∑Kpi2
在选择根节点属性时,计算每一种属性分类后的基尼指数 G i n i Gini Gini,选择 G i n i Gini Gini最小的那种属性作为该节点的分类依据。
头发 | 身高 | 体重 | 性别 |
---|---|---|---|
长 | 中 | 60 | 女 |
短 | 高 | 65 | 男 |
长 | 高 | 70 | 男 |
短 | 矮 | 55 | 女 |
短 | 中 | 50 | 男 |
要对上表的数据构建一颗决策树,它的特征集合A={头发、身高、体重}
长 | 短 | |
---|---|---|
男 | 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长=1−(21)2−(21)2=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短=1−(31)2−(32)2=0.444
G { 头 发 } = 2 5 ∗ G 长 + 3 5 ∗ G 短 = 0.466 G_{\{头发\}} = \frac{2}{5}*G_长 + \frac{3}{5}*G_短= 0.466 G{头发}=52∗G长+53∗G短=0.466
中 | 非中 | |
---|---|---|
男 | 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中=1−(21)2−(21)2=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非中=1−(31)2−(32)2=0.444
G { 身 高 − 中 } = 2 5 ∗ G 中 + 3 5 ∗ G 非 中 = 0.466 G_{\{身高-中\}} = \frac{2}{5}*G_中 + \frac{3}{5}*G_{非中}= 0.466 G{身高−中}=52∗G中+53∗G非中=0.466
高 | 非高 | |
---|---|---|
男 | 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高=1−(22)2−(20)2=0
G 非 高 = 1 − ( 1 3 ) 2 − ( 2 3 ) 2 = 0.444 G_{非高}={1-}(\frac{1}{3}){^2} -( \frac{2}{3}){^2} = 0.444 G非高=1−(31)2−(32)2=0.444
G { 身 高 − 高 } = 2 5 ∗ G 高 + 3 5 ∗ G 非 高 = 0.266 G_{\{身高-高\}} = \frac{2}{5}*G_高 + \frac{3}{5}*G_{非高}= 0.266 G{身高−高}=52∗G高+53∗G非高=0.266
矮 | 非矮 | |
---|---|---|
男 | 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矮=1−(10)2−(11)2=0
G 非 矮 = 1 − ( 3 4 ) 2 − ( 1 4 ) 2 = 0.375 G_{非矮}={1-}(\frac{3}{4}){^2} - (\frac{1}{4}){^2} = 0.375 G非矮=1−(43)2−(41)2=0.375
G { 身 高 − 矮 } = 1 5 ∗ G 矮 + 4 5 ∗ G 非 矮 = 0.3 G_{\{身高-矮\}} = \frac{1}{5}*G_矮 + \frac{4}{5}*G_{非矮}= 0.3 G{身高−矮}=51∗G矮+54∗G非矮=0.3
性别 | 男 | 女 | 女 | 男 | 男 |
---|---|---|---|---|---|
体重 | 50 | 55 | 60 | 65 | 70 |
分界点1 | |||||
<=52.5 | >52.5 | ||||
男 | 1 | 2 | |||
女 | 0 | 2 | |||
Total | 1 | 4 |
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=1−(11)2−(10)2=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=1−(42)2−(42)2=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}=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 |
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=1−(31)2−(32)2=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=1−(22)2−(20)2=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}=53∗G<=62.5+52∗G>62.5=0.266
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
当有基尼指数相同的属性时,选择第一次出现的,
那么根节点就是身高,分为高和非高。
头发 | 体重 | 性别 |
---|---|---|
长 | 60 | 女 |
短 | 55 | 女 |
短 | 50 | 男 |
身高的属性已经用了,剩下两种属性,分别计算基尼指数:
长 | 短 | |
---|---|---|
男 | 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长=1−(10)2−(11)2=0
G 短 = 1 − ( 1 2 ) 2 − ( 1 2 ) 2 = 0.5 G_{短}={1-}(\frac{1}{2}){^2} -( \frac{1}{2}){^2} = 0.5 G短=1−(21)2−(21)2=0.5
G { 身 高 − 高 } = 1 3 ∗ G 高 + 2 3 ∗ G 非 高 = 0.333 G_{\{身高-高\}} = \frac{1}{3}*G_高 + \frac{2}{3}*G_{非高}= 0.333 G{身高−高}=31∗G高+32∗G非高=0.333
性别 | 男 | 女 | 女 |
---|---|---|---|
体重 | 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=1−(11)2−(10)2=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=1−(20)2−(22)2=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}=31∗G<=52.5+32∗G>52.5=0
G i n i Gini Gini最小的属性为:
G { 体 重 − 分 界 点 1 } = 0 G_{\{体重-分界点1\}}=0 G{体重−分界点1}=0
那么此节点选体重,分界点为52.5。
现在每一个叶子节点性别都确定了,不需要再分类
一颗简单的CART树就完成了
CART根据基尼系数选择分类属性,进行二叉树分类,不断递归这个过程,直到
(1) 当前结点包含的样本全属于同一类别,无需划分;
(2) 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;
剪枝的目的:训练时会尽可能多得生成枝子,往往对训练集分类效果很好,但在验证集分类误差大。为防止过拟合,提高决策树的泛化性,需要修剪一些分支。
剪枝过程:首先将样本分为训练集和验证集。
1)预剪枝
预剪枝要对划分前后,验证集精度进行估计,如精度提高则进行划分。
2)后剪枝
后剪枝先从训练集生成一棵完整决策树,再依次对每个叶枝剪除前后,验证集精度进行评估,如精度提高则剪枝。
后剪枝决策树通常比预剪枝决策树保留了更多的分支。
一般情形下后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。
但后剪枝过程是在生成完全决策树之后进行的
并且要白底向上地对树中的所有非叶结点进行逐一考察,
因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。