python - 使用 sklearn 的决策树分类器 100% 准确率
问题描述
我正在使用 sklearn 的决策树分类器,但我得到了 100% 的分数,但我不知道出了什么问题。我已经测试了 svm 和 knn,两者都给出了 60% 到 80% 的准确率并且看起来还可以。这是我的代码:
from sklearn.tree import DecisionTreeClassifier
maxScore = 0
index = 0
Depths = [1, 5, 10, 20, 40]
for i,d in enumerate(Depths):
clf1 = DecisionTreeClassifier(max_depth=d)
score = cross_val_score(clf1, X_train, Y_train, cv=10).mean()
index = i if(score > maxScore) else index
maxScore = max(score, maxScore)
print('The cross val score for Decision Tree classifier (max_depth=' + str(d) + ') is ' +
str(score))
d = Depths[index]
print()
print("So the best value for max_depth parameter is " + str(d))
print()
# Classifying
clf1 = DecisionTreeClassifier(max_depth=d)
clf1.fit(X_train, Y_train)
preds = clf1.predict(X_valid)
print(" The accuracy obtained using Decision tree classifier is {0:.8f}%".format(100*
(clf1.score(X_valid, Y_valid))))
这是输出:Decision Tree classifier (max_depth=1) 的交叉验证分数为 1.0
决策树分类器的交叉值得分 (max_depth=5) 为 0.9996212121212121
决策树分类器 (max_depth=10) 的交叉验证分数为 1.0
决策树分类器 (max_depth=20) 的交叉验证分数为 1.0
决策树分类器的交叉验证分数(max_depth=40)为 0.9996212121212121
所以 max_depth 参数的最佳值为 1
使用决策树分类器获得的准确率为 100.00000000%
解决方案
我认为有一个明显的结论:您的标签与某些特征或至少与其中一个特征具有高度相关性。也许你的数据不是很好。
无论如何,您可以检查决策树模型的单个特征拆分如何影响模型预测。
使用model.feature_importances_
属性来查看特征对于模型预测的“重要性”。
检查文档决策树分类器。
如果您仍然认为您的模型预测不够好,我建议您更改模型,使用不同方法的模型。至少如果您必须使用决策树,您可以尝试Random Forest Classifier。
它是一个集成模型。集成学习的基本思想是最终的模型预测是基于多个较弱的模型预测,弱学习器。检查制作集成模型的主要方法。
在随机森林分类器的情况下,弱学习器模型是深度较小的决策树。并且决策树只使用少数特征进行预测,并且每次特征都是随机选择的。选择的特征数量是一个超参数,因此需要对其进行调整。
查看链接和其他教程以获取更多信息。
推荐阅读
- reactjs - react.js中axios响应中如何调用props函数
- java - List > 和 List > 以及如何正确使用?
- python - Python(json)如何将同名的每个键添加到列表中
- ios - Angular / Ionic 移动应用程序 ios 不使用 angularfire 从 Firebase 获取
- dynamic - 激活动态命名的工作簿
- odoo - 如何在qweb中做colspan?
- android-studio - 在 Android Studio 中同步 Viewpager
- javascript - 禁用 keyUp 上的默认操作
- python - 在python中生成所有可能的数组组合(不重复)
- python - 如何为我的 python 应用程序创建安全证书