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

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

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

原理解析
CART用于分类时不同于ID3利用信息增益和C4.5的利用信息增益率进行分支操作,她利用的是Gini不纯度来作为分类的依据。那么,何为基尼不纯度呢?如下式所描述的:
分类算法和回归算法 分类回归树算法原理_决策树
我们可以看到以下几点(参考):

  1. 当基尼不纯度为0时,集合中的元素均属于同一类别。
  2. 基尼不纯度越大,纯度越小,元素中的分类越多样。
  3. 当所有分类的比例相同时,即分类算法和回归算法 分类回归树算法原理_数据空间_02时,所有基尼不纯度最大,纯度最低。此时有分类算法和回归算法 分类回归树算法原理_回归树_03

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

而当CART用于回归时,构建树的模型可以表达为:
分类算法和回归算法 分类回归树算法原理_回归树_04
其中,数据空间被划分为分类算法和回归算法 分类回归树算法原理_数据空间_05,分类算法和回归算法 分类回归树算法原理_决策树_06,…,分类算法和回归算法 分类回归树算法原理_决策树_07分类算法和回归算法 分类回归树算法原理_分类算法和回归算法_08

CART实现:决策树生成

CART的实现包括决策树生成和剪枝两个步骤。
1. 回归树的生成
参考《统计学习方法》李航
输入:训练数据集D
输出:回归树f(x)
训练步骤:
(1)选择最优切分变量j与切分点s,求解
分类算法和回归算法 分类回归树算法原理_数据空间_09
遍历所有的切分变量j,对固定的j,扫描所有的切分s,选择使得上式最小的(j,s)对。
(2)用选定的(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个区域分类算法和回归算法 分类回归树算法原理_数据空间_05,分类算法和回归算法 分类回归树算法原理_决策树_06,分类算法和回归算法 分类回归树算法原理_决策树_12,分类算法和回归算法 分类回归树算法原理_决策树_07,生成决策树:
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分割成分类算法和回归算法 分类回归树算法原理_数据空间_14分类算法和回归算法 分类回归树算法原理_分类算法和回归算法_15两部分,再计算A=a时的基尼指数。
(2)在所有可能的特征A以及它们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子节点,将训练数据集依特征分配到两个子节点中去。
(3)对两个子节点递归的调用(1),(2),直至满足停止条件。
(4)生成CART决策树。
算法停止的条件是节点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。

CART实现:剪枝
CART剪枝详解

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