繁体   English   中英

没有二元分类器的 scikit-learn 中的 auc 分数

[英]auc score in scikit-learn for no binary classifiers

我想计算不同分类器的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)说一句,我使用了: y_score = clf.fit(X_train, y_train).predict_proba(X_test) ,但我真的不知道使用它是否正确。

好的,所以首先要做的事情

clf.fit(X_train, y_train)

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

拟合后,您可以在另一个数据集上应用“.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 曲线,然后,移动到下一个类并建立另一个模型,依此类推)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM