决策树:网球数据集

数据挖掘 Python scikit-学习 熊猫
2022-02-27 08:44:34

我正在练习将 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))
2个回答

如果您跳过这一行:

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

并更改方法参数以训练您的模型,如下所示:

clf_entropy.fit(X, Y)

它应该按预期工作。

在代码中,您已将数据拆分为训练/测试。如果您已使用所有样本手动“训练”您的决策树,那么您有比 sklearn 算法更多的样本来进行计算,因此结果可能会发生变化。

您可以查看已选择哪些样本来训练树并使用这些样本进行计算。