机器学习算法第十一篇
主要内容:决策树算法+CART(分类树)
\
CART算法概念
CART(classification and regression tree) 故英文名思意:分类和回归树.
CART算法包含决策树生成和决策树剪枝两部分
CART决策生成树部分主要分为生成回归树和生成分类树
本篇主要讲生成分类树
\
\
算法目的
构建一棵可以对输入样本进行很好的分类的二叉决策回归树
\
\
恩, 开始测试的时候,它是这样做的…
- 把一个样本放入节点
比较自身与节点的特征,选择一个分支: ‘下去’
循环 ‘下去’ , 直到叶子节点为止
当一个测试样本a落入某叶子时, 该叶子的k值作为该样本a的分类值输出
(某叶子的k值是该树在训练时候, 训练集划分到该叶子的所有样本的分类标签里数量最多的标签)
(每个节点都有一个特征选择,如:长头发向左分支,短头发向右分支,该选择是决策树生成的时候遗留的)
\
\
那问题来了, 训练的时候如何生成一棵树?
- 算法一开始将所有训练样本丢到根节点
然后通过某准则将它们切成两份,分别丢入左节点与右节点
然后对每个节点按照该准则继续切分,直到某个情况发生,停止切分,直接生成叶子节点
(某情况是指:例如节点内样本数不能低于10个,树的层数不超过11层…参数设置的问题啊)
\
\
那问题又来了,什么准则可以很好的切分?
- 算法采用基尼指数最小化准则 :
我们针对一个节点的样本集D, 定义一个指数Gini,它与该节点内样本集的分类分布的不确定性成正比
然后取节点内某特征m与该特征的某个取值n,
再按照每个样本的特征m是否取值为n,将样本集切成两份 D 1 , D 2 D_1,D_2 D1,D2
G i n i ( D 1 ) + G i n i ( D 2 ) Gini(D_1)+Gini(D_2) Gini(D1)+Gini(D2)的值,即此切法的总不确定性指数 G s u m G_{sum} Gsum
所以: 我们只需要遍历节点内的所有特征,并在该特征内再遍历所有可能取值
按照它们的组合进行假设性切割,并取得一大堆指数 G s u m G_{sum} Gsum
最后取最小指数 G s u m G_{sum} Gsum所对应的特征与取值,进行真实切分就好
\
\
那问题又又来了,该指数怎么定才好?
-
算法说:基尼指数 Gini
-
即 : 基 尼 指 数 G i n i = ∑ k = 1 R p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 即:基尼指数Gini=\sum_{k=1}^{R}p_k(1-p_k)=1-\sum_{k=1}^{K}p_k^2 即:基尼指数Gini=∑k=1Rpk(1−pk)=1−∑k=1Kpk2
-
其中,假设该节点内的样本集一共有R个分类,样本点属于第k类的概率为 p k p_k pk
-
p k = k 类 样 本 的 数 量 总 样 本 数 量 p_k = \frac{k类样本的数量}{总样本数量} pk=总样本数量k类样本的数量
-
基尼指数越低, 样本分类分布的不确定性越低,切分效果越好
\
\
\
那问题是…为什么不确定性越低越好?
这个问题用打比方来做再好不过
先有子节点样本数据,为了简单起见,只启用一个特征
然后分别计算特征与取值的3个组合的基尼系数以及切分情况,
- 我们可以看到节点样本集,经过假设性的3种切分后,基尼系数最低(不确定性最低)的组,即按照特征值是否为1切分的结果最好,可以非常好的的分离两种类别
- 特征取3比取2的基尼指数(不确定性)低是由于它的右节点具有更好的分类效果, 分完是5,2开,比5,3开要好
- 最糟糕是55开,最好是1,0开
\
\
\
\
\
\