今天开始学决策树,尽管导师每天催任务,但我还是得把机器学习学完,学懂,现在看西瓜书很有感觉。这个机器学习太好了,感觉学着学着就变聪明了一样,不断地让自己的思维变得更敏捷,所以我爱机器学习。
今天要讲的内容主要有以下几点:
- 信息熵(条件熵)
- 决策树
- 决策树优化
- 剪枝
- 决策树可视化
说信息熵之前,先说下什么叫比特化
比特化
假设有一组随机变量X,X变量组成的序列: BACADDCBAC…;各个值出现的概率关系如图;如果现在希望把这个随机变量序列转换成二进制来进行网络传输,规定:那么我们得到一个这样的序列,01001000111110010010。我们可以使用两个比特位来表示一个随机变量。这种两个比特位表示一个随机变量的方式就是ABCD出现的概率都是四分之一。
然而,当X变量出现的概率值不一样的时候,如下图是每个随机变量出现的概率:
,在这种情况下我们怎样传输比特位才能少呢?可以这样,按照概率用每个比特表示,每个随机变量的平均比特位为:1.75,如下图所示:
我们可以把上面的求期望表示成另一种方式:
我们把上边的随机变量X一般化,假设随机变量X具有m个值,分别为:V 1 ,V 2 ,…,V m 并且各个值出现的概率如下表所示;
那么,对于一组变量来讲,每个变量平均需要多少比特位来表示呢?我们可以使用变量的期望来表示每个变量平均需要多少比特位:
信息熵
我们把H(X)叫做随机变量X的信息熵,H(X)表示如下:
信息量:指的是一个样本/事件所蕴含的信息,如果一个事件的概率越大,那么就可以认为该事件所蕴含的信息越少。极端情况下,比如:“太阳从东方升起”,因为是确定事件,所以不携带任何信息量。那么什么叫信息熵呢?
信息熵 :一个系统越是有序,比如上边说的太阳东升西落,信息熵就越低;相反,一个系统越是混乱,信息熵就越高。所以,信息熵被认为是一个系统有序程度的度量。
信息熵就是用来描述系统信息量的不确定度。信息熵越高,表示随机变量X是均匀分布,各种取值情况都是等概率出现的;随机变量X取值不是等概率出现,有的事件概率大,有的事件概率小。请看下面的图:右边的图,信息熵小但是表示的信息量很大。
举个例子说明一下高信息熵和低信息熵中携带的信息量:
在赌马比赛中,有两组赛马共八匹,获胜的概率如下:
在比赛前对于第一组而言,他们获胜的概率都是四分之一,我们就无法从中获取什么押哪批马赢。而第二组,我们可以清楚的判断A马获胜的概率大。这个例子有力地说明:信息熵越低,所携带的信息就越多。
条件熵H(Y|X)
条件熵是说,在给定条件X的情况下,所有不同的X值情况下Y的信息熵的平均值叫做条件熵。
看下面的例子,我们计算H(X)和H(Y)的条件熵,计算结果分别如下。
再计算**专业(X)**为数学的时候,Y的信息熵的值为:H(Y|X=数学)???
条件熵:在给定条件X的情况下,所有不同的X值情况下Y的信息熵的平均值叫做条件熵。
还用上边的这个例子直观的理解。
H(Y|X)=0.5
条件熵另一种表示
条件熵本身的概念:事件(X,Y)发生所包含的熵,减去事件X单独发生的熵,即为在事件X发生的前提
下,Y发生“新”带来的熵。
上边的推倒公式如下:
这里信息熵讲解完毕!下面请看什么是决策树?
决策树
举一个例子,直观的理解一下:
比如,现在有如下信息,ID为人,后边的这个人的基本信息,假如这个人去银行贷款,银行工作人与会根据这个人的基本信息,判断他是够有偿还能力,根据这些信息做出如下判断。
当构建好这样一个模型后,新来一个客户,可根据建好的模型直接判断,比如:新来一个客户,无房产,单身,年收入55K,那可以根据判断模型得出该用户无法偿还债务,不能借款给他。以上的判断模型,就类似于决策树。
决策树的纯度的度量
决策树效果评估:
上面例子的具体解法:
上图收入的信息增益为什么是0.395, 请看下图。
决策树的评估损失函数
通过上面的例子,可以得出该值越小越好。
几种决策树生成算法—ID3,C4.5,CART
1. ID3
ID3算法是决策树的一种经典构造算法,内部使用信息熵和信息增益来进行构建,每次迭代选择信息增益最大的特征属性作为分割属性。
ID3优缺点
优点:
决策树构建速度快,实现简单。
缺点:
- 计算依赖于特征数目较多的特征,而属性值最多的属性并不一定最优
- ID3算法不是递增算法
- ID3算法是单变量决策树,对于特征属性之间的关系不会考虑
- 抗噪性差
- 只适合小规模数据集,需要将数据放到内存中
C4.5算法
在ID3算法的基础上,进行算法优化提出的一种算法(C4.5);使用信息增益率来取代ID3算法中的信息增益,在树的构造过程中会进行剪枝操作进行优化;能够自动完成对连续属性的离散化处理;C4.5算法在选中分割属性的时候选择信息增益率最大的属性,涉及到的公式为:
优点: - 产生的规则易于理解
- 准确率高
- 实现简单
缺点: - 对数据集需要进行多次顺序扫描和排序,所以效率较低
- 只适合小规模数据集,需要将数据放在内存中
CART分类回归树算法
使用基尼系数作为数据纯度的量化指标来结构件的决策树算法就叫做CART(Classification And Regression Tree分类回归树)算法。CART算法使用GINI增益作为分割属性选择的标准,选择GINI增益最大的作为当前数据集的分割属性,可用于分类和回归两类问题。CART构建的是二叉树
三种算法总结
通过鸢尾花分类的例子,如果决策树层次太多,就会存在过拟合和欠拟合的问题,为了解决这个问题,对决策树进行优化操作(剪枝和Random Forest)
决策树剪枝
决策树的剪枝是决策树算法中最基本、最有用的一种优化方案,主要分为两大类:
**前置剪枝:**在构建决策树的过程中,提前停止。结果是决策树一般比较小,实践证明这种策略无法得到比较好的结果。
**后置剪枝:**在决策树构建好之后开始裁剪,一般使用两种方式:
- 用单一叶子节点代替整个子树,叶节点的分类采用子树中最主要的分类;
- 将一个子树完全替代另外一棵子树;后置剪枝的主要问题是计算效率问题,存在一定的浪费情况。
剪枝过程: - 计算所有内部非叶子节点的剪枝系数
- 查找最小剪枝系数的节点,将其子节点进行删除操作,进行剪枝得到决策树Tk ; 如果存在多个最小剪枝系数节点,选择包含数据项最多的节点进行剪枝操作
- 重复上述操作,直到产生的剪枝决策树T k 只有1个节点
- 得到决策树T0 T1 T2 …Tk
- 使用验证样本集选择最优子树Ta
剪枝损失函数(这个位置剪枝前后的损失函数我好想写反了,看懂了告诉我一声)
原始损失函数:
回归树和分类树的区别
回归树X-----> Y要求是连续的
分类树X----->Y要求是离散的
分类树采用信息增益、信息增益率、基尼系数来评价树的效果,都是基于概率值进行判断的;而分类树的叶子节点的预测值一般为叶子节点中概率最大的类别作为当前叶子的预测值。
在回归树中,叶子点的预测值一般为叶子节点中所有值的均值来作为当前叶子节点的预测值。所以在回归树中,一般采用**MSE(Mean Square Error)**作为树的评价指标,即均方差。
下面这个图清晰两者的区别: