2016-05-23 3 views
0

Я хочу определить, равен ли каждый элемент набора testData предсказанию KNN, а если он отличается, удалите этот случай и создайте новый набор данных, содержащий только те случаи, когда KNN предсказано правильно.Как удалить неправильные прогнозы после внедрения KNN в Matlab?

Это похоже на удаление неправильных прогнозов 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 Rule.

ответ

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,:)=[]; 

Оба они дадут тот же результат.

Смежные вопросы