DecisionTreeClassifier' fit()返回具有相同数据的不同树

时间:2016-07-20 09:55:52

标签: python machine-learning scikit-learn

我一直在玩sklearn并使用虹膜数据在线跟踪一些简单的例子。

我现在开始玩其他一些数据了。我不确定这种行为是否正确并且我有误解,但每当我称之为契合(x,y)时,我会得到完全不同的树数据。因此,当我运行预测时,我会得到不同的差异(大约10%),即60%,然后是70%,然后是65%等......

我运行下面的代码两次输出2棵树,所以我可以在Word中读取它们。我尝试从另一个文档中搜索值,其中很多是我无法找到的。 我认为拟合(x,y)总会返回相同的树 - 如果是这种情况,那么我假设我的火车数据浮动正在打击我。

clf_dt = tree.DecisionTreeClassifier()
clf_dt.fit(x_train, y_train)
with open("output2.dot", "w") as output_file:
    tree.export_graphviz(clf_dt, out_file=output_file)

1 个答案:

答案 0 :(得分:1)

算法中有一个随机组件,您可以在user guide中阅读。相关部分:

  

在最优性的几个方面甚至对于简单的概念,已知学习最优决策树的问题是NP完全的。因此,实际的决策树学习算法基于启发式算法,例如贪婪算法,其中在每个节点处进行局部最优决策。这种算法不能保证返回全局最优决策树。这可以通过在集合学习器中训练多个树来减轻,其中特征和样本随机取样替换。

如果您希望每次都获得相同的结果,请将random_state参数设置为整​​数(默认情况下为None),每次都应得到相同的结果。