2013-03-19 50 views
2

我寫了如下代碼來獲得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.

回答

1

我不熟悉perfcurve但你嘗試過使用MALAB幫助。在MATLAB工作區中輸入 只需輸入:help perfcurve,您將獲得很多幫助。 MATWORKS網站上還有幫助頁面,例如您的案例請看: http://www.mathworks.com/help/stats/perfcurve.html