首页 > 解决方案 > 决策树——是否过拟合?

问题描述

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

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)

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

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

标签: pythonscikit-learnclassificationdecision-tree

解决方案


不确定它是否过拟合,但您可以尝试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_
    
  • 您也可以尝试使用 CV 进行递归特征消除以找到最佳特征。(顺便说一句,这是可选的事情)

  • 您可以检查其他指标,例如精度、召回率、f1-score 等,以了解您的决策树是否没有过度拟合数据(或者对一个类的重要性超过其他类)

  • 此外,作为旁注,请确保您的数据不会受到类别不平衡问题的影响。

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


推荐阅读