Scipy sklearn DecisionTreeClassifier深度越大准确性越低?
我有两个learnScipy sklearn DecisionTreeClassifier深度越大准确性越低?,scipy,scikit-learn,decision-tree,Scipy,Scikit Learn,Decision Tree,我有两个learnsklearn.tree.tree.DecisionTreeClassifiers。两者都使用相同的训练数据进行训练。两者都以不同的决策树最大深度学习。决策树模型的深度为6,小模型的深度为2。除了max_depth,没有指定其他参数 当我想获得他们两人的训练数据的准确性时,如下所示: small_model_accuracy = small_model.score(training_data_sparse_matrix, training_data_labels) decisi
sklearn.tree.tree.DecisionTreeClassifier
s。两者都使用相同的训练数据进行训练。两者都以不同的决策树最大深度学习。决策树模型的深度为6
,小模型的深度为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-精度
还是什么
编辑:
- 我只是测试了更高的最大深度。返回的值甚至更低。这暗示它是
1-精度或类似的东西
编辑#2:
这似乎是我在处理训练数据时犯的一个错误。我再次思考了整件事,并得出结论:“如果深度更高,那么树不应该是原因。还有什么?训练数据本身。但我使用了相同的数据!也许我对中间的训练数据做了些什么?”
然后我再次检查,在如何使用训练数据方面存在差异。我需要将它从一个SFrame转换成一个scipy矩阵(可能也必须是稀疏的)。现在,在拟合两个模型之后,我又进行了一次精度计算。这一结果使小型模型的准确率达到61%,而决策树模型的准确率达到64%。这只多了3%,仍然有点令人惊讶,但至少这是可能的
编辑#3:
问题解决了。我以错误的方式处理训练数据,这导致了不同的拟合
以下是修复错误后的精度图:
这看起来是正确的,也可以解释为什么作业创建者选择6作为最大深度
一棵最大深度更高的树不应该有更高的树吗
使用相同的训练数据学习时的准确性
不,绝对不总是。问题是,在拟合更复杂的树时,您将模型过度拟合到训练数据。因此,较低的分数会增加最大深度。如果该值score
返回的值越小,训练数据(不是验证数据!)的深度越高,该怎么办?这不是暗示过拟合吗?OP是在相同的训练数据中进行训练和测试。这里的过度拟合不应该是一个问题(事实上,当测试=训练数据时,过度拟合是可取的)。@imaluengo,术语过度拟合只有在模型拟合过程中对训练数据和样本外数据都有成本度量时才有意义。您指定最大深度
有什么原因吗?如果没有,算法将根据需要尝试扩展节点(粗略地说)。另外,您能否告知您可能已设置的其他参数,例如min\u samples\u split
和max\u leaf\u nodes
,这些参数可能很重要?@tuliocasagrande这是有原因的。将这些模型的深度设置为2和6是在线课程作业的一部分。没有指定其他参数,我将把这些信息添加到问题中。因为您使用的是训练数据,所以精确度较低也让我感到困惑。我能说的唯一一件事是,score()
只是一个旁路,而输出并不像您所想的那样是一个1-精度
。在内部,它只是做了一个score=y_true==y_pred
@tuliocasagrande Hm好的,谢谢你的信息,也许它会帮助我找到问题。也许值得你花时间看看你是否可以在其他()数据集上重现这个问题,这样你也许可以在这里分享一个最小的工作示例。