1.分类与回归树简介
分类与回归树的英文是Classfication And Regression Tree,缩写为CART。CART算法采用二分递归分割的技术将当前样本集分为两个子样本集,使得生成的每个非叶子节点都有两个分支。非叶子节点的特征取值为True和False,左分支取值为True,右分支取值为False,因此CART算法生成的决策树是结构简洁的二叉树。CART可以处理连续型变量和离散型变量,利用训练数据递归的划分特征空间进行建树,用验证数据进行剪枝。
- 如果待预测分类是离散型数据,则CART生成分类决策树。
- 如果待预测分类是连续性数据,则CART生成回归决策树。
2.CART分类树
2.1算法详解
CART分类树预测分类离散型数据,采用基尼指数选择最优特征,同时决定该特征的最优二值切分点。分类过程中,假设有K个类,样本点属于第k个类的概率为Pk,则概率分布的基尼指数定义为
G i n i ( p ) = ∑ k = 1 m p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p)=\sum_{k=1}^{m}p_k(1-p_k)=1-\sum_{k=1}^{K}p_{k}^{2} Gini(p)=k=1∑mpk(1−pk)=1−k=1∑Kpk2
根据基尼指数定义,可以得到样本集合D的基尼指数,其中Ck表示数据集D中属于第k类的样本子集。
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D)=1-\sum_{k=1}^{K}\left(\frac{|C_k|}{|D|} \right)^2 Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
如果数据集D根据特征A在某一取值a上进行分割,得到D1,D2两部分后,那么在特征A下集合D的基尼系数如下所示。其中基尼系数Gini(D)表示集合D的不确定性,基尼系数Gini(D,A)表示A=a分割后集合D的不确定性。基尼指数越大,样本集合的不确定性越大。
G a i n _ G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 1 ∣ ∣ D ∣ G i n i ( D 2 ) Gain\_Gini(D,A)=\frac{|D1|}{|D|}Gini(D_1)+\frac{|D1|}{|D|}Gini(D_2) Gain_Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D1∣Gini(D2)
对于属性A,分别计算任意属性值将数据集划分为两部分之后的Gain_Gini,选取其中的最小值,作为属性A得到的最优二分方案。然后对于训练集S,计算所有属性的最优二分方案,选取其中的最小值,作为样本及S的最优二分方案。
min i ϵ A ( G a i n _ G i n i ( D , A ) ) \min_{i\epsilon A}(Gain\_Gini(D,A)) iϵAmin(Gain_Gini(D,A))
min A ϵ A t t r i b u t e ( min i ϵ A ( G a i n _ G i n i ( D , A ) ) ) \min_{A\epsilon Attribute}(\min_{i\epsilon A}(Gain\_Gini(D,A))) AϵAttributemin(iϵAmin(Gain_Gini(D,A)))
2.1实例详解
名称 | 体温 | 胎生 | 水生 | 类标记 |
---|---|---|---|---|
人 | 恒温 | 是 | 否 | 哺乳类 |
巨蟒 | 冷血 | 否 | 否 | 爬行类 |
鲑鱼 | 冷血 | 否 | 是 | 鱼类 |
鲸 | 恒温 | 是 | 是 | 哺乳类 |
蛙 | 冷血 | 否 | 有时 | 鱼类 |
巨蜥 | 冷血 | 否 | 否 | 爬行类 |
蝙蝠 | 恒温 | 是 | 否 | 哺乳类 |
猫 | 恒温 | 是 | 否 | 哺乳类 |
豹纹鲨 | 冷血 | 是 | 是 | 鱼类 |
海龟 | 冷血 | 否 | 有时 | 爬行类 |
豪猪 | 恒温 | 是 | 否 | 哺乳类 |
鳗 | 冷血 | 否 | 是 | 鱼类 |
蝾螈 | 冷血 | 否 | 有时 | 两栖类 |
针对上述离散型数据,按照体温为恒温和非恒温进行划分。其中恒温时包括哺乳类5个、鸟类2个,非恒温时包括爬行类3个、鱼类3个、两栖类2个,如下所示我们计算D1,D2的基尼指数。
G i n i ( D 1 ) = 1 − [ ( 5 7 ) 2 + ( 2 7 ) 2 ] = 20 49 Gini(D_1)=1-[ (\frac{5}{7})^2+(\frac{2}{7})^2]=\frac{20}{49} Gini(D1)=1−[(75)2+(72)2]=4920
G i n i ( D 2 ) = 1 − [ ( 3 8 ) 2 + ( 3 8 ) 2 + ( 2 8 ) 2 ] = 42 64 Gini(D_2)=1-[ (\frac{3}{8})^2+(\frac{3}{8})^2+(\frac{2}{8})^2]=\frac{42}{64} Gini(D2)=1−[(83)2+(83)2+(82)2]=6442
然后计算得到特征体温下数据集的Gini指数,最后我们选择Gain_Gini最小的特征和相应的划分。
G a i n _ G i n i ( D , 体 温 ) = 7 15 ∗ 20 49 + 8 15 ∗ 42 64 Gain\_Gini(D,体温)=\frac{7}{15}*\frac{20}{49}+\frac{8}{15}*\frac{42}{64} Gain_Gini(D,体温)=157