关于python编程决策树的问题,有没有大神来解答。。。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于python编程决策树的问题,有没有大神来解答。。。相关的知识,希望对你有一定的参考价值。

用python写code,来编程一个决策树,来分类数据组里的数据,最后分成两部分,一类收入超过50000,一类收入低于50000,,有没有python大神。。求助。。
因为现在不知道该如何继续写下去,即使只是给我一个例子,也好。。。

有一本《集体智慧编程》的书,里面有详细的讲解,而且有python的示例代码。

建议你看看。

参考技术A 这才一层决策树基本都算不上个树,直接数组遍历然后分类就完了。

Python决策树的python实现

【Python】决策树的python实现

1. 决策树是什么?

简单地理解,就是根据一些 feature 进行分类,每个节点提一个问题,通过判断,将数据分为几类,再继续提问。这些问题是根据已有数据学习出来的,再投入新数据的时候,就可以根据这棵树上的问题,将数据划分到合适的叶子上。

技术分享

2. 决策树有什么算法?

常用的几种决策树算法有ID3、C4.5、CART:

ID3:选择信息熵增益最大的feature作为node,实现对数据的归纳分类。

C4.5:是ID3的一个改进,比ID3准确率高且快,可以处理连续值和有缺失值的feature。

CART:使用基尼指数的划分准则,通过在每个步骤最大限度降低不纯洁度,CART能够处理孤立点以及能够对空缺值进行处理。

3. 数学原理?

ID3: Iterative Dichotomiser 3

技术分享

下面这个数据集,可以同时被上面两颗树表示,结果是一样的,而我们更倾向于选择简单的树。

那么怎样做才能使得学习到的树是最简单的呢?

技术分享

下面是 ID3( Iterative Dichotomiser 3 )的算法:

技术分享

例如下面数据集,哪个是最好的 Attribute?

技术分享

用熵Entropy来衡量:

E(S) 是数据集S的熵

i 指每个结果,即 No,Yes的概率

技术分享

E越大意味着信息越混乱,我们的目标是要让E最小。

E在0-1之间,如果P+的概率在0.5, 此时E最大,这时候说明信息对我们没有明确的意义,对分类没有帮助。

技术分享

但是我们不仅仅想要变量的E最小,还想要这棵树是 well organized。

所以用到 Gain:信息增益

技术分享

意思是如果我后面要用这个变量的话,它的E会减少多少。

技术分享

例如下面的数据集:

技术分享

先计算四个feature的熵E,及其分支的熵,然后用Gain的公式计算信息增益。

技术分享

再选择Gain最大的特征是 outlook。

第一层选择出来后,各个分支再继续选择下一层,计算Gain最大的,例如分支 sunny 的下一层节点是 humidity。

技术分享

C4.5

ID3有个局限是对于有大量数据的feature过于敏感,C4.5是它的一个改进,通过选择最大的信息增益率 gain ratio 来选择节点。而且它可以处理连续的和有缺失值的数据。

技术分享

例如 outlook 作为第一层节点后,它有 3 个分支,分别有 5,4,5 条数据,则 SplitInfo(5,4,5) = -5/14log(5,14)-4/14log(4,14)-5/14(5,14) ,其中 log(5,14) 即为 log2(5/14)。

下面是一个有连续值和缺失值的例子:

技术分享

连续值

第一步计算 Gain,除了连续值的 humudity,其他步骤和前文一样。

要计算 humudity 的 Gain 的话,先把所有值升序排列:

{65, 70, 70, 70, 75, 78, 80, 80, 80, 85, 90, 90, 95, 96}

然后把重复的去掉:

{65, 70, 75, 78, 80, 85, 90, 95, 96}

如下图所示,按区间计算 Gain,然后选择最大的 Gain (S, Humidity) = 0.102

技术分享

因为 Gain(S, Outlook) = 0 .246,所以root还是outlook:

技术分享

缺失值

处理有缺失值的数据时候,用下图的公式:

技术分享

例如 D12 是不知道的。

计算全集和 outlook 的 info,

技术分享

其中几个分支的熵如下,再计算出 outlook 的 Gain:

技术分享

比较一下 ID3 和 C4.5 的准确率和时间:

accuracy :

技术分享

execution time:

技术分享

4. 编码实现算法?

接下来以 C4.5 的代码为例:

1. 定义数据:

技术分享

2. 计算熵:

技术分享

3. 选择最大的gain ratio对应的feature:

技术分享

4. 划分数据,为下一层计算准备:

技术分享

5. 多重字典构建树:

技术分享

6. 可视化决策树的结果:

技术分享
技术分享

 

 
 
技术分享

微信扫一扫
关注该公众号

 


以上是关于关于python编程决策树的问题,有没有大神来解答。。。的主要内容,如果未能解决你的问题,请参考以下文章

请教关于Unity5.3的烘培问题,烘培后不显示阴影,求大神解答

关于通过将 random_state 值设置为整数来生成最佳决策树的困惑?

关于机器学习中决策树的相关问题也谈随机森林

python问题,跪求大神解答

用于实现决策树的语言

关于决策树的预测