文章目录
相关:决策树-代码实现
什么是决策树
决策树:从根节点 开始一步步走到叶子节点(决策);所有数据最终会落到叶子几点;
特点
- KNN 和 决策树 是非参数算法(大部分算法都是参数算法);
- 可以解决分类问题,天然可以解决多分类问题;
- 可以解决回归问题;
- 具有非常好的可解释性;
树的组成
- 根节点:第一个选择点
- 叶子节点:最终的决策结果
- 非叶子节点与分支:中间过程
关于顺序
决策树注重节点的先后顺序;先后顺序变化后,最终结果也会发生很大变化。
第一个节点(根节点)的效果需要是比较强的,可以进行大致的判断。
决策树的训练和测试
训练阶段:从给定的训练集 构造出一棵树(从根节点开始选择特征,对特征切分)
测试阶段:根据构造出来的树模型,从上到下去走一遍就好了。
一旦构造好了决策树,那么分类或者预测任务就很简单了。难点在于构造一棵树。
决策树要解决的问题:
- 哪一个判断作为根节点(每个节点在哪个维度上划分)?
- 选好维度的话,在维度的哪个值上划分?
答案:
基于熵值建立树模型;
基于信息增益决定特征怎么选;
决策树算法
- ID3:信息增益;
- C4.5:信息增益率;
- CART:使用 GINI 系数作为衡量标准;
- GINI 系数,和熵衡量标准类似,只是计算方式不同。
信息熵
决策树的目标是 通过一个衡量标准,来计算通过不同特征进行 分支选择后的分类情况。找到最好的那个作为根节点。
这个标准就是 熵,熵表示 随机变量 不确定性 的 度量。
信息熵 是 信息论的基础概念,源自于物理热力学,热量越大,粒子无规则运动越剧烈,不确定性越高。
数据越不确定(越混乱),熵越大;数据不确定性低,熵越小。
信息熵计算公式
H = − ∑ I = 1 k p i l o g ( p i ) H = -\sum^k_{I=1} p_i log(p_i) H=−I=1∑kpilog(pi)
- H:一个系统信息熵的总和;
-
p
i
p_i
pi:K 类信息,每一类信息所占的比例;
一般值小于1,所以 $ log(p_i) $ 为负,所以总公式前面有负号;
举个栗子
A 集合 [1, 1, 1, 1, 2, 1, 1, 2]
B 集合 [1, 2, 3, 4, 5, 6, 7, 8]
显然A 集合的熵值要低,因为 A 里面只有两种类别,相对稳定;
B 中类别太多,熵值就会很大。
熵计算示例
{1, 0, 0}
H = -1 log(1) = 0 # 此时信息熵最低
二分类的熵
如果数据只有两类
公式可以改变为:
H
=
−
x
l
o
g
(
x
)
−
(
1
−
x
)
l
o
g
(
1
−
x
)
H = -x log(x) - (1-x)log(1-x)
H=−xlog(x)−(1−x)log(1−x)
使用信息熵寻找最优划分
划分后,信息熵如何最低?---- 对划分结果进行搜索。
信息增益
如何决策一个节点的选择?
信息增益:特征X 使得类别 Y 的不确定性减少的程度(分类后的专一性,希望分类后的结果 是同类在一起)。
左节点的熵值 + 右节点的熵值,比上一个节点的熵值小,就有进步。
熵:表示随机变量的不确定性。
条件熵:在一个条件下,随机变量的不确定性。
信息增益:熵 - 条件熵。
使用熵和信息增益 构造决策树的实例
信息增益率
使用信息增益来做,存在问题。不适合处理非常稀疏的特征。
比如:有10个数据,以 ID 作为特征来划分,可以分为 10个分支,每个分支内部很纯,熵为0。
以上是 ID3 算法,科学家提出使用 信息增益率 来改进的 C4.5 算法。
信息增益率 计算公式: G a i n − r a t i o = G a i n ( A ) / I Gain-ratio=Gain(A)/I Gain−ratio=Gain(A)/I
基尼系数
是另一个划分指标;计算比信息熵简单很多,公式: $ G = 1 - \sum^k_{i=1} p^2_i $
计算示例
基尼系数越高,整体随机性越强。
二分类问题的基尼系数
G = 1 − x 2 − ( 1 − x ) 2 = 1 − x 2 − 1 + 2 x − x 2 = − 2 x 2 + 2 x G = 1 - x^2 - (1-x)^2 = 1 - x^2 - 1 + 2x - x^2 = -2x^2 + 2x G=1−x2−(1−x)2=1−x2−1+2x−x2=−2x2+2x
是一个抛物线,开口向下,拥有一个最大值,在抛物线的对称轴处。
当 x = 0.5 时,基尼系数最大,数据不确定程度最大。
信息熵 & 基尼系数
- 信息熵的计算 比 基尼系数 稍慢;sklearn 中默认使用基尼系数;
- 大多数情况下,二者没有特别的效果优劣,划分结果区分不大;
CART
CART: Classification And Regression Tree
以上探讨的决策树通常也叫做 CART,根据某一个维度d 和 某一个阈值 v 进行二分(得到一颗二叉树);
sklearn 实现的决策树通常是 CART;
还有其他决策树创建方法:ID3, C4.5, C5.0 …
决策树的复杂度
预测的时间复杂度: O(log m)
训练: O( nmlogm)
所有非参数机器学习算法,都容易产生过拟合
。
一般使用对决策树进行剪枝
来降低复杂度、解决过拟合。
比如:限制树的高度;对参数进行平衡。
决策树解决回归问题
使用 DecisionTreeRegressor 类来训练
决策树的局限性
对于个别样本点很敏感,这也是所有非参数算法的共性。
改变一个点,可能就会改变整个决策边界。
连续值的处理
选取连续值的哪个分界点?
– 使用贪婪算法
如,排序 60,70,75,80,90,95,100,120,125,220
以上十个数据,若进行二分,则可能存在9个分界点。得到9种熵值比较;哪里分界能使熵值最小,信息增益最大,就在哪里切分。
这就是 离散化
的过程。
决策树的剪支策略
为什么要剪枝?
决策树 理论上可以完全分得开数据。(如果树足够大,每个叶子节点就是一个数据,这是过拟合的表现。)
剪枝是 将树修剪,使其不要过于庞大。作用:防止过拟合。
剪支策略:
- 预剪枝:边建立决策树,同时进行剪枝操作(更实用)
- 后剪枝:建立完决策树后进行剪枝操作。
预剪枝
设置一些参数,来控制树模型的增长、复杂程度。
如 限制深度、叶子节点个数、叶子节点样本数、信息增益量等。
后剪枝
通过一定的衡量标准。
$ C_{\alpha} = C(T) + \alpha \cdot | T_{leaf} | $
- C α C_{\alpha} Cα:最终的损失
- C ( T ) C(T) C(T):gini 系数或者熵值多少
- α \alpha α:自定义的平衡项
- T l e a f T_{leaf} Tleaf 叶子节点个数
叶子节点越多,损失越大。
决策树解决分类 & 回归问题
分类问题
评估标准:熵 或 gini系数;(分类结果纯度)
预测值为众数
;比如某个节点中0多,那么落到这个节点的样本就是 0;
回归问题
评估标准:方差
。可评估节点内部数据的差异程度。
预测结果使用 平均值
。