在 Matlab 中实现 KNN 后如何删除错误的预测?
How to delete wrong predictions after implementing KNN in Matlab?
我想确定测试数据集中的每个元素是否等于 KNN 的预测,如果不同,则删除该案例,并创建一个新数据集,仅包含 KNN 预测正确的案例。
就像删除了KNN的错误预测,所以我只有正确的。
我想我可以通过索引比较:Class 和 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
I think what I'm trying to achieve is called ENN Rule.
将以下代码添加到给定程序的末尾。这将生成新的测试数据 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,:)=[];
两者都会给出相同的结果。
我想确定测试数据集中的每个元素是否等于 KNN 的预测,如果不同,则删除该案例,并创建一个新数据集,仅包含 KNN 预测正确的案例。
就像删除了KNN的错误预测,所以我只有正确的。
我想我可以通过索引比较:Class 和 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
I think what I'm trying to achieve is called ENN Rule.
将以下代码添加到给定程序的末尾。这将生成新的测试数据 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,:)=[];
两者都会给出相同的结果。