【发布时间】:2020-10-23 06:49:19
【问题描述】:
我正在使用 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))))
这是输出: 决策树分类器(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%
【问题讨论】:
-
如果这有帮助,我会发布这个作为答案)
-
Harut Hunanyan 嗯,确实是这样。非常感谢。我应该怎么做才能使结果更好?
-
嗯,这取决于你的问题。首先你能说一下为什么你认为这是一个问题吗?我不确定,但我想这是因为您认为您的模型过度拟合。由于问题主要取决于数据,我只能推荐使用另一种模型,采用不同的方法。
-
我所说的所有内容现在都被添加为答案。
-
非常感谢。实际上,我的矩阵中有一个特征可以完全描述目标值。
标签: python machine-learning scikit-learn decision-tree