私はファイルを持っていますdata.txt
2列と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
[...]
ファイル内の値のカップルはすべて、1つのポイント座標(x、y)に対応します。プロットすると、このポイントは曲線を生成します。この曲線の曲線下面積(AUC)を計算したいと思います。
だから私はデータをロードします:
data = load("data.txt");
X = data(:,1);
Y = data(:,2);
したがって、X
にはポイントのすべてのx座標が含まれ、Y
にはすべてのy座標が含まれます。
曲線下面積(AUC)を計算するにはどうすればよいですか?
最も簡単な方法は、台形公式関数 trapz
です。
データが滑らかであることがわかっている場合は、シンプソンの法則を使用してみることができますが、シンプソンの法則を介して数値データを統合するためのMATLABに組み込まれているものはありません。 (&xが着実に増加しないx/yデータに使用する方法がわかりません)
プログラムに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 = sum((Y(1:end-1)+Y(2:end))/2.*...
(X(2:end)-X(1:end-1)));
[〜、〜、〜、AUC] = perfcurve(labels、scores、posclass);
%posclassは1の可能性があります
http://www.mathworks.com/matlabcentral/newsreader/view_thread/252131