2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 ROC Curve в Wolfram Mathematica
Сообщение01.02.2016, 09:41 
Аватара пользователя
Привет. Задача такая: есть три набора данных (A,B,C), для каждого из них находим распределения с помощью SmoothKernelDistribution: DistA, DistB, DistC. После этого необходимо построить параметрическую ROC кривую (кривую ошибок), для чего нужно интегрировать полученные распределения, где параметр t находится в нижнем пределе интегрирования. В Mathematica
Код:
ParametricPlot[{NIntegrate[PDF[DistA, x], {x, t, 4}], (NIntegrate[PDF[DistB, x], {x, t, 4}] + NIntegrate[PDF[DistC, x], {x, t, 4}])/2}, {t, 0, 4}]
с большим трудом рисуется ROC кривая. Но крайне важным в этой всей задаче, является определение площади под ней. Есть несколько методов:
1. попытка посчитать площадь по известной формуле $S=\int_a^by(t)x'(t)\,dt$.
Код:
(NIntegrate[(PDF[DistB, t] + PDF[DistC, t])*NIntegrate[PDF[DistA, x], {x, t, 4}], {t, 0, 1}])/(-2)

Ошибка:
Код:
NIntegrate::nlim: x = t is not a valid limit of integration. >>
понятно на что она ругается, но непонятно как ей описать задачу правильно.

2. Попытка построить параметрическую область ParametricRegion и вычислить ее площадь с помощью Area
Код:
x[t_] = Integrate[PDF[DistA, x], {x, t, 4},  Assumptions -> t \[Element] Reals]
y[t_] = (Integrate[PDF[DistB, x], {x, t, 4},   Assumptions -> t \[Element] Reals] + Integrate[PDF[DistC, x], {x, t, 4},    Assumptions -> t \[Element] Reals])/2
R = ParametricRegion[{x[t], s*y[t]}, {{t, 0, 4}, {s, 0, 1}}]
RegionPlot[R]
Area[R]

Ошибок вроде нет, но Mathematica думает чрезмерно долго и не может даже осилить RegionPlot, я так и не дождался решения, а у меня этих наборов данных еще 60 штук.
Бьюсь над простецкой задачей уже несколько дней. Подскажите, как сделать правильно, быстро, просто. Может есть совсем иной способ получить эти ROC-кривые и площади под ними, но хочется уже добить этот! Кажется, что просто команды и синтаксис неудачные. Знаю что в SPSS Statistics все делается автоматом из набора данных по клику, но надо все сделать в Mathematica, так как 95% работы сделано уже в ней.

 
 
 
 Re: ROC Curve в Wolfram Mathematica
Сообщение01.02.2016, 11:16 
Не удивительно, что команда Nintegrate не работает, ей численные значения пределов нужны. Определить функцию
Код:
f[t_]:=-PDF[DistA, t] (NIntegrate[PDF[DistB, x], {x, t, 4}] + NIntegrate[PDF[DistC, x], {x, t, 4}])/2

а затем ее проинтегрировать: NIntegrate[f[t],{t,0,4}]. Если вдруг считает слишком долго, можно в опциях NIntegrate указать что метод попроще, Эйлера, например и точность поменьше.

 
 
 
 Re: ROC Curve в Wolfram Mathematica
Сообщение01.02.2016, 11:35 
Аватара пользователя
Так же
Изображение

 
 
 
 Re: ROC Curve в Wolfram Mathematica
Сообщение01.02.2016, 14:24 
И что, разве ответ не выдает?

 
 
 
 Re: ROC Curve в Wolfram Mathematica
Сообщение01.02.2016, 17:03 
Аватара пользователя
:facepalm: Выдает! И мое выражение выдает. Считает очень долго. И параметрическую область посчитал часов за 6, я уж забыл о ней. Есть ли возможность уменьшить время расчета пункта (2) в моем первом сообщении.
Большое спасибо!

 
 
 
 Re: ROC Curve в Wolfram Mathematica
Сообщение01.02.2016, 17:30 
Во-первых, зачем Integrate? x[t_]: = NIntegrate[...] и без всяких Assumptions.

Если так долго, а точность большая не нужна, то можно по точкам и область и площадь приближенно посчитать, например
Код:
tb1=ParallelTable[{x[i],y[i]},{i,0,4,10^-2}];
ListPlot[tb1,Joined->True]
tb2=ParallelTable[-PDF[DistA, i]tb1[[i,2]],{i,0,4,10^-2}];
area=Total@tb2  10^-2

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group