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 = 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. Существует также Обмен правила Симпсонов.