我想为不同的分类器计算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)
,但我真的不知道使用它是否正确。
答案 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曲线,然后继续下一个类并构建另一个模型,依此类推)