classify関数​によって得られた確率​をROC曲線の出力を​することは可能でしょ​うか?

9 views (last 30 days)
Sae Onodera
Sae Onodera on 9 May 2020
Commented: Sae Onodera on 10 May 2020
%% 微調整したネットワークを使用して検証イメージを分類
[YPred,probs] = classify(net,augimdsValidation);
% 正解率を表示
accuracy = mean(YPred == imdsValidation.Labels)
% 分類の混同行列を表示
C = confusionmat(imdsValidation.Labels,YPred)
confusionchart(C)
% ROC曲線の表示
[X,Y,T,AUC] = perfcurve(imdsTrain.Labels,probs,'anormaly')
AUC
plot(X,Y)
xlabel('False positive rate')
ylabel('True positive rate')
title('ROC for Classification')
画像の分類結果に関するROC曲線を出力したいのですが、classify関数を用いて画像の分類をし、そこで得られた確率(probs)を用いて、添付したコードの通り実行したところ、「スコアは浮動小数点のベクトルとして渡さなければなりません。」とエラーが出てきてしまいました。
2点質問があるのですが、
①classify関数によって得られた確率をROC曲線の出力をすることは可能でしょうか?
②①が可能である場合、どのように修正をすれば良いでしょうか?
よろしくお願いいたします。

Accepted Answer

Akira Agata
Akira Agata on 9 May 2020
classify 関数によって得られた確率(スコア)からROC曲線を出力をすることは可能です。そのためには、プログラムを若干修正する必要があります。
まず、perfcurve 関数への入力は、エラーメッセージにもあるように「スコアは浮動小数点のベクトルとして渡さなければなりません」。一方、classify 関数の出力するスコアはN行M列の配列(N: データ数、M: 分類クラスの数)です。このため、たとえば 'anomaly' というクラスが1番目のクラスの場合、以下のように修正するとROC曲線を出力できます。
[X,Y,T,AUC] = perfcurve(imdsTrain.Labels,probs(:,1),'anormaly');
  1 Comment
Sae Onodera
Sae Onodera on 10 May 2020
ご回答ありがとうございます。
教えていただいたように修正して実行したところ、ROC曲線を出力することができました。ありがとうございました。

Sign in to comment.

More Answers (0)

Tags

Products


Release

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!