决策树分类器预测从模型的一次运行变为下一次

数据挖掘 scikit-学习 决策树 预言
2022-02-22 09:14:26

我正在使用基于Jupyter 笔记本['male', 'female']的 sklearn 运行一个非常基本的性别分类器。DecisionTreeClassifier[height, weight, shoe size]

当我继续运行模型时,对于相同的输入,预测会从male变为。female

我不明白这怎么可能。模型的构建不应该是完全确定的,因此每次针对特定输入输出相同的预测吗?

这是我的代码:

X = [[190, 90, 43], [165, 65, 38], [170, 70, 39], [160, 56, 36], [190, 88, 45], 
[164, 63, 37]]
Y = ['male', 'female', 'male', 'female', 'male', 'female']

clf = tree.DecisionTreeClassifier()
clf.fit(X, Y)

print(clf.predict([[200, 70, 37]]))
1个回答

虽然这是重复的,并且建议的链接回答了您的问题,但出于学习目的,我建议您在每次进行新运行时绘制您的 DecisionTree,以自己查看幕后发生的情况:

from sklearn.tree import DecisionTreeClassifier
from sklearn.externals.six import StringIO  

from IPython.display import Image  
from sklearn.tree import export_graphviz
import pydotplus
dot_data = StringIO()

X = [[190, 90, 43], [165, 65, 38], [170, 70, 39], [160, 56, 36], [190, 88, 45], [164, 63, 37]]
Y = ['male', 'female', 'male', 'female', 'male', 'female']

clf = DecisionTreeClassifier()
clf.fit(X, Y)

export_graphviz(clf, out_file=dot_data,  
                filled=True, rounded=True,
                special_characters=True)

graph = pydotplus.graph_from_dot_data(dot_data.getvalue())  
Image(graph.create_png())

一旦你可能得到:

在此处输入图像描述

在 X0 功能上进行拆分的位置,下次运行时您可能会得到:

在此处输入图像描述

在 X1 特征上进行拆分。

如果你想在每次运行时重现你的结果,你可以使用random_state = a_random_number,然后你应该期望每次都得到相同的结果,因为每次都构建了同一棵树!