python - 如何手动计算 ROC 的 AUC?
问题描述
我有一个如下所示的数据集:
ID Class Predicted Probabilities
1 1 0.592
2 1 0.624
3 0 0.544
4 0 0.194
5 0 0.328
6 1 0.504
. . .
. . .
我的任务是手动计算 AUC……但不确定如何计算!
我知道如何计算 TPR 和 FPR 来创建 ROC 曲线。我将如何使用这些数据来计算 AUC?不允许使用 scikit-learn 之类的库。我到处寻找,但似乎找不到正确的答案。感谢大家!
解决方案
您需要使用您的预测类别和真实类别计算真阳性率和假阳性率,同时改变您的类别阈值 (T),即您用来预测观察结果是属于 0 类还是 1 类的截止值。
您需要一个数据集,其标题看起来像......
ID、预测概率、预测类、真类、阈值、真阳性标志、假阳性标志
(有关详细信息,请参阅https://en.wikipedia.org/wiki/Receiver_operating_characteristic)。如果您查看 Wiki 页面,您会注意到它们甚至在“曲线下面积”中提供了快速简便的离散估计。
AUC 代表“曲线下面积”,因此您可能需要执行某种数值积分。在这种情况下,TPR 将是您的 Y,FPR 将是您在每个 T 值处的 X。
如果你想保持简单,你可以尝试使用梯形规则 ( https://en.wikipedia.org/wiki/Trapezoidal_rule )。
如果您不想自己实现,可以使用 numpy.trapz (参见:https ://docs.scipy.org/doc/numpy/reference/generated/numpy.trapz.html),但构建起来并不困难从头开始(请参阅:Python 中的梯形规则)。
您应该能够很容易地仅使用数学和 numpy 在 Python 中为这些函数编写函数。事实上,您可能根本不需要任何库。
推荐阅读
- android - 无法从 API 获得响应
- mysql - 按 id 更新最近更新的行
- api - 如何在 React Native 中循环嵌套数组
- r - 如何在不匹配元素的情况下将数据集与某些相同的列合并,而是将它们添加到向量中?
- ios - 如何从 AV 播放器的播放头获取当前清单?
- python-3.x - 如何更新列表中的字典值?
- python - 在熊猫数据框中查找重复项时出现不可散列列表错误
- python - 实现一个可逆迭代类来替换一个生成器
- c++ - 使用 patchelf 和备用 glibc 版本时找不到 libstdc++.so
- c# - Web API JSON 反序列化在 setter 之前调用 getter