KNN分类器与ROC分析

3
我写了以下代码来获取我的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曲线上显示三个点。由于数据集的大小为150,我实现的代码将显示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曲线上的所有点吗?非常感谢。
答案:
1个回答

1

我不熟悉perfcurve,但你是否尝试过使用MATLAB帮助。在MATLAB工作区中只需键入:help perfcurve,就会得到很多帮助。此外,在MATWORKS网站上也有帮助页面,例如针对你的情况,请查看:http://www.mathworks.com/help/stats/perfcurve.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接