我想计算不同分类器的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)
,但我真的不知道使用它是否正确。
好吧,所以第一件事是
clf.fit(X_train, y_train)
这将使您的模型与您的训练数据相匹配。第一参数是特征,第二参数是目标。好的,做得很好。
拟合后,您可以在另一个数据集上应用".product"或".product_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就是其中一个指标,但你必须注意你输入了什么函数,否则它就无法工作。如proc_auc_score页面所述(http://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html#sklearn.metrics.roc_auc_score),参数应为:
y_true:二进制标签指示符中的true二进制标签
y_score:目标分数可以是正类的概率估计、置信值,也可以是决策的非阈值度量(由某些分类器上的"decision_function"返回)
所以,如果你有标签,或者y_true的多标签,这个函数就不能工作了,它必须是二进制的
y_score另一方面可以是二进制或概率(范围从[0,1])
希望能有所帮助
编辑:如果你有一个多标签问题,你可以做的是一次处理一个不同的类。这样就会变成许多二进制问题/模型。(试着建立一个模型来预测它是否为a类,然后做它的roc曲线,然后转到下一类,建立另一个模型,以此类推)