交叉验证得分为0

时间:2018-01-13 07:25:56

标签: python scikit-learn cross-validation

我是数据分析的新手,所以如果这是一个新手问题,请原谅。我在相同的数据上运行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]所以我不确定这对我的数据或模型到底是什么意思。

有没有人有任何见解?

1 个答案:

答案 0 :(得分:2)

如果未指定cross_val_score中的“scoring”参数,则返回估算器的默认分数方法。对于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的预期值的常量模型,忽略输入特征,将得到R ^ 2得分为0.0。

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