决策树-是否过拟合?

时间:2018-06-21 23:08:19

标签: python scikit-learn classification decision-tree

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

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)

为了获得更好的结果,我可以修正哪些可能的值?也许这些值已经很好了?

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

1 个答案:

答案 0 :(得分:0)

不确定确切是否过拟合,但由于以下原因,您可以尝试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-分数等,以了解您的决策树是否未过度拟合数据(或相对于其他类别重视一类)

  • 此外,请注意,您的数据不会受到类不平衡问题的困扰。

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