KNN 分類器の ROC のプロットを取得するために、次のコードを書きました。
load fisheriris;
features = meas;
featureSelcted = features;
numFeatures = size(meas,1);
%% Define ground truth
groundTruthGroup = species;
%% Construct a KNN classifier
KNNClassifierObject = ClassificationKNN.fit(featureSelcted, groundTruthGroup, 'NumNeighbors', 3, 'Distance', 'euclidean');
% Predict resubstitution response of k-nearest neighbor classifier
[KNNLabel, KNNScore] = resubPredict(KNNClassifierObject);
% Fit probabilities for scores
groundTruthNumericalLable = [ones(50,1); zeros(50,1); -1.*ones(50,1)];
[FPR, TPR, Thr, AUC, OPTROCPT] = perfcurve(groundTruthNumericalLable(:,1), KNNScore(:,1), 1);
次に、FPR と TPR をプロットして ROC 曲線を得ることができます。
ただし、FPR と TPR は、私が独自の実装を使用して取得したものとは異なります。上記のものはすべてのポイントを表示するわけではありません。実際には、上記のコードは ROC に 3 つのポイントしか表示しません。私が実装したコードは、データのサイズが 150 であるため、ROC で 151 ポイントを表示します。
patternsKNN = [KNNScore(:,1), groundTruthNumericalLable(:,1)];
patternsKNN = sortrows(patternsKNN, -1);
groundTruthPattern = patternsKNN(:,2);
POS = cumsum(groundTruthPattern==1);
TPR = POS/sum(groundTruthPattern==1);
NEG = cumsum(groundTruthPattern==0);
FPR = NEG/sum(groundTruthPattern==0);
FPR = [0; FPR];
TPR = [0; TPR];
perfcurve
ROC のすべてのポイントを出力できるように' ' を調整する方法を尋ねてもよろしいですか? どうもありがとう。
A.