Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab,如何计算AUC(曲线下面积)?_Matlab_Octave_Area_Curve - Fatal编程技术网

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值在减小,则会得到一个负数。事实上,它比这复杂一点:对于闭合曲线,符号应该是正的顺时针环绕,负的逆时针环绕(见)。奥利,你能为你使用的方程添加一个解释或链接吗?