决策树的基本思想
决策树的基本思想是这样的,大家看上图,最右边是一个人是否打高尔夫球的决定,前面四列是是否打高尔夫球的判断条件,包含天气、温度、湿度和风况,我们追踪了它很多天的记录。然后当他给我新的条件的时候,我能推断出他是否去打高尔夫,这是一个非常经典的机器学习问题,非常适合用决策树来解决。我们用这张表就可以构建出如下决策树:
决策树是如何使用的
当我们只知道了天气、温度、湿度、风况,我们如何知道他去不去打高尔夫呢。
比如我们看第一条数据,它的天气是下雨,矩形节点是决策节点,分支是决策条件,圆形节点是结果节点:是或否。天气是下雨我们走最右边,然后看湿度是高,我们就推断出了它打高尔夫球的结果是否。由于数据比较少,比较简单,我们可以把整颗树都构造出来,它也非常符合人的决策方式,比如医生给病人看病的方式。
决策树是如何构建的
这是我们这篇文章讨论的重点,我们先看一下手动构建决策树的思路,让大家有一个基本的概念。
1.先从数据集里选择一个属性作为初始决策节点,比如天气。(选择哪些节点是有讲究的,这个我们后面再说)它有三个条件。我们可以将数据分为三组,如下:
图示
2.它有三种情况,晴天、阴天、下雨。阴天时结果都是是(即去打高尔夫)。所以我们已经做出了决策:是,晴天里面既有是也有否,所以我们再选一个决策节点:风况,创建子决策节点,无风的情况都为:是,有风的情况都为:否。我们可以推出结果节点。如图:
3.天气节点下雨的情况里,同样包含是和否,无法做出决策,我们需要选择一个新的决策属性,我们选择湿度,大家看我们下雨的子决策属性湿度,高的时候均为否,低的时候均为是,可以做出决策。如下:
到此,我们构建出了完整的决策树。
ID3算法与实现
ID3算法的基本步骤
这是最早的一个决策树算法,称为ID3算法。
- 如果被选择样本属于同一个分类,生成叶子节点。比如我们选择了天气里面的阴天,这个样本里面都是是,所以我们生成了结果节点是。
- 如果属性集合不为空集,但是被选择样本包含的属性值相同,选择样本数最多的生成叶子节点(结果节点)。比如我们选择了湿度这个属性,而他的值只有高,集合有10个数据,3个是7个为否,那么我们就就将占多数的否作为叶子节点。
- 选择一个属性划分样本,遍历该属性的所有值,如,这种情况是结果不相同,属性也不相同,比如一开始我们选择天气这个属性,划分为三个子数据集。
- 如果某个值对应的样本为空集,则使用父节点中样本最多的生成叶子节点(结果节点)。比如:我选择风况节点,而有风的情况无样本,那么我们选择风况里面样本最多的生成子节点,这里的叶子节点为是。
如何选择属性
这里面有一个关键的问题是如何选择属性,刚刚我们打高尔夫球的例子我们是人为的选择,我先选择天气,而后在晴天里选择风况,下雨里选择湿度,我可能感觉这样划分更好,可是,我们需要告诉计算机如何选择。
如何选择属性在计算机里面叫属性选择度量或分裂规则。我们要给计算机一个定量的划分方法。
属性度量常见方法有三种:
* 信息增益
* 信息增益率
* Gini指标
ID3算法里面用的信息增益。
信息增益
要了解信息增益,就必须了解一个概念,叫信息熵
,这是信息论的概念。
信息熵:表示信息的杂乱程度。
信息是有冗余的,比如我们去相亲,父母会给我们介绍对方的身高、体重、家庭等很多情况,我们可能只考虑其中的一部分信息。另一部分对我是无用的,就产生了信息冗余,而如果父母说的都是我们想听的,或百分百的包含了我们做出去相亲觉定的条件因素,这我们称之为信息量很大,因为说的都是我们想听的,有用的。
那么我们如何量化信息量的大小呢
不确定性
在信息论里面,香农就提出了一个概念,第一个概念叫不确定性函数,父母给我们的相亲信息,是为了让我们做出去相亲或不去相亲的决定。也就是说,我们做出的决定是有不确定性的,我们如何描述这种不确定性呢
p(x)表示这个决定在样本里面的概率
比如父母给了我们年龄小于30这个信息,而后给了我们A - F五个人的信息,那么包含了两个决定,接受相亲和不接受相亲,p(x)表示我做出相亲和不相亲的决定在样本里面的概率。我们会用样本去代替我们现实世界里的概率,所以我们会用频率去计算我们的概率。所以,在告诉我们年龄小于30的时候,我们有2/5,p(x1)百分之40的概率接受相亲,p(x2)60%的概率不接受相亲。
而对于p(x1)接受相亲的这个信息的不确定性是:-log2P(x1),40%取2的对数,再取一个负数。
香农为什么用这个函数表示信息的不确定性呢,这个函数是有规则的,这里面就不解释了,大家只要记住这个就是计算一个决定的不确定性。
右边不相亲决定的不确定性是-log2*60%
这个是怎么描述某个决定的不确定性,那么信息熵是什么呢。
信息熵
我们在给定条件下,做出每一个选择有一个不确定性,比如年龄<30,接受相亲还是不接受相亲。
信息熵是在你给定特定信息的条件下,做出不同决定的不确定性的期望,那么什么是期望呢,期望的公式是下面这样子的:
期望它是数学统计的概念,求平均:
比如我们一个盒子里面有10个球,编号从1-10,我们拿出一个球,我们期望得到的平均分数是多少。我们拿出一个球的概率是10%,球的分数是x1 = 1,x2 = 2,… x10 = 10.
那么我们得出的期望是多少呢:概率乘以分数之和
期望 = 0.1*1 + 0.1 * 2 +… + 0.1 10 = 0.1(1 + 10) * 5 = 5.5
它就是从1 加到10,再除以10的结果。也是5.5.
期望就是一个带权重的平均值的求法。比如我们随意拿出一个球,它的平均分数是多少,也是从1加到10 ,再除以10,即5.5.
期望
而期望怎么求呢,用事件发生的概率 *事件的值。只不过在刚刚那种情况下呢,所有p是相等的。其实就相当于我们在求一个真正的平均值,但是在现实生活中,比如说我们一个箱子里面放了两类球,10个红色,6个绿色,红色的分数是1,绿色的分数是2,那么这个时候我求平均分数就会因我红球和绿球的比例而受到影响。那我们就会因为p而受到影响,p就会使得这个球的平均有个权重,它就用这个p来调节我们的平均值,这就是期望。这个概念就是求平均。
L(Xi):表示不确定性大小。
P(Xi):表示事件的概率。
如果我们从p(X1) +…+P(X2),就会有n个决定,我们求了n个决定的一个期望,也就是n个决定的一个平均的不确定性。平均的不确定性就是我们的信息熵。
假设说你给了我很大信息,而我的平均不确定性很高。我的决定是不确定的,这个时候就说明这个信息没有用。我还是做不出什么决定。但是如果你给我信息的时候,我的平均不确定性很低,我每个选择的不确定性都是很低