CART算法

一、Gini公式

Gini(D,A) = \frac{|D_1|}{D}Gini(D_1)+\frac{|D_2|}{D}Gini(D_2)

Gini(D_1) = 1-\sum_{k=1}^{K}(\frac{|C_k|}{|D_1|})^2

其中:

k 是类别数(label)

样本集合 D 根据特征A 是否取某一值 a 被分割成D_1 、D_2

二、举例

假设我们有一个二元分类问题,数据集包含以下四个样本:

id 年龄 有工作 有房子
1 青年
2 中年
3 中年
4 老年

可以使用CART算法来建立一个决策树模型。

1、首先,我们需要选择一个特征和阈值来对数据集进行划分。

假设我们选择年龄和阈值a = 青年,将数据集划分成两个子集:

  • 子集D_1:{1},对应类别为{0}
  • 子集D_2:{2,3,4},对应类别为{1, 0,1}

对于子集D_1,基尼不纯度为:

Gini(D_1) = 1 - \sum_{k=1}^{K}(\frac{|C_k|}{|D_1|})^2 =1-(\frac{0}{1})^2-(\frac{1}{1})^2=0.5

对于子集D_2,基尼不纯度为:

 Gini(D_2) = 1 - \sum_{k=1}^{K}(\frac{|C_k|}{|D_2|})^2=1 -(\frac{2}{3})^2-(\frac{1}{3})^2=0.44

Gini(D,A=young)=\frac{|D_1|}{D}Gini(D_1)+\frac{|D_2|}{D}Gini(D_2)=\frac{1}{4}Gini(D1)+\frac{3}{4}Gini(D2)=\frac{1}{4}*0+\frac{3}{4}*0.44 = 1.7 

假设我们选择年龄和阈值a = 中年,将数据集划分成两个子集:

  • 子集D_1:{2,3},对应类别为{1,0}
  • 子集D_2:{1,4},对应类别为{0,1}

对于子集D_1,基尼不纯度为:

Gini(D_1) = 1 - \sum_{k=1}^{K}(\frac{|C_k|}{|D_1|})^2 =1-(\frac{1}{2})^2-(\frac{1}{2})^2=0.5

对于子集D_2,基尼不纯度为:

 Gini(D_2) = 1 - \sum_{k=1}^{K}(\frac{|C_k|}{|D_2|})^2=1 -(\frac{1}{2})^2-(\frac{1}{2})^2=0.5

Gini(D,A=mid)=\frac{|D_1|}{D}Gini(D_1)+\frac{|D_2|}{D}Gini(D_2)=\frac{2}{4}Gini(D1)+\frac{2}{4}Gini(D2)=\frac{1}{2}*0.5+\frac{1}{2}*0.5= 0.5

假设我们选择年龄和阈值a = 老年,将数据集划分成两个子集:

  • 子集D_1:{4},对应类别为{1}
  • 子集D_2:{1,2,3},对应类别为{0,1,0}

对于子集D_1,基尼不纯度为:

Gini(D_1) = 1 - \sum_{k=1}^{K}(\frac{|C_k|}{|D_1|})^2 =1-(\frac{1}{1})^2-(\frac{0}{1})^2=0

对于子集D_2,基尼不纯度为:

 Gini(D_2) = 1 - \sum_{k=1}^{K}(\frac{|C_k|}{|D_2|})^2=1 -(\frac{1}{3})^2-(\frac{2}{3})^2=0.44

Gini(D,A=old)=\frac{|D_1|}{D}Gini(D_1)+\frac{|D_2|}{D}Gini(D_2)=\frac{1}{4}Gini(D1)+\frac{3}{4}Gini(D2)=\frac{1}{4}*0+\frac{3}{4}*0.44 = 1.7

Gini(D,A=mid)最小,所以A=midA的最优切分点

假设我们选择有工作和阈值a = 有,将数据集划分成两个子集:

  • 子集D_1:{2,4},对应类别为{1,1}
  • 子集D_2:{1,3},对应类别为{0,0}

对于子集D_1,基尼不纯度为:

Gini(D_1) = 1 - \sum_{k=1}^{K}(\frac{|C_k|}{|D_1|})^2 =1-(\frac{2}{2})^2-(\frac{0}{2})^2=0

对于子集D_2,基尼不纯度为:

 Gini(D_2) = 1 - \sum_{k=1}^{K}(\frac{|C_k|}{|D_2|})^2=1 -(\frac{0}{2})^2-(\frac{2}{2})^2=0

Gini(D,B=job)=\frac{|D_1|}{D}Gini(D_1)+\frac{|D_2|}{D}Gini(D_2)=\frac{2}{4}Gini(D1)+\frac{2}{4}Gini(D2)=\frac{1}{2}*0+\frac{1}{2}*0= 0

由于B只有一个切分点,所以B=jobB的最优切分点

2、在AB两个特征中,Gini(D,B=job)=0 最小,所以选择特征 B 为最优特征

于是根节点生成两个子节点,有工作和无工作,都是叶节点,结束。

如果不是叶节点,则重复上述过程。

有工作 = 有
├── 年龄 = young
│   |── 类别为 mid
|   └── 类别为 old
└── 无

你可能感兴趣的:(算法)