python - 决策树——是否过拟合?
问题描述
我正在构建一个树分类器,我想检查并修复可能的过度拟合。这些是计算:
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)
我可以修复哪些可能的值以获得更好的结果,或者这些值已经可以了?
感谢您的帮助,我是初学者,因此不确定结果。
解决方案
不确定它是否过拟合,但您可以尝试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 等,以了解您的决策树是否没有过度拟合数据(或者对一个类的重要性超过其他类)
此外,作为旁注,请确保您的数据不会受到类别不平衡问题的影响。
这不是一个详尽的列表,也不一定是检查过度拟合的最佳方法,但您可以尝试一下。
推荐阅读
- c - 从文件读取的意外输出
- java - IntelliJ 上的 JavaFX 安装
- reactjs - 使用 useLazyQuery 挂钩调用查询时如何重新获取查询?
- kotlin - 如何将表添加到 from 子句?
- arrays - 如何在 Xamarin.Forms C# 代码背后创建堆叠的“VisualElements”数组?
- vue-router - Vue cli路由和获取文件的问题
- python - 命名数据框时如何添加字符串作为前缀
- c++ - ADL 名称查找问题,正在使用 std::swap;与函数重载或内部范围函数隐藏外部范围函数相关的交换(a,b)?
- java - 如何使用 Quarkus 在 Kafka 的同一主题中设置多个消费者
- typescript - 无法识别扩展运算符的重载方法