我一直在寻找对此的解释,但还没有遇到过 - 在 scikit-learn 中,当我计算 的auc()时precision_recall_curve(),我得到的宏观指标与使用内置average_precision_score()函数时不同。根据文档,这是有道理的,因为auc()使用了梯形近似,因此平均精度更准确。但是,当我计算微观指标时,这些值是相同的。我试图理解这一点。
这是一个例子:
yhat_raw = np.array([[0.511, 0.62, 0.3],[0.11, 0.76, 0.945],[0.002, 0.671, 0.452],[0.9102, 0.783, 0.2]])
y = np.array([[0, 1, 1],[0, 0, 1],[0, 0, 0],[0, 1, 1]])
yhatmic = yhat_raw.ravel()
ymic = y.ravel()
prec["micro"], rec["micro"], _ = precision_recall_curve(ymic, yhatmic,
pos_label=1)
auc(rec["micro"], prec["micro"])
返回0.58305555555555544。
average_precision_score(ymic, yhatmic)返回0.62222222222222223。
在实际部署模型时,这些指标是相同的。我认为这是有道理的,考虑到在更大的范围内(例如,沿着数千个数据点的维度而不是len(rec['micro']) = 11本例中的数据点),梯形近似值更接近真实值。
我的问题是,为什么这些指标在macro案例中会有所不同?公平地说,在现实世界的部署中,微观评估有足够的数据点让梯形近似收敛到真实值,但宏观没有(通过约 3000 个测试示例计算,标签空间为约 2000 个标签)?