您的位置:首页 > 其它

小白学习Machine Learning in Action-机器学习实战------决策树

2017-08-27 19:35 537 查看
书中说:k近邻算法可以完成很多分类任务,但它最大的缺点就是无法给出数据的内在含义,决策树的主要优势就在于数据形式很容易理解。决策树可以使用不熟悉的数据集合,并从中提取出一系列规则,机器学习算法最终使用这些机器从数据集中创造的规则。

决策树算法的学习分为如下几个步骤:

一、从数学上讨论如何划分数据集。

划分数据就要找到其决定性作用的特征,即分类效果最好的那个特征,所以要逐个评估每一个特征。完成第一次分类之后,原始数据被分为了几个数据集,这些数据集分布在第一个决策点的所有分支上,如果某个分支下的所有数据均属于同一类型,则无需对数据进行进一步的分类,反之,则需要再重复划分数据子集的过程,直到所有相同数据类型的数据均在同一个子集。

划分数据的大原则是:将无序数据变得更加有序。这里有两个巨牛的概念需要了解:熵和信息增益。

1、信息增益是特征选择中的一个重要指标。它定义一个特征能够为分类系统带来的信息数量。带来的信息越多就说明该信息越重要。那么如何衡量一个特征所带来的信息量?对于一个特征来说,当一个系统有它没它时系统信息量会发生变化,而前后的差值就是这个特征所带来的信息量,就是信息增益。

2、上面所说的信息量就是熵,熵被定义为信息的期望,所以计算熵即为两个关键点:信息和期望。

定义一个特征X,它可能的取值有n种,分别为x1、x2.···xn,相对应的概率为p(x1)、p(x2)···p(xn)。

信息定义为:



那么x的熵就被定义为:



意思是一个变量可能的变化越多,所携带的信息量越大。这里注意:熵和变量的具体取值没有关系,只和值的种类和发生的概率有关。

二、编写代码将理论应用到具体的数据集上。

有了上述的理论铺垫,下面使用具体的数据集举例:



表中包含五种海洋动物,特征包括:不浮出水面是否可以生存,以及是否存在脚蹼,并且将这些动物分成两类:鱼类和非鱼类。

将这一列表用代码表现,即为



下面开始计算熵:



最终的熵结果为:



我们来验证一下他的计算结果对不对,我们根据熵的计算公式可知,-2/5log2/5-3/5log3/5=0.971和上面结果一样,说明没错。

以上代码显示了信息熵的计算,除此之外还需要划分数据集,度量划分数据集的熵,以便判断是否正确的划分了数据集。我们将对每个特征划分数据集的结果计算一次信息熵,然后判断哪一个特征是划分数据集最好的划分方式。



这里需要注意函数extend()和append()的用法区别:



这里就可以很清楚的看到两者的区别。

如果根据第0列特征,即不浮出水面可以生存为标准进行划分,划分结果:



以上可以计算香农熵,又可以划分数据集,接下来就可以选择最好的数据集划分方式:



最佳的划分结果为:



三、编写代码构建决策树。

上述叙述已经完成了从数据集构造决策树算法所需的所有功能子模块:得到原始数据,基于最好的属性值进行划分。

然而由于特征值的数量可能多于两个,因此可能存在大于两个分支的数据集划分。第一次划分之后,数据将被向下传递到树分支的下一个节点,据此再次划分数据。

因此就可以采用递归的原则处理数据集。递归结束的条件是:程序遍历完所有的划分数据集的属性之后,或者每个分支下的所有实例都具有相同的分类。

如果数据集已经处理了所有的属性,但类标签依然不是唯一的,此时我们需要决定如何定义该叶子节点,在这种情况下,通常采用多数表决的方法决定该叶子节点的分类。



接下来进行决策树的创建:



这里注意:Python语言中函数参数为列表时,参数是按照引用方式传递。为了保证每次调用函数createTree()时不改变原始列表的内容,使用新变量subLabels代替原始列表。

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