web-dev-qa-db-ja.com

Matlab、AUC(曲線下面積)の計算方法は?

私はファイルを持っています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)を計算するにはどうすればよいですか?

7
DavideChicco.it

最も簡単な方法は、台形公式関数 trapz です。

データが滑らかであることがわかっている場合は、シンプソンの法則を使用してみることができますが、シンプソンの法則を介して数値データを統合するためのMATLABに組み込まれているものはありません。 (&xが着実に増加しないx/yデータに使用する方法がわかりません)

4
Jason S

プログラムにAUC = trapz(X、Y)を追加するだけで、曲線下面積が得られます。

4
Simon

ソース: リンク

答えを得るのに役立つ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)
1
Faheem

あなたはそのようなことをすることができます:

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

[〜、〜、〜、AUC] = perfcurve(labels、scores、posclass);

%posclassは1の可能性があります

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

1
Nucular

自分でコーディングを行う準備ができている人のために、trapzにはいくつかのオプションがあります。このリンクは、 シンプソンの法則 の実装を示しています。pythonコードが含まれています。シンプソンの法則には ファイル交換 もあります。

0
patrik