我编写了以下代码来获取 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上的三个点。我实现的代码将在 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
关于matlab - 带 ROC 分析的 KNN 分类器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15499669/