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使用的是哪一种树?