首页 > 解决方案 > 使用 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%

标签: pythonmachine-learningscikit-learndecision-tree

解决方案


我认为有一个明显的结论:您的标签与某些特征或至少与其中一个特征具有高度相关性。也许你的数据不是很好。

无论如何,您可以检查决策树模型的单个特征拆分如何影响模型预测。

使用model.feature_importances_属性来查看特征对于模型预测的“重要性”。

检查文档决策树分类器

如果您仍然认为您的模型预测不够好,我建议您更改模型,使用不同方法的模型。至少如果您必须使用决策树,您可以尝试Random Forest Classifier

它是一个集成模型。集成学习的基本思想是最终的模型预测是基于多个较弱的模型预测,弱学习器。检查制作集成模型的主要方法。

在随机森林分类器的情况下,弱学习器模型是深度较小的决策树。并且决策树只使用少数特征进行预测,并且每次特征都是随机选择的。选择的特征数量是一个超参数,因此需要对其进行调整。

查看链接和其他教程以获取更多信息。


推荐阅读