我的文件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)?
答案 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。