决策树——是不是过拟合?

Posted

技术标签:

【中文标题】决策树——是不是过拟合?【英文标题】:Decision tree- is it overfitting?决策树——是否过拟合? 【发布时间】:2018-12-01 09:06:42 【问题描述】:

我正在构建一个树分类器,我想检查并修复可能的过度拟合。 这些是计算:

dtc = DecisionTreeClassifier(max_depth=3,min_samples_split=3,min_samples_leaf=1, random_state=0)
dtc_fit = dtc.fit(X_train, y_train)

print("Accuracy using Decision Tree:" ,round(score, 1), "%")

('Accuracy using Decision Tree:', 92.2, '%')


scores = cross_val_score(dtc_fit, X_train, y_train, cv=5)
print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
Accuracy: 0.91 (+/- 0.10)

我可以修复哪些可能的值以获得更好的结果,或者这些值已经可以了?

感谢您的帮助,我是初学者,因此不确定结果。

【问题讨论】:

数据集大小是多少?你可能想增加min_samples_leaf的值 @Ereli 数据集的大小是368,它不是一个大数据集... IMO 太小,没有真正的有效性。 这个问题无法回答,因为它很大程度上取决于问题和数据。 【参考方案1】:

不确定是否过拟合,但您可以尝试gridSearchCV,原因如下

它将您的数据集拆分为不同拆分的多个组合,因此您将了解决策树是否过度拟合您的训练集(尽管这可能不是一种有效的了解方式)

您可以通过制作各种参数的字典以及它们可以具有的值来添加各种参数

from sklearn.grid_search import GridSearchCV

parameters_dict = "max_depth": [2,5,6,10], "min_samples_split" : [0.1, 0.2, 0.3, 0.4], "min_samples_leaf" = [0.1, 0.2, 0.3, 0.4], "criterion": ["gini","entropy"]

dtc = DecisionTreeClassifier(random_state= 0)

grid_obj = GridSearchCV(estimator=dtc,param_grid=parameters_dict, cv=10)

grid_obj.fit(X_train,y_train)

#Extract the best classifier
best_clf = grid_obj.best_estimator_

您也可以尝试Recursive Feature Elimination with CV 以找到最佳功能。 (顺便说一句,这是可选的操作)

您可以检查其他指标,例如准确率、召回率、f1 分数等,以了解您的决策树是否没有过度拟合数据(或将某个类别的重要性置于其他类别之上)

另外,作为旁注,请确保您的数据不会出现类别不平衡问题。

这不是一个详尽的列表,也不一定是检查过度拟合的最佳方法,但您可以尝试一下。

【讨论】:

以上是关于决策树——是不是过拟合?的主要内容,如果未能解决你的问题,请参考以下文章

决策树如何防止过拟合

决策树过拟合检验

Gradient Boosting Decision Tree梯度决策提升树

决策树之剪枝

过拟合的问题

10、决策树集成--随机森林