如何在Matlab中实现KNN后删除错误的预测?

时间:2016-05-23 01:38:02

标签: matlab knn

我想确定testData集的每个元素是否等于KNN的预测,如果它不同,删除该情况,并创建一组新的数据,仅包含KNN正确预测的情况。

就像删除KNN的错误预测一样,所以我只有正确的预测。

我想我可以比较:通过索引对testData进行比较,如果找到不同的值,则删除该行。

这样做有什么好办法?

这是代码(我收到了用户@Rijul的帮助):

trainData= [148.0,50.0,0; ...
            187.0,34.0,0; ...
            204.0,89.0,0; ...
            430.0,161.0,1; ...
            427.0,22.0,1; ...
            -42.0,469.0,1 ...
            ];

testData=   [290.0,-57.0,0; ...
            194.0,-80.0,0; ...
            174.0,33.0,0; ...
            465.0,691.0,1; ...
            270.0,-194.0,1; ...
            -56.0,665.0,1];

% Data
Sample=testData(:,1:2);
Training=trainData(:,1:2);
Group=trainData(:,3);

% Classify
k=1;  % number of nearest neighbors used in the classification
Class = knnclassify(Sample, Training, Group,k);

% Display Prediction
fprintf('%.1f %.1f - Real %d , Predicted %d\n',[testData.'; Class.']);

testLabel=testData(:,3);
cp = classperf(testLabel,Class);
cp.CorrectRate*100
  

我认为我想要实现的目标称为ENN规则。

1 个答案:

答案 0 :(得分:0)

将以下代码添加到给定程序的末尾。这将生成新的测试数据testDataNew,其中删除了分类期间失败的所有行。

testDataNew=testData;
for classIndex=length(Class):-1:1
    if(testLabel(classIndex)~=Class(classIndex))
        testDataNew(classIndex,:)=[];
    end
end

这是另一种选择

testDataNew=testData;
failedIndexes=testLabel~=Class;
testDataNew(failedIndexes,:)=[];

两者都会给出相同的结果。