KNN分类与ROC分析

问题描述:

我写了如下代码来获得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