【问题标题】:How to delete wrong predictions after implementing KNN in Matlab?在 Matlab 中实现 KNN 后如何删除错误的预测?
【发布时间】:2016-09-19 18:32:36
【问题描述】:

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

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

我想我可以比较:Class 与 testData by index,如果我发现不同的值,删除该行。

什么是有效的方法?

这是代码(我收到了用户@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 规则。

【问题讨论】:

    标签: matlab knn


    【解决方案1】:

    将以下代码添加到给定程序的末尾。这将生成新的测试数据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,:)=[];
    

    它们都会给出相同的结果。

    【讨论】:

      猜你喜欢
      • 2015-04-13
      • 2018-11-30
      • 1970-01-01
      • 2019-12-10
      • 1970-01-01
      • 2012-08-27
      • 2019-03-12
      • 2018-10-14
      • 1970-01-01
      相关资源
      最近更新 更多