决策树实现--分类与回归树(CART)

决策树是一种很基础而又重要的机器学习算法,是众多更高级算法实现的基础,比较famous的决策树算法有ID3,C4.5和分类与回归树(Classify and Regression Tree)。要理解哪些更高级的算法,对这些决策树算法有个好的理解是very useful的!

这篇文章将关注CART的原理与实现!
CART的特点:

  1. 既是分类树,又可以做回归树!
  2. CART是二叉树!

原理解析
CART用于分类时不同于ID3利用信息增益和C4.5的利用信息增益率进行分支操作,她利用的是Gini不纯度来作为分类的依据。那么,何为基尼不纯度呢?如下式所描述的:
I G ( f ) = ∑ i = 1 m f i ( 1 − f i ) = ∑ i = 1 m f i − ∑ i = 1 m f i 2 = 1 − ∑ i = 1 m f i 2 I_G(f)=\sum_{i=1}^mf_i(1-f_i)=\sum_{i=1}^mf_i-\sum_{i=1}^mf_i^2=1-\sum_{i=1}^mf_i^2 IG(f)=i=1mfi(1fi)=i=1mfii=1mfi2=1i=1mfi2
我们可以看到以下几点(参考https://blog.csdn.net/lanchunhui/article/details/51140053):

  1. 当基尼不纯度为0时,集合中的元素均属于同一类别。
  2. 基尼不纯度越大,纯度越小,元素中的分类越多样。
  3. 当所有分类的比例相同时,即 f 1 = f 2 = . . . = f m = 1 m f_1=f_2=...=f_m=\frac{1}{m} f1=f2=...=fm=m1时,所有基尼不纯度最大,纯度最低。此时有 I G ( f ) = 1 − ∑ i = 1 m 1 m 2 = 1 − 1 m I_G(f)=1-\sum_{i=1}^m\frac{1}{m^2}=1-\frac{1}{m} IG(f)=1i=1mm21=1m1

这样一来,我想为什么用Gini不纯度可以作为CART的分类依据就很明显了。

而当CART用于回归时,构建树的模型可以表达为:
f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) f(x)=\sum_{m=1}^{M}c_mI(x∈R_m) f(x)=m=1McmI(xRm)
其中,数据空间被划分为 R 1 R_1 R1, R 2 R_2 R2,…, R M R_M RM c m c_m cm 则是每一个数据空间上的一个输出

CART实现:决策树生成

CART的实现包括决策树生成和剪枝两个步骤。
1. 回归树的生成
参考《统计学习方法》李航
输入:训练数据集D
输出:回归树f(x)
训练步骤:
(1)选择最优切分变量j与切分点s,求解
m i n j , s [ m i n c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + m i n c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] min_{j,s}[min_{c_1}\sum_{x_i∈R_1(j,s)}(y_i-c_1)^2+min_{c_2}\sum_{x_i∈R_2(j,s)}(y_i-c_2)^2] minj,s[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]
遍历所有的切分变量j,对固定的j,扫描所有的切分s,选择使得上式最小的(j,s)对。
(2)用选定的(j,s)对划分区域,决定相应的输出值:
R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } , R 2 ( j , s ) = { x ∣ x ( j ) > s } R_1(j,s)=\{x|x^{(j)}≤s\},R_2(j,s)=\{x|x^{(j)}>s\} R1(j,s)={xx(j)s}R2(j,s)={xx(j)>s}
KaTeX parse error: Expected 'EOF', got '\substack' at position 1: \̲s̲u̲b̲s̲t̲a̲c̲k̲{*\\ c }_m=\fra…
(3)对划分的两个子区域递归调用(1)(2),直至满足停止条件
(4)将输入空间划分为M个区域 R 1 R_1 R1, R 2 R_2 R2, . . . ... ..., R M R_M RM,生成决策树:
KaTeX parse error: Expected 'EOF', got '\substack' at position 18: …x)=\sum_{m=1}^M\̲s̲u̲b̲s̲t̲a̲c̲k̲{*\\ c}_mI(x∈R_…
2. 分类树的生成

输入:训练数据集D,停止训练的条件
输出:CART决策树
根据训练数据集,从根节点开始,递归的对每个节点调用以下操作。
(1)设结点的训练数据集为D,计算现有特征对该数据集的基尼指数。此时,对每一个特征A,对其可能取的每个值a,根据样本点对A=a的测试为“是”或“否”将D分割成 D 1 D_1 D1 D 2 D_2 D2两部分,再计算A=a时的基尼指数。
(2)在所有可能的特征A以及它们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子节点,将训练数据集依特征分配到两个子节点中去。
(3)对两个子节点递归的调用(1),(2),直至满足停止条件。
(4)生成CART决策树。
算法停止的条件是节点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。

CART实现:剪枝
CART剪枝详解

Reference
决策树算法原理(下), 这作者也太牛了

你可能感兴趣的:(机器学习成神之路)