带有ROC分析的KNN分类器



我编写了以下代码来获得我的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 vs TPR来得到ROC曲线。

然而,FPR和TPR与我使用自己的实现得到的不同,上面的代码不会显示所有的点,实际上,上面的代码只显示ROC上的三个点。我实现的代码将在ROC上显示151个点,因为数据的大小为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];

我可以问一下如何调整' perfcurve '以使其输出ROC的所有点吗?非常感谢。

a .

我不熟悉perfcurve,但您是否尝试过使用MALAB帮助。在MATLAB工作空间只是类型:help perfcurve,你得到很多帮助那里。在MATWORKS网站上也有帮助页面,例如您的案例,请查看:http://www.mathworks.com/help/stats/perfcurve.html

最新更新