这次上完数据挖掘的课之后,我想还是要做做笔记吧,结合书上的内容以及网上其他博主的经验,这里我就给出自己的一些理解
参考网址:https://blog.csdn.net/fly_time2012/article/details/70210725
主要概念
- 分类和预测
- 信息熵(期望信息)
- 信息增益
- 属性选择度量
- 决策树归纳
分类和预测
假设你是银行工作人员,有很大一堆贷款者的数据,包括这些人的年龄,职业,收入,贷款信用等等,你要怎么根据这些数据来分析出这些贷款者的信用是安全的还是有风险的呢?
你需要构造一个分类器,根据这个分类器来分析这些数据
假设你通过大量的数据构造除了一个分类器,那么下次又来了一批贷款者,你就能根据这个分类器来预测这些人的贷款信用
数据分类是一个两阶段的过程,包括
- 学习阶段
- 分类阶段
学习阶段——构建分类模型
就是通过数据分析的算法来构造一个分类器
分类阶段——使用模型预测给定数据的类标号
所谓类标号,比如说一个数据的属性是性别,那么类标号就是男士或者女士,就是一个属性的value
那么这里的意思就是,通过分类器的预测,来给出属性的值,比如贷款信用——高 中等 低
决策树归纳
好了,现在我们要尝试去构造一个分类器了
假设你有这么一堆数据
图片来源:https://blog.csdn.net/fly_time2012/article/details/70210725

现在我们要做的就是通过过分析天气的情况来分析出他到底play还是不play
那么现在很流行的就是使用决策树归纳
假设分成这个样子:

那这样我们就可以知道了,在overcast的天气,他是绝对会出去玩的(仅限于当前数据集)
像上面那个分类,我们不妨把Outlook看做属性A,而数据集叫做D分区,A中有多个不同的值
{a1,a2,a3,....an}
那么属性A将D划分n个分区或者子集
{D1,D2,D3,D4....}
停下来结合我们刚刚的例子好好想想,属性A就是那个outlook,每个a1,a2之类的就是sunny,rainy之类的,而通过这几个值,就把D这个数据分区,也就是那个玩还是不玩数据,分成了几个子集
现在应该清楚了一些
然后我们继续看那张图,我们按照overcast分了之后,得到的D2,哪个里面全部都是No,出现这种情况,我们就说这种这个分区是
纯的
像其他几个分区,又有yes又有no,那就是不纯的
刚才我们仅仅只是按照了一个属性将这块数据D分成了几个子集,
假设我们继续分,比如说按照Temperature来分,又可以将几个D1,D2继续分成更细的部分
那么一直这样分的话,我们就形成了一颗决策树(有点懒,直接在网上拿的图)
来源:https://lotabout.me/2018/decision-tree/

决策树是一种类似于流程图的机构,其中,每个内部结点表示在一个属性上的测试,每个分支代表该测试的一个输出,而每个树叶节点存放一个类标号
好了,现在的问题是什么呢?
难道你们没有发现我们在分的时候,选取的属性完全是自己选的吗?
那这样怎么才能保证我们的决策树能很好地预测下一次的数据呢?
属性选择度量
我们要选择一个很好地标准来帮助我们构造一棵决策树
也就是选好一个分裂准则
这里有三种常见的分裂准则
- 信息增益
- 增益率
- 基尼指数(Gini)
好了,不要被上面的信息看懵了,我现在只做一个信息增益的介绍
信息熵
香农提出来的,类似于物理上的熵,熵越大,意味着物质越无序
而信息熵越大,意味着信息越是无序,而无序和信息量大是由一定关系的,一般来说,对于一堆未处理的数据,信息量大,这堆数据的看起来就非常的杂乱,那么信息熵也就越大
定义:
假如一个随机变量X的取值是
{X1,X2,X3,....}
对应的出现概率是
{p1,p2,p3,.....}
那么这个X的信息熵(也叫做期望信息)就是

注意
- 并不是传统的期望值----概率x取值
- 使用以2为底的对数是因为信息用二进制编码(我不知道)
那好,大伙们,我么先计算一下未分区之前play的信息熵:

当我们分完区之后,我们来计算一下各个分区的信息熵,(我知道去翻图片有点累啊,但是我不想传两次了)

那么怎么才能把这几个分区的信息熵结合起来,来和原来的进行比较呢?

所谓各个分区所占的权重,就是
Di/D
比如说sunny占了原来数据的1/2,那么我们就用这个
∑权重*分完之后的信息熵
信息增益
好了,用原来的信息熵减去分完之后的信息熵我们就得到了信息增益!

那这个意味着什么呢?
如果信息增益越大,那么就是指分完之后的信息熵越小,那也就意味着分完之后的数据趋向于有序,而越有序的数据,意味着我们能更好地预测数据
所以使用这个信息增益就能帮我们确定使用什么属性的优先级来构造决策树了