2017-01-23 61 views
0

我想为不同的分类器计算roc_auc。有些不是二进制分类器。下面是我使用的代码的一部分:在scikit-learn中没有二进制分类器的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) 

不过,我得到了一些分类错误(例如近邻 ):

ValueError: bad input shape 

短短一句话,我用:y_score = clf.fit(X_train, y_train).predict_proba(X_test),但我真的不知道使用它是否正确。第一

clf.fit(X_train, y_train) 

+0

ROC曲线只能在二进制情况。它在多类设置中没有意义。 –

回答

0

好了,所以第一件事情,将适合你的模式,你的训练数据。第一个参数是特征,第二个参数是目标。好吧,很好地完成。

完成后,您可以在另一个数据集上应用“.predict”或“.predict_proba”以获得其结果的估计/预测。或者你可以两者都做配合,并在同一时间预测,因为你做了如下:

clf.fit(X_train, y_train).predict_proba(X_test) 

现在,这些都是你的预测,而不是你的分数。 你的分数将是预测和真值“(y_test)”的函数。 您可以使用不同的分数指标,取决于你有,如准确度,精密度,召回,F1等这类问题。(阅读更多http://scikit-learn.org/stable/modules/model_evaluation.html

现在,roc_auc_score是这些指标中的一个,但你得注意你输入的功能,否则它不会工作。由于roc_auc_score页面(http://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html#sklearn.metrics.roc_auc_score)进行解释,参数应该是:

y_true:二进制标签指标真正的二进制标签。
y_score:目标分数可以是正分类的概率估计值,置信度值,或非阈值测量的决策(由“decision_function”对某些分类器返回)。

所以,如果你有标签,或multilabels为y_true,功能无法正常工作,它得是二进制的。
y_score在另一方面可以是二进制或概率(范围从[0,1])

希望帮助!

编辑:如果你有多标签问题,你可以做的是一次处理不同的类。这样它将成为许多二进制二进制问题/模型。 (尝试建立一个模型来预测它的A级与否,然后做它的roc曲线,然后移动到下一个级别并构建另一个模型,等等)