python中的sklearn中决策树使用的是哪一种算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中的sklearn中决策树使用的是哪一种算法相关的知识,希望对你有一定的参考价值。

要弄清楚这个问题,首先要弄懂决策树三大流行算法ID3、C4.5和CART的原理,以及sklearn框架下DecisionTreeClassifier的帮助文档。
3个算法的主要区别在于度量信息方法、选择节点特征还有分支数量的不同。
ID3,采用熵(entropy)来度量信息不确定度,选择“信息增益”最大的作为节点特征,它是多叉树,即一个节点可以有多个分支。
C4.5,同样采用熵(entropy)来度量信息不确定度,选择“信息增益比”最大的作为节点特征,同样是多叉树,即一个节点可以有多个分支。
CART,采用基尼指数(Gini index)来度量信息不纯度,选择基尼指数最小的作为节点特征,它是二叉树,即一个节点只分两支。
然后你认真阅读sklearn的DecisionTreeClassifier的帮助文档,可以发现,度量信息的方法默认是Gini,但可以改成entropy,请按需选择;构建的树是二叉树;可以通过设置max_deepth、max_leaf等来实现“剪枝”,这是根据CART的损失函数减少的理论进行的。
所以总结说,如果信息度量方法按照默认的设置,那么sklearn所用的决策树分类器就是CART,如果改成了entropy,那么只是使用了别的度量方法而已。其实两者差不多。
参考技术A 1首先需要安装Cython,网上下载后进行本地安装pythonsetup.pyinstall2下载Sklearn包,进行本地安装(使用pip或easy_install总是出错,如cannotimportmurmurhash3_32,最终本地安装成功)3安装后可用nosetests-vsklearn来进行测试本回答被提问者采纳 参考技术B 好像是GINI,但是也可以选择信息增益

决策树 sklearn:网球数据集

【中文标题】决策树 sklearn:网球数据集【英文标题】:Decision Tree sklearn : PlayTennis Data Set 【发布时间】:2018-06-23 06:16:39 【问题描述】:

我正在练习将 sklearn 用于决策树,我正在使用打网球数据集

play_ 是目标列。

根据我的纸笔计算熵和信息增益,根节点应该是outlook_列,因为它的熵最高。

但不知何故,我当前的决策树以 湿度为根节点,看起来像这样:

我目前在 python 中的代码:

from sklearn.cross_validation import train_test_split 
from sklearn.tree import DecisionTreeClassifier 
from sklearn.metrics import accuracy_score 
from sklearn import tree 
from sklearn.preprocessing import LabelEncoder

import pandas as pd 
import numpy as np 

df = pd.read_csv('playTennis.csv') 

lb = LabelEncoder() 
df['outlook_'] = lb.fit_transform(df['outlook']) 
df['temp_'] = lb.fit_transform(df['temp'] ) 
df['humidity_'] = lb.fit_transform(df['humidity'] ) 
df['windy_'] = lb.fit_transform(df['windy'] )   
df['play_'] = lb.fit_transform(df['play'] ) 
X = df.iloc[:,5:9] 
Y = df.iloc[:,9]

X_train, X_test , y_train,y_test = train_test_split(X, Y, test_size = 0.3, random_state = 100) 

clf_entropy = DecisionTreeClassifier(criterion='entropy')
clf_entropy.fit(X_train.astype(int),y_train.astype(int)) 
y_pred_en = clf_entropy.predict(X_test)

print("Accuracy is :0".format(accuracy_score(y_test.astype(int),y_pred_en) * 100))

【问题讨论】:

我建议将标题更改为更具表现力且更针对您的问题的内容,以吸引答案。还可以考虑使数据集“可复制”,例如见here 另外,请发布有关如何显示树的完整代码。我无法复制上面给出的树。就我而言,湿度仍然最高,但熵不同。显示您如何手动计算熵也是可取的。 【参考方案1】:

我的猜测是,测试和火车拆分的发生方式是,湿度拆分最终比前景具有更好的信息增益。您是根据训练集还是根据整个数据集进行纸笔计算的?

【讨论】:

以上是关于python中的sklearn中决策树使用的是哪一种算法的主要内容,如果未能解决你的问题,请参考以下文章

B树和B+树分别是什么?区别在哪里?MySQL使用的是哪一种树?

sklearn中的交叉验证+决策树

机器学习-------sklearn决策树分析

python-sklearn数据拆分与决策树的实现

使用sklearn python通过决策树提取数据点的规则路径

sklearn决策树plot_tree中节点中的“值”是啥意思