Answers:
几乎所有scikit-learn的分类器都可以给出决策值(通过decision_function
或predict_proba
)。
根据决策值,可以直接计算精确调用和/或ROC曲线。scikit-learn在其指标子模块中提供了这些功能。
一个最小的示例,假设您拥有data
并且labels
具有适当的内容:
import sklearn.svm
import sklearn.metrics
from matplotlib import pyplot as plt
clf = sklearn.svm.LinearSVC().fit(data, labels)
decision_values = clf.decision_function(data)
precision, recall, thresholds = sklearn.metrics.precision_recall_curve(labels, decision_values)
plt.plot(recall, precision)
plt.show()
precision_recall_curve
计算整个F1。如何只计算负数?
在遇到这个问题之前,我已经为自己解决了这个问题,所以我决定分享我的解决方案。
它使用的方法与Marc Claesen提出的方法相同,但回答了有关如何调整分类器以在查全召回率的精度轴上更高的实际问题。
X_test是数据,y_test是真实标签。分类器应已安装。
y_score = clf.decision_function(X_test)
prcsn,rcl,thrshld=precision_recall_curve(y_test,y_score)
min_prcsn=0.25 # here is your precision lower bound e.g. 25%
min_thrshld=min([thrshld[i] for i in range(len(thrshld)) if prcsn[i]>min_prcsn])
这就是您使用新学习的最小阈值来调整预测的方法(否则,您将只需要调用预报(X_test))
y_pred_adjusted=[1 if y_s>min_thrshld else 0 for y_s in y_score]
很高兴听到您对此调整配方的反馈。
这是功能
产生类概率。然后使用各种指标来调整阈值P,您可以通过遵循伪代码在决策中使用该阈值
如果p(y)> P,则y = 1否则y = 0 endif