我正在尝试使用 sklearn 决策树的简单示例。我将“number,is_power2,is_even”作为特征,而课程是“is_even”(当然这很愚蠢)
这是代码
from sklearn import tree
features =[[1,0,0] , [2,1,1] , [3,0,0] , [4,1,1] , [5,0,0] , [6,0,1] , [900,0,1] , [1001,0,0]] #val,pow2,even
labels = ['o' , 'e' , 'o' , 'e' , 'o' , 'e' , 'e' , 'o'] #is even
clf = tree.DecisionTreeClassifier()
clf = clf.fit(features,labels)
print (clf.predict([[203,0,0]]))
import pydot
import pydotplus
from IPython.display import Image
dot_data = tree.export_graphviz(clf, out_file=None,
feature_names=['number','pow2','even'],
class_names=['o','e'],
filled=True, rounded=True,
special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data)
# Image(graph.create_png())
graph.write_pdf("1.pdf")
决策树正确识别偶数和奇数,并且预测工作正常。
决策树基本上是这样的(pdf格式)
is_even<=0.5
/\
/ \
label1 label2
问题是这样的。label1 标记为“o”而不是“e”。但是,如果我将 class_names 放在导出函数中
class_names=['e','o']
那么,结果是正确的。我认为输出应该独立于 class_names 顺序。
我做错了什么,还是 class_names 的顺序很重要。如果后者为真,那么正确的顺序是什么(对于任意问题)