Python scikit学习中非二进制分类器的auc分数

Python scikit学习中非二进制分类器的auc分数,python,scikit-learn,Python,Scikit Learn,我想计算不同分类器的roc\u auc。有些不是二进制分类器。以下是我使用的代码的一部分: if hasattr(clf, "decision_function"): y_score = clf.fit(X_train, y_train).decision_function(X_test) else: y_score = clf.fit(X_train, y_train).predict_proba(X_test) AUC=roc_auc_score(y_test, y_sco

我想计算不同分类器的
roc\u auc
。有些不是二进制分类器。以下是我使用的代码的一部分:

if hasattr(clf, "decision_function"):
    y_score = clf.fit(X_train, y_train).decision_function(X_test)
else:
    y_score = clf.fit(X_train, y_train).predict_proba(X_test)

AUC=roc_auc_score(y_test, y_score)
但是,对于一些分类器(最近邻),我得到了一个错误 例如:


只是一句话,我用了:
y\u score=clf.fit(X\u train,y\u train)。predict\u proba(X\u test)
,但我真的不知道使用它是否正确。

好的,首先要做的事情是

clf.fit(X_train, y_train)
这将使您的模型适合您的培训数据。第一个参数是特征,第二个参数是目标。好的,做得很好

拟合后,您可以在另一个数据集上应用“.predict”或“.predict_proba”,以获得其结果的估计/预测。或者您可以同时进行拟合和预测,如下所示:

clf.fit(X_train, y_train).predict_proba(X_test)
这是你的预测,不是你的分数。 你的分数将是预测值和真实值(y_测试)的函数。 根据问题的类型,您可以使用不同的评分标准,例如准确性、精确性、召回率、f1等。。(更多信息请访问)

现在,roc_auc_分数是这些指标之一,但你必须注意你输入的函数,否则它将无法工作。如roc_auc_分数页()所述,参数应为:

y\u true:true二进制标签指示器中的二进制标签
y_分数:目标分数可以是正类的概率估计、置信值或决策的非阈值度量(由某些分类器上的“决策函数”返回)

因此,如果你有标签,或者为y_true设置多标签,那么函数就不能工作,它必须是二进制的
y_得分另一方面,可以是二元或概率(范围从[0,1])

希望有帮助


编辑:如果你遇到了多标签问题,你能做的就是一次处理一个不同的类。这样,它将成为许多二进制问题/模型。(试着建立一个模型来预测它的类别是否为a,然后做它的roc曲线,然后,转到下一个类别并建立另一个模型,依此类推)

roc曲线只在二元情况下才真正定义。这在多类设置中没有真正意义。
clf.fit(X_train, y_train).predict_proba(X_test)