【问题标题】:Classification, cross_val_score() returns an array of 1分类,cross_val_score()返回一个1的数组
【发布时间】:2023-03-24 06:30:02
【问题描述】:

我有这个管道,其中X_trainy_train 都是具有相同行数的数组(所有整数和浮点数,y_train 是二进制,值为 1 和 0)。当我运行它时,一切似乎都很顺利。这是代码:

from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.impute import KNNImputer
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score, KFold

seed = 7
kfold = KFold(n_splits=10)

pipe = Pipeline([
    ('Scaler', StandardScaler()),
    ("Imputer", KNNImputer()),
    ('ML', RandomForestClassifier(max_depth=3))])

results = cross_val_score(pipe, X_train, y_train, cv=kfold, scoring="roc_auc")

当我尝试打印结果时,它给了我这个:

print(results)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])

它给出了一个由 10 个值组成的数组。

  • 为什么?
  • 如何访问这些模型?
  • 我该如何选择最好的(假设它们具有不同的值)?

【问题讨论】:

    标签: machine-learning scikit-learn classification


    【解决方案1】:

    cross_val_score 函数的文档中对此进行了解释。

    在您的示例中,您获得每个折叠的 ROC AUC(通过选择 scoring 参数)

    我猜你的模型严重过度拟合数据,这就是 AUC 始终为 1.0,即最大值

    【讨论】:

    • 知道了,但是我如何访问这些模型以便在 X_test 上进行预测?有什么方法可以选择最好的吗? (假设它们不是全部)
    • 这是一个完全不同的问题。通常,比如说在 gaggle 挑战中,交叉验证分数会给你一个性能估计。现在,您通常希望在部分或全部训练数据上 fit 它。拟合好估算器(即管道)后,您可以使用 predict 方法对不同(例如测试)数据创建预测
    猜你喜欢
    • 2021-01-30
    • 2015-06-27
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 2020-05-27
    • 2018-04-17
    相关资源
    最近更新 更多