sklearn DecisionTreeClassifier更精确度更深入了吗?

时间:2016-05-08 00:43:59

标签: scipy scikit-learn decision-tree

我有两个学过的sklearn.tree.tree.DecisionTreeClassifier。两者都使用相同的训练数据进行训练。两者都为决策树学习了不同的最大深度decision_tree_model的深度为6small_model的深度为2。除了max_depth之外,没有指定其他参数。

当我想获得他们的训练数据准确度时,他们都是这样的:

small_model_accuracy = small_model.score(training_data_sparse_matrix, training_data_labels)
decision_tree_model_accuracy = decision_tree_model.score(training_data_sparse_matrix, training_data_labels)

令人惊讶的是输出是:

small_model accuracy: 0.61170212766
decision_tree_model accuracy: 0.422496238986

这怎么可能?当使用相同的训练数据学习时,具有较高最大深度的树不应该总是在训练数据上具有更高的准确度吗?可能是score函数,它会输出1 - accuracy或其他东西吗?

修改

  • 我刚测试它的最大深度更高。返回的值变得更低。这暗示它是1 - accuracy或类似的东西。

修改#2

我在处理培训数据时似乎犯了一个错误。我再次考虑了整个事情并得出结论:“如果深度更高,树不应该是这个的原因。那还有什么?训练数据本身。但我使用了相同的数据!也许我对之间的训练数据做了些什么?“ 然后我再次检查,我使用训练数据的方式有所不同。我需要将它从SFrame转换为scipy矩阵(可能也必须稀疏)。现在我在拟合两个模型后立即进行了另一个精度计算。这一项导致small_model的准确率为61%,decision_tree_model的精确度为64%。这只是增加3%,但仍然有点令人惊讶,但至少它是可能的。

修改#3

问题得到解决。我以错误的方式处理了训练数据,导致了不同的拟合。

以下是修正错误后的准确性图表:

Decision Tree Accuracy

这看起来是正确的,也可以解释为什么作业创建者选择选择6作为最大深度。

1 个答案:

答案 0 :(得分:1)

  

最大深度较高的树不应该总是更高   使用相同的训练数据学习时的准确度?

不,绝对不是永远。问题是,在拟合更复杂的树时,您的模型会过度拟合您的训练数据。因此,较低的分数会增加最大深度。