Search All of the Math Forum:
Views expressed in these public forums are not endorsed by
NCTM or The Math Forum.


Aaronne
Posts:
110
Registered:
6/2/11


KNN classifier with ROC Analysis
Posted:
Mar 19, 2013 8:30 AM


Hi Smart guys,
I wrote following codes to get a plot of ROC for my KNN classifier:
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 knearest 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);
Then we can plot the FPR vs TPR to get the ROC curve.
However, the FPR and TPR is different from what I got using my own implementation that the one above will not display all the points, actually, the codes above display only three points on the ROC. The codes I implemented will dispaly 151 points on the ROC as the size of the data is 150.
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];
May I ask how to tune '`perfcurve`' to let it output all the points for the ROC? Thanks a lot.
A.



