【问题标题】:bad accuracy with cross_val_scorecross_val_score 的准确性差
【发布时间】:2020-06-18 07:41:28
【问题描述】:

对于机器学习分类,我使用 10 折交叉验证:

kfold = StratifiedKFold(n_splits=10)

我拆分训练/测试数据:

X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X, y, test_size=0.3 )

对于一个分类器,得到 10 倍的准确率均值:

cross_val_score(classifier, X_train, y=Y_train, scoring='accuracy', cv=kfold, n_jobs=4))

这给了我 0,62 的准确度平均值。

为了确认准确度值,我做了一个预测:

Y_pred_train = classifier.predict(X_train)

print(metrics.classification_report(Y_train, Y_pred_train))

我得到: 精确召回 f1 分数支持

       0       0.92      0.96      0.94      2523
       1       0.95      0.89      0.92      1923

accuracy                           0.93      4446

宏观平均 0.93 0.93 0.93 4446 加权平均 0.93 0.93 0.93 4446

此准确性与上述不匹配。 怎么解释? 非常感谢。 泰奥

【问题讨论】:

    标签: python python-3.x machine-learning cross-validation


    【解决方案1】:

    这里的问题是您在 X_train 上训练模型,然后在完全相同的数据集上运行预测:

    Y_pred_train = classifier.predict(X_train)
    

    您显然获得了很好的分数,因为该模型可以很好地拟合训练数据。机器学习的重点是处理以前看不见的数据,即在训练时已知的数据之间进行泛化。要解决此问题,只需运行预测并报告测试数据:

    Y_pred_test = classifier.predict(X_test)
    
    print(metrics.classification_report(Y_test, Y_pred_test))
    

    【讨论】:

      【解决方案2】:

      谢谢。 事实上,我想比较使用 cross_val_score() 和 .predict() 函数获得的准确度值。 对我来说,在同一个火车数据集上,两者应该是相同的。

      但是使用 cross_val_score() 函数和 predict() 分类器函数得到的准确率值是不一样的。

      看我在同一个训练数据集上训练 cross_val_score() 和 predict()。 cross_val_score(, X_train, y=Y_train, score='accuracy', cv=kfold, n_jobs=4)) 的准确度值 => 给我 0,62。

      .predict(X_train) 的准确度值 => 给我 0.92(在我为我的分类器网格搜索了最佳超参数之后。)

      当我调用时,cross_val_score 的低准确度值是否可以通过默认超参数来解释 cross_val_score(, X_train, y=Y_train, score='accuracy', cv=kfold, n_jobs=4))?

      非常感谢。 西奥

      【讨论】:

        猜你喜欢
        • 2017-09-27
        • 2023-03-08
        • 2018-06-15
        • 2021-09-12
        • 2019-10-12
        • 1970-01-01
        • 2021-09-07
        • 2021-11-12
        • 2020-06-03
        相关资源
        最近更新 更多