机器学习_分类_决策树

决策树算法是借助于树的分支结构实现分类。

叶子节点:存放决策结果
非叶子节点:特征属性,及其对应输出,按照输出选择分支
决策过程:从根节点出发,根据数据的各个属性,计算结果,选择对应的输出分支,直到到达叶子节点,得到结果

决策树使用自顶向下递归分治法,并采用不回溯的贪心策略。分裂属性的选择算法很多,这里介绍3种常用的算法:信息增益(Information gain)、增益比率(gain ratio)、基尼指数(Gini index)。

我们通过基尼不纯度或者来对一个集合进行的有序程度进行量化,然后引入信息增益概念对一次拆分进行量化评价

基尼不纯度

基尼不纯度是指将来自集合中的某种结果随机应用于集合中某一数据项的预期误差率。该值越高,说明拆分的越不理想,如果该值为 0,说明完美拆分。

$
Gini(D)=1−∑_i=(1^m)p_i^2 $

用来表示集合的无序程度,熵越大表示集合越混乱

$E = -P * log2P $

基尼不纯度与熵对比

两者主要区别在于,熵到达峰值的过程相对慢一些。因此熵对混乱集合的「判罚」往往更重一些。通常情况下,熵的使用更加频繁。

信息增益(Information Gain)

基于香浓的信息论,信息熵表示不确定度,均匀分布时,不确定度最大,此时熵就最大。
当选择某个特征对数据集进行分类时,数据集分类后的信息熵会比分类前的小,其差值即为信息增益。
信息增益可以衡量某个特征对分类结果的影响大小,越大越好

信息增益=abs(信息熵(分类后)-信息熵(分类前))

$ Gain(R)=Info(D)−InfoR(D) $

决策树降剪枝

为什么要剪枝

训练出得决策树存在过度拟合现象——决策树过于针对训练的数据,专门针对训练集创建出来的分支,其熵值可能会比真实情况有所降低。

如何剪枝

人工设置一个信息增益的阀值,自下而上遍历决策树,将信息增益低于该阀值的拆分进行合并

处理缺失数据

决策树模型还有一个很大的优势,就是可以容忍缺失数据。如果决策树中某个条件缺失,可以按一定的权重分配继续往以后的分支走,最终的结果可能有多个,每个结果又一定的概率,即:

最终结果=某个分支的结果 x 该分支的权重(该分支下的结果数/总结果数)

生成算法:ID3和C4.5。

1、ID3算法

ID3算法可用于划分标称型数据集,没有剪枝的过程,为了去除过度数据匹配的问题,可通过裁剪合并相邻的无法产生大量信息增益的叶子节点(例如设置信息增益阀值)。
考虑某个特征后,信息熵减小的多,这个特征就是好的特征(在每层分裂时,选择使得Gain(R)最大的属性作为分裂属性)
ID3算法中根据信息增益评估和选择特征,每次选择信息增益最大的特征作为判断模块建立子结点

缺点:1、此公式偏向数据量多的属性,如果样本分布不均,则会导致过拟合。
2、不能处理连续分布的数据特征

2、C4.5算法

C4.5算法用信息增益率来选择属性,继承了ID3算法的优点
优点:

1、克服了用信息增益选择属性时偏向选择取值多的属性的不足;
2、在树构造过程中进行剪枝;
3、能够完成对连续属性的离散化处理;
4、能够对不完整数据进行处理。

C4.5算法产生的分类规则易于理解、准确率较高;但效率低,因树构造过程中,需要对数据集进行多次的顺序扫描和排序C4.5算法在结构与递归上与ID3完全相同,区别只在于选取决决策特征时的决策依据不同,二者都有贪心性质:即通过局部最优构造全局最优

svm:

模型在真实世界中也应用场景 
支撑向量机用于文本和超文本的分类;
用于图像分类;
用于手写体识别;

这个模型的优势是什么?

分类效果好;
可以有效地处理高维空间的数据;
可以有效地处理变量个数大于样本个数的数据;
只是使用了一部分子集来进行训练模型,所以SVM模型不需要太大的内存;
可以提高泛化能力;
无局部极小值问题;
他什么情况下表现最好?

数据的维度较高;
需要模型具有非常强的泛化能力;
样本数据量较小时;
解决非线性问题;
这个模型的缺点是什么?

无法处理大规模的数据集,因为该算法需要较长的训练时间;
无法有效地处理包含噪声太多的数据集;
SVM模型没有直接给出概率的估计值,而是利用交叉验证的方式估计,这种方式耗时较长;
对缺失数据非常敏感;
对于非线性问题,有时很难找到一个合适的核函数。
什么条件下它表现很差?

数据集的数据量过大;
数据集中的含有噪声;
数据集中的缺失较多的数据;
对算法的训练效率要求较高;
根据我们当前数据集的特点,为什么这个模型适合这个问题。 
该项目所提供的样本数据相对较少;
该问题是属于非线性问题;
数据集经过“独热编码”后,维度较高

决策树:

这个模型的优势是什么?

决策树易于实现和理解;
对于决策树,数据的准备工作一般比较简单;
能够同时处理多种数据类型
给定一个决策树模型,可以根据产生的决策树推出相应的逻辑表达式;
通过静态测试来对模型的表现进行评价;
在相对较短的时间内可以对大量的数据做出非常好的结果;
决策树可以很好地扩展到大型数据中,同时决策树的大小独立于数据库的大小;
计算复杂度相对较低,结果的输出易于理解,对部分的数据缺失不敏感。
他什么情况下表现最好?

实例是由“属性-值”对表示的;
目标函数具有离散的输出值;
训练数据集包含部分错误(决策树对错误有适应性);
训练数据缺少少量属性的实例。
这个模型的缺点是什么?

易于出现过拟合问题;
忽略了数据集中属性之间的相关性;
对于类比不一致的样本,决策树的信息增益倾向于那些数据值较多的特征
什么条件下它表现很差?

决策树匹配的数据过多时;
分类的类别过于复杂;
数据的属性之间具有非常强的关联。
根据我们当前数据集的特点,为什么这个模型适合这个问题。

不需要准备太多的训练数据,不需要对数据过多的处理如删除空白值等;
易于编码;
该问题是非线性问题,决策树能够很好地解决非线性问题;
算法的执行效率高,对机器的要求较小。

$$

最后修改:2020 年 08 月 02 日 11 : 04 AM
如果觉得我的文章对你有用,请随意赞赏