Matlab,如何计算AUC(曲线下面积)?

时间:2011-12-28 19:44:00

标签: matlab octave area curve

我的文件data.txt包含两列和N行,如下所示:

0.009943796 0.4667975
0.009795735 0.46777886
0.009623984 0.46897832
0.009564759 0.46941447
0.009546991 0.4703958
0.009428543 0.47224948
0.009375241 0.47475737
0.009298249 0.4767201
[...]

文件中的每个值对应一个点坐标(x,y)。 如果绘制,则此点生成曲线。我想计算这条曲线的曲线下面积(AUC)。

所以我加载数据:

data = load("data.txt");
X = data(:,1);
Y = data(:,2);

因此,X包含点的所有x坐标,Y包含所有y坐标。

我如何计算曲线下面积(AUC)?

6 个答案:

答案 0 :(得分:4)

最简单的方法是梯形规则函数trapz

如果您的数据是平滑的,您可以尝试使用Simpson的规则,但MATLAB没有内置任何内容来通过Simpson规则集成数值数据。 (&我不知道如何将x用于x / y数据,而x不会稳定增加)

答案 1 :(得分:4)

添加 AUC =陷阱(X,Y) 到你的程序 你会得到曲线下面积

答案 2 :(得分:1)

你可以这样做:

AUC = sum((Y(1:end-1)+Y(2:end))/2.*...
  (X(2:end)-X(1:end-1)));

答案 3 :(得分:1)

来源:Link

MATLAB中的一个例子可以帮助您得到答案......

x=[3 10 15 20 25 30];
y=[27 14.5 9.4 6.7 5.3 4.5];
trapz(x,y)

如果你在 y 中有负值,你可以这样做,

y=max(y,0)

答案 4 :(得分:1)

[〜,〜,〜,AUC] = perfcurve(标签,分数,posclass);

%posclass可能是1

http://www.mathworks.com/matlabcentral/newsreader/view_thread/252131

答案 5 :(得分:0)

对于准备自行编码的人来说,trapz有一些选项。此链接显示Simpson's rule的实现,包含python代码。辛普森一家的规则也有File Exchange