Matlab, как рассчитать AUC (площадь под кривой)?

у меня есть файл 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 ответов


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

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


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


вы можете сделать что-то вроде этого:

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

источник: ссылке

пример в 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] = perfcurve (метки, оценки, posclass);

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

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


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