您的位置:首页 > 其它

初级算法梳理之三

2019-06-16 07:15 1106 查看

初级算法梳理之三

初级算法梳理之任务三:决策树算法梳理

最后剩下个毕设论文,再过两个月,本科就结束啦,迎来研究生的生活,开始好好钢。
现在只是一个知识的搬运工一般,收集别人整理的知识点,实在有点愧疚。希望能达到到自己能真正写出原创文章的时候。

学习内容

  1. 信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度)
  2. 决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景
  3. 回归树原理
  4. 决策树防止过拟合手段
  5. 模型评估
  6. sklearn参数详解,Python绘制决策树

1、信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度)

:熵是一个随机变量不确定的度量,熵定义为信息的期望值,需要计算所有类别所有可能值包含的信息期望值。由熵的定义,必然事件的熵是0,因为必然是事件是确定无疑的,并不含有不确定性,也就是说,必然事件不含有信息量。

联合熵:在互信息的讨论中,我们已经涉及到联合分布的概率,联合熵就是度量一个联合分布的随机系统的不确定度,下面给出两个随机变量的联合熵的定义:

容易知道,联合熵的物理意义就是,观察一个多个随机变量的随机系统获得的信息量,为了进一步剖析联合熵,我们对其的进行数学推导如下:

条件熵:其物理意义就是,在得知某一确定信息的基础上获取另外一个信息时所获得的信息量。

参考链接:https://zhuanlan.zhihu.com/p/36385989

信息增益:在划分数据集之前之后信息发生的变化,称为信息增益。
熵:表示随机变量的不确定性。
条件熵:在一个条件下,随机变量的不确定性。
信息增益:熵 - 条件熵
在决策树算法的学习过程中,信息增益是特征选择的一个重要指标,它定义为一个特征能够为分类系统带来多少信息,带来的信息越多,说明该特征越重要,相应的信息增益也就越大。

基尼不纯度:从一个数据集中随机选取子项,度量其被错误的划分到其他组里的概率。

2、决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景

算法 原理 应用场景
ID3算法 使用信息增益生成决策树 分类
C4.5 使用信息增益比生成决策树 分类、连续值与缺失值处理
CART分类树 基尼指数 既可用于分类也可用于回归

3、回归树原理

提到决策树算法,很多想到的就是上面提到的ID3、C4.5、CART分类决策树。其实决策树分为分类树和回归树,前者用于分类,如晴天/阴天/雨天、用户性别、邮件是否是垃圾邮件,后者用于预测实数值,如明天的温度、用户的年龄等。

作为对比,先说分类树,我们知道ID3、C4.5分类树在每次分枝时,是穷举每一个特征属性的每一个阈值,找到使得按照feature<=阈值,和feature>阈值分成的两个分枝的熵最大的feature和阈值。按照该标准分枝得到两个新节点,用同样方法继续分枝直到所有人都被分入性别唯一的叶子节点,或达到预设的终止条件,若最终叶子节点中的性别不唯一,则以多数人的性别作为该叶子节点的性别。

回归树总体流程也是类似,不过在每个节点(不一定是叶子节点)都会得一个预测值,以年龄为例,该预测值等于属于这个节点的所有人年龄的平均值。分枝时穷举每一个feature的每个阈值找最好的分割点,但衡量最好的标准不再是最大熵,而是最小化均方差–即(每个人的年龄-预测年龄)^2 的总和 / N,或者说是每个人的预测误差平方和 除以 N。这很好理解,被预测出错的人数越多,错的越离谱,均方差就越大,通过最小化均方差能够找到最靠谱的分枝依据。分枝直到每个叶子节点上人的年龄都唯一(这太难了)或者达到预设的终止条件(如叶子个数上限),若最终叶子节点上人的年龄不唯一,则以该节点上所有人的平均年龄做为该叶子节点的预测年龄。

参考链接:https://blog.csdn.net/pandawang830/article/details/88879414

4、决策树防止过拟合手段

预剪枝:基于信息增益准则,在决策树的生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分即结束树的构建并将当前节点标记为叶结点。

后剪枝:先从训练集生成一棵完整的决策树,然后自底向上地对叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化为性能提升,则将该子树替换为叶结点。泛化性能的提升可以使用交叉验证数据来检查修剪的效果,通过使用交叉验证数据,测试扩展节点是否会带来改进。如果显示会带来改进,可以继续扩展该节点。如果精度降低,则不应该扩展,节点应该转换为叶节点。

5、模型评估

分类树模型:采用通用的分类模型评估指标

回归树模型:采用通用的回归模型评估指标

6、sklearn参数详解,Python绘制决策树

  1. 特征选择标准(criterion):‘gini’或者’entropy’选择基尼指数或者信息增益,根据选用的模型选择
  2. 划分点选择标准(splitter):‘best’或者’random’,前者在特征的所有划分点中找出最优的划分点,后者是随机在部分划分点中找出局部最优的划分点,‘best’适合样本量小,而’random’适合样本量大
  3. 划分考虑最大特征数(max_features):默认None,以为考虑所有特征数,如果是‘log2’意味着划分最多考虑log2(N) ,如果是’sqrt’或者’auto’则意味着划分最多√根号N
  4. 决策树最大深度(max_depth):特征少时默认,样本量大,特征多时可以限制在10~100之间
  5. 内部节点再划分所需最小样本数(min_samples_split):默认是2,如果样本量小,默认即可。样本量数量级非常大,增大数值
  6. 叶子节点最少样本数(min_weight_fraction_leaf):默认是1, 可以输入最少样本数的整数,或者最少样本数占样本总数百分比
  7. 分类特征值最大数量(max_features):‘默认使用全部特征值
  8. 最大节点数(max_leaf_nodes):默认None
  9. 节点划分最小不纯度下降(min_impurity_decrease) 如果该分裂导致杂质的减少大于或等于该值,则将分裂节点。
  10. 节点划分最小不纯度(min_impurity_split) 这个值限制了决策树的增长,如果某节点的不纯度(基尼系数,信息增益,均方差,绝对差)小于这个阈值,则该节点不再生成子节点。即为叶子节点
  11. 随机发生器种子(random_state):None表示随机数字发生器np.random采用的RandomState instance, 如果是一个整数值,random_state 是随机数字发生器的种子
  12. 是否预分类数据(presort):默认False,是否预分类数据以加速训练时最好分类的查找,True时会减慢训练过程

PS:算法之路没有尽头,加油吧少年们!!!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: