如果您运行以下代码:
import numpy as np
from sklearn.linear_model.ridge import RidgeClassifierCV
classifier = RidgeClassifierCV(scoring='roc_auc')
x = np.array([[1, 2, 3], [3, 4, 9], [4, 9, 1], [8, 0, 4], [1, 1, 4], [1.1, 2, 4]])
y = np.array([True, False, True, False, True, False])
classifier.fit(x, y)
您收到异常:_ValueError:不支持连续格式_与堆栈跟踪:
文件“E:/myfolder/cv_issue.py”,第 7 行,在
分类器.fit(x, y)
文件“E:Anaconda2libsite-packagessklearnlinear_modelridge.py”,第 1258 行,合适
_BaseRidgeCV.fit(self, X, Y, sample_weight=sample_weight)
文件“E:Anaconda2libsite-packagessklearnlinear_modelridge.py”,第1022行,合适
estimator.fit(X, y, sample_weight=sample_weight)
文件“E:Anaconda2libsite-packagessklearnlinear_modelridge.py”,第 965 行,合适
对于我在范围内(len(self.alphas))]
文件“E:Anaconda2libsite-packagessklearnmetricsscorer.py”,第 159 行,在 __call__ 中
raise ValueError("{0} 格式不受支持".format(y_type))
ValueError:不支持连续格式
但是,很明显,我提供了一个二进制输出,所以我不希望这里出现这样的错误。 如果你用RidgeClassifierCV(scoring='roc_auc')
替换RidgeClassifierCV(scoring='roc_auc', cv=2)
,代码运行良好。
我的版本:
Windows-8.1-6.3.9600
('Python', '2.7.11 |Anaconda 2.5.0 (64-bit)| (默认, Jan 29 2016, 14:26:21) [MSC v.1500 64 位 (AMD64)]')
('NumPy', '1.10.4')
('SciPy', '0.17.0')
('Scikit-Learn', '0.17')
嗨,这里传递给记分员的值似乎是y
和cv_values[:,i]
作为y_true
和y_score
传递给roc_auc_score
,但在记录器中, _ThresholdScorer
接受参数X
和y
现在对应于y_true
和y_score
在你的情况下是
[ 1. -1. 1. -1. 1. -1.]
[ 0.45824999 -1.64622488 0.6707735 -0.74680963 0.07694918 0.49169546]
因此, y_type
的检查会引发continuous
类型的错误。 我不确定这是否是这里的预期行为,因为 Threshold scorer 是为此目的设计的。 抱歉,这里帮不上什么忙。
“roc_auc”是分类或排名指标,而不是回归指标。 所以它不接受连续的 y。
我相信 OP 表示他的目标是离散的,而不是连续的。 我也遇到了同样的错误,目标是离散的,只有 0 和 1。
最有用的评论
“roc_auc”是分类或排名指标,而不是回归指标。 所以它不接受连续的 y。