【问题标题】:Cross-validation score of 0交叉验证分数为 0
【发布时间】:2018-06-22 14:21:35
【问题描述】:

我是数据分析的新手,所以如果这是一个新手问题,请原谅。我正在对相同的数据运行 PLS 回归,其中 X 由序数变量组成,y 是指示事件是否发生的二元变量。我生成了一些交叉验证分数并得到以下结果:

X = threat.iloc[:,2:96]
y = threat.iloc[:,1]

pls1 = PLSRegression(n_components=10)
result = pls1.fit_transform(X, y)

scoresT = cross_val_score(pls1, X, y, cv=5)
print(scoresT)

[ 0.          0.          0.          0.55965802  0.        ]

我知道每个数字代表每个“折叠”的分数,但我希望有一系列数字,例如 [0.2, 0.4, 0.6, 0.7, 0.3] 而不是 [0, 0, 0, 0.5, 0] 所以我不确定这对我的数据或模型到底意味着什么。

有人有什么见解吗?

【问题讨论】:

  • 您应该提供一个可重现的最小示例,否则几乎无法提供帮助

标签: python scikit-learn cross-validation


【解决方案1】:

当cross_val_score中的“scoring”参数没有指定时,返回估计器默认的score方法。对于 PLSRegression(就像 sklearn 中的所有回归模型一样),score method

返回预测的决定系数 R^2。

系数R^2定义为(1 - u/v),其中u是残差平方和((y_true - y_pred) ** 2).sum(),v是总平方和( (y_true - y_true.mean()) ** 2).sum()。最好的分数是 1.0,它可以是负数(因为模型可以任意变坏)。始终预测 y 的期望值的常量模型,不考虑输入特征,将获得 0.0 的 R^2 分数。

您获得不优于常量模型交叉验证分数的原因可能是您正在使用回归模型来解决分类问题。请尝试使用分类模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-05
    • 2017-03-15
    • 2018-09-07
    • 2012-05-11
    • 2017-05-07
    • 2016-03-10
    • 2018-11-09
    • 2016-12-01
    相关资源
    最近更新 更多