我知道weka中的AUC / ROC区域(http://weka.wikispaces.com/Area+under+the+curve)是基于e Mann Whitney统计信息(http://en.wikipedia.org/wiki/Mann-Whitney_U)
但是我的疑问是,如果我有10个带标签的实例(Y或N,二进制目标属性),通过对数据集应用算法(即J48),那么在这10个实例上有10个预测标签。那么,究竟应该使用什么来计算AUC_Y,AUC_N和AUC_Avg?使用预测的排名标签Y和N还是实际标签(Y'和N')?还是我需要计算TP率和FP率?
谁能给我一个小例子,并指出基于曼恩·惠特尼(Mann Whitney)统计方法应使用哪些数据来计算AUC?提前致谢。
样本数据:
inst# actual predicted error PrY PrN
1 1:y 1:y *0.973 0.027
2 1:y 1:y *0.999 0.001
3 2:n 1:y + *0.568 0.432
4 2:n 2:n 0.382 *0.618
5 1:y 2:n + 0.421 *0.579
6 2:n 2:n 0.146 *0.854
7 1:y 1:y *1 0
8 1:y 1:y *0.999 0.001
9 2:n 2:n 0.11 *0.89
10 1:y 2:n + 0.377 *0.623
最佳答案
计算AUC基于对结果进行排名。我刚刚阅读了Mann-Whitney-U统计信息,我认为这基本上就是我一直在代码中执行此操作的方式。
首先,您需要一些东西来对您的结果进行排名。通常,这是分类器的决策值(例如distance to the hyperplane for SVMs),但WEKA大多使用分类概率。在您的示例中,PrY和PrN的总和为1,这很好,因此您可以选择任意一个,例如PrY。
然后,您通过PrN对实例进行排名:
inst# actual predicted error PrY PrN
7 1:y 1:y *1 0
8 1:y 1:y *0.999 0.001
2 1:y 1:y *0.999 0.001
1 1:y 1:y *0.973 0.027
3 2:n 1:y + *0.568 0.432
5 1:y 2:n + 0.421 *0.579
4 2:n 2:n 0.382 *0.618
10 1:y 2:n + 0.377 *0.623
6 2:n 2:n 0.146 *0.854
9 2:n 2:n 0.11 *0.89
根据Wikipedia关于Mann-Whitney-U统计信息的说法,您现在需要针对每个实际类进行总结,以了解另一类受到“殴打”的频率。对于正实例(y),这将是
0, 0, 0, 0, 1, 2 => Sum: 3
对于否定情况(n)
4, 5, 6, 6 => Sum: 21
因此,U_y = 3且U_n = 21,对其进行检查:
U_y + U_n = 24 = 6 * 4 = #y * #n
那么AUC_y将是(wikipedia之后)
AUC_y = U_y / (#y * #n) = 3 / 24 = 0.125
AUC_n = U_n / (#y * #n) = 21 / 24 = 0.875
现在,在这种情况下,我坚信AUC_n是您想要的AUC。我们按升序对PrN进行了排序,因此AUC_n是我们想要的。
我们所做的工作更加直观,图形化地描述如下:
我们根据实例的决策值/类别概率对它们进行排序。如果我们按PrN升序排列,则正面应该优先。 (如果按PrY升序排序,则负数应首先出现。)现在我们绘制一个从坐标(0,0)开始的图。每当我们遇到一个实际的积极实例时,我们就画一个单位。每次遇到否定实例时,我们都会向右划一个单位。这行代码现在按区域分开,在ASCII艺术中看起来像这样(我将尽快用一个体面的图像替换它):
|..##|
|.###|
|####|
|####|
|####|
|####|
分隔线是ROC及其下方的区域(因此称为AUC)。这里的AUC是21个单位,我们需要通过将其除以24的总面积进行归一化,得出21/24 = 0.875
您还可以进行已经标准化的整个计算,这等效于将其绘制为FPR与TPR。