scucit中的auc得分 - 没有二元分类器

时间:2017-01-23 22:01:00

标签: python scikit-learn

我想为不同的分类器计算roc_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),但我真的不知道使用它是否正确。

1 个答案:

答案 0 :(得分:0)

好的,首先要做的事情

clf.fit(X_train, y_train)

这将使您的模型适合您的训练数据。第一个参数是特征,第二个参数是目标。好的,做得很好。

在fiting之后,您可以申请" .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”返回)。

所以,如果你有 y_true 的标签或多标签,那么这个函数就不会工作,它必须是二进制的。
另一方面, y_score 可以是二元或概率(范围从[0,1])

希望有所帮助!

编辑:如果您遇到多标签问题,您可以做的是一次处理一个不同的类。这样它将成为许多二进制二进制问题/模型。 (尝试构建一个模型来预测它是否为A类,然后执行它的roc曲线,然后继续下一个类并构建另一个模型,依此类推)