Matlab, как рассчитать AUC (площадь под кривой)? - PullRequest
7 голосов
/ 28 декабря 2011

У меня есть файл 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 ]

4 голосов
/ 01 марта 2012

просто добавь AUC = trapz (X, Y) к вашей программе и вы получите площадь под кривой

4 голосов
/ 28 декабря 2011

Самым простым способом является функция трапециевидного правила trapz.

Если известно, что ваши данные гладкие, вы можете попробовать использовать правило Симпсона, но в MATLAB нет ничего встроенного для интеграции числовых данных через правило Симпсона. (И я не уверен, как использовать это для данных x / y, где x не увеличивается постоянно)

1 голос
/ 16 июля 2013

[~, ~, ~, AUC] = perfcurve (метки, баллы, posclass);

% posclass может быть 1

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

1 голос
/ 02 мая 2013

Источник: Ссылка

Пример в MATLAB, чтобы помочь вам получить ваш ответ ...

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

Если у вас есть отрицательные значения в у , вы можете сделать, как,

y=max(y,0)
1 голос
/ 02 января 2012

Вы можете сделать что-то подобное:

AUC = sum((Y(1:end-1)+Y(2:end))/2.*...
  (X(2:end)-X(1:end-1)));
0 голосов
/ 19 июня 2014

Есть несколько вариантов trapz для человека, готового самостоятельно написать код.Эта ссылка показывает реализацию правила Симпсона с включенным кодом Python.Существует также File Exchange по правилу симпсонов.

...