Matlab,如何计算AUC(曲线下面积)?
我有一个文件Matlab,如何计算AUC(曲线下面积)?,matlab,octave,area,curve,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)。 如果打印,该点将生成一条曲
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)?最简单的方法是梯形规则函数
如果您的数据是平滑的,您可以尝试使用辛普森规则,但是MATLAB中没有内置任何东西可以通过辛普森规则对数值数据进行积分。(&我不知道如何将其用于x/y数据,因为x不会稳定增加)您可以这样做:
AUC = sum((Y(1:end-1)+Y(2:end))/2.*...
(X(2:end)-X(1:end-1)));
加上
AUC=trapz(X,Y)
给你的节目
您将得到曲线下的面积来源:
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)
[~,~,~,AUC]=性能曲线(标签、分数、等级)
%posclass可能是1
对于准备自己编写代码的人,有一些选项可以
trapz
。此链接显示的实现,包括python代码。还有一个关于辛普森一家的规则 视情况而定。这对你来说够好了吗?@Robert:这看起来像是函数曲线下的区域(Matlab有一大堆quad
xxxx()函数)。OP正在寻找数据的数值积分。Thanx伙计们,我试过使用trapz(),但奇怪的是,它总是给我负值。为什么会这样?如果它是一个区域,它应该总是积极的。。。有什么想法吗?塔克斯!如果曲线低于0,则面积实际上会减小。记住,这只是积分。要获得正AUC,您可能需要更改基线。例如,从Y
中减去min(Y)
。或者您可以使用abs(Y)
来汇总正区域和负区域。从技术上讲,如果您使用trapz(x,Y)
,结果的符号取决于Y的符号和x的变化符号。(记住:这是y-dx的积分)所以如果y值为正,但x值在减小,则会得到一个负数。事实上,它比这复杂一点:对于闭合曲线,符号应该是正的顺时针环绕,负的逆时针环绕(见)。奥利,你能为你使用的方程添加一个解释或链接吗?