如何手动计算ROC的AUC?

时间:2018-12-13 20:10:46

标签: python roc auc

我有一个看起来像这样的数据集:

<html>
    <head>
        <title>asd</title>
    </head>
    <body>
        <div id="gallery">
            <div class="thumb">
                <img src="https://picsum.photos/155/155?image=0">
            </div>
            <div class="thumb">
                <img src="https://picsum.photos/155/155?image=100">
            </div>
            <div class="thumb" style="height:250px;"> <!-- specific DIV to expand vertically !-->
                <img src="https://picsum.photos/155/155?image=200">
            </div>
            <div class="thumb">
                <img src="https://picsum.photos/155/155?image=350">
            </div>
            <div class="thumb">
                <img src="https://picsum.photos/155/155?image=400">
            </div>
            <div class="thumb">
                <img src="https://picsum.photos/155/155?image=500">
            </div>
            <div class="thumb">
                <img src="https://picsum.photos/155/155?image=600">
            </div>
            <div class="thumb">
                <img src="https://picsum.photos/155/155?image=700">
            </div>
            <div class="thumb">
                <img src="https://picsum.photos/155/155?image=800">
            </div>
            <div class="thumb">
                <img src="https://picsum.photos/155/155?image=900">
            </div>
            <div class="thumb">
                <img src="https://picsum.photos/155/155?image=950">
            </div>
            <div class="thumb">
                <img src="https://picsum.photos/155/155?image=990">
            </div>
        </div>
    </body>
</html>

我受命手动计算AUC ...但不确定如何计算!

我知道如何计算TPR和FPR来创建ROC曲线。我将如何使用这些数据来计算AUC?不允许像scikit-learn这样的库。我到处都看过,但似乎找不到合适的答案。谢谢大家!

1 个答案:

答案 0 :(得分:2)

您需要使用预测的和真实的类别来计算真实的正误假率,同时改变类别阈值(T),即用来预测观察值属于0类还是1类的临界值。

您需要一个数据集,其标题应类似于...

ID,预测的概率,预测的类别,真实的类别,阈值,正确的正标志,错误的正标志

(有关详细信息,请参见https://en.wikipedia.org/wiki/Receiver_operating_characteristic)。如果您查看Wiki页面,您会发现它们甚至在“曲线下面积”内提供了快速简便的离散估计。

AUC代表“曲线下的面积”,因此您可能需要执行某种数值积分。在这种情况下,TPR将是您在每个T值处的Y,FPR是您的X。

如果要保持简单,可以尝试使用梯形规则(https://en.wikipedia.org/wiki/Trapezoidal_rule)。

如果您不想自己实现此功能,则可以使用numpy.trapz(请参阅:https://docs.scipy.org/doc/numpy/reference/generated/numpy.trapz.html),但是从头开始构建也不难(请参阅:Trapezoidal rule in Python)。

您应该能够仅使用数学和numpy轻松地在Python中为这些函数编写函数。实际上,您可能根本不需要任何库。