【问题标题】:Decision Tree sklearn : PlayTennis Data Set决策树 sklearn:网球数据集
【发布时间】: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
  • 另外,请发布有关如何显示树的完整代码。我无法复制上面给出的树。就我而言,湿度仍然最高,但熵不同。显示您如何手动计算熵也是可取的。

标签: python numpy tree scikit-learn decision-tree


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-09-20
    • 2018-05-24
    • 2020-07-26
    • 2018-09-06
    • 2016-11-01
    • 1970-01-01
    • 2012-12-20
    • 2015-06-27
    • 2020-08-03
    相关资源
    最近更新 更多