决策树 ID3\C4.5\CART
目录
- 树模型原理
- ID3
- C4.5
- CART
- 分类树
- 回归树
- 树创建
- ID3、C4.5 多叉树
- CART分类树(二叉)
- CART回归树
ID3 | C4.5 | CART | |
---|---|---|---|
特征选择 | 信息增益 | 信息增益比 | 基尼不纯度 |
连续值处理 | 只能处理离散值 | 排序后找到不同类别的分割线 | 二分 |
特征在层级之间复用 | 否 | 否 | 是 |
树形式 | 多叉 | 多叉 | 二叉树 |
剪枝 | 无 | 有 | 有 |
适用问题 | 分类 | 分类 | 分类/回归 |
-
关于特征选择方式与熵?
熵反映了信息量大小(混乱程度),熵越大信息量越大。我们的目标是熵减少方向
树模型原理
ID3
(1)计算数据集D 的经验熵 H(D)
\[H(D)=-\sum_{k=1}^{K} \frac{\left|C_{k}\right|}{|D|} \log _{2} \frac{\left|C_{k}\right|}{|D|} \]? \(K\) 表示数据类别,\(C_k\) 表示第 \(k\) 类样本的个数
(2)计算特征 A 对数据集 D 的经验条件熵 \(H(D | A)\)
? \(D_i\) 表示根据特征 \(A\) 划分后的数据子集
(3)计算信息增益
\[g(D, A)=H(D)-H(D | A) \]C4.5
信息增益比
\[\begin{array}{c} H_A(D)=-\sum_{j=1}^{n} \frac{N\left(D_{j}\right)}{N(D)} \log \left(\frac{N\left(D_{j}\right)}{N(D)}\right) \\ g_r(D,A)=\frac{g(D,A)}{H_A(D)} \end{array} \]其中 n
表示特征 A
取值的个数
CART
分类树
基尼不纯度(gini impurity)
\[gini(p) = \sum_{i=1}^Kp_k(1-p_k)=1-\sum_{i=1}^Kp_k^2 \]\(p_k\) 表示两个第 k
类样本的数量比。
基尼不纯度的\((1-p_k)\) 相当于信息熵中log项的泰勒展开
\(ln(x) = (x-1)\)
根据特征 A
的取值a
划分两个子集(二叉)
回归树
-
回归树如何选择节点分裂方式?
使用平方误差 \(\sum(y_i - f(x_i))^2\)
-
树模型怎么得到平方误差呢?
根据叶子节点值作为作为输出。将输入空间划分为多个单元,每个单元有一个固定输出值(对应输入空间输出值的平均)
-
具体怎么划分?
类似分类树,根据划分前后的误差选取。选取切分变量和切分点(特征及特征取值)
回归树构建流程:
-
选择切分变量
\[R_1(j,s) = \{x|x^{(j)} \leq s\},\quad R_2(j,s) = \{x|x^{(j)} > s\} \]j
和切分点s
,划分子区域: -
计算对应特征与特征值下的误差:
\[\sum_{x_i\in R_1(j,s)}(y_i-c_1)^2 + \sum_{x_i\in R_2(j,s)}(y_i-c_2)^2 \]其中 \(c_1 = ave(y_i|x_i\in R_1(j,s))\)
-
遍历,寻找最优切分变量
j
和最优切分点s
(使平方误差最小) -
根据选定的
(j,s)
划分区域:
-
树创建
ID3、C4.5 多叉树
CART分类树(二叉)
CART回归树
不同树的基本创建过程只有两点不同:
- 划分节点的评价方式
- 子集的划分
references:
[1] 统计学习方法
[2] 机器学习实战