「分類精度」と「しきい値」のプロットを取得するために、次のコードを記述しました。
(データセットには、「良い」または「悪い」というラベルの付いた2つのクラスが含まれているグラウンドトゥルースがあります)
LDAClassifierObject = ClassificationDiscriminant.fit(featureSelcted, groundTruthGroup, 'DiscrimType', 'linear');
[LDALabel, LDAScore] = resubPredict(LDAClassifierObject);
[~, AccuracyLDA, Thr] = perfcurve(groundTruthNumericalLable(:,1), LDAScore(:,1), 1,'yCrit','accu');
figure,
plot(Thr,AccuracyLDA,'r-');
hold on;
plot(Thr,AccuracyLDA,'bo');
xlabel('Threshold for ''good'' Returns');
ylabel('Classification Accuracy');
grid on;
[maxVal, maxInd] = max(AccuracyLDA)
maxVal =
0.8696
maxInd =
15
Thr(15)
ans =
0.7711
また、グラウンドトゥルースに「Good」または「Bad」というラベルの付いた2つのクラスが含まれている同じデータセットに対してROC分析を実行します。
[FPR, TPR, Thr, AUC, OPTROCPT] = perfcurve(groundTruthGroup(:,1), LDAScore(:,1), 'Good');
OPTROCPT =
0.1250 0.8667
なぜThr(15)=0.7711
と違うのOPTROCPT(2)=0.8667
ですか?
ROCによって得られる最良のカットオフポイント(つまり、最良のしきい値OPTROCPT)は、LDAの精度が最大のものですか?
または多分私は間違っています、それでは正確に何をperfcurve(groundTruthNumericalLable(:,1), LDAScore(:,1), 1,'yCrit','accu')
教えてくれますか?