2014-04-02 2 views
0

K-Nearest Neighbors 알고리즘을 구현했지만 matlab을 사용한 경험이 거의 없습니다. 코드의 작은 부분을 확인하고 무엇이 개선되거나 수정 될 수 있는지 알려주시겠습니까? 알고리즘의 올바른 구현이 되었길 바래요? 이를 테스트하려면이 Matlab 코드에서 개선 할 수있는 내용은 무엇입니까? KNN에 올바른 구현입니까?

function test_data = knn(test_data, tr_data,k) 

numoftestdata = size(test_data,1); 
numoftrainingdata = size(tr_data,1); 


for sample=1:numoftestdata 

    %Step 1: Computing euclidean distance for each testdata 
    R = repmat(test_data(sample,:),numoftrainingdata,1) ; 
    euclideandistance = (R(:,1) - tr_data(:,1)).^2; 

    %Step 2: compute k nearest neighbors and store them in an array 
    [dist position] = sort(euclideandistance,'ascend'); 
    knearestneighbors=position(1:k); 
    knearestdistances=dist(1:k); 


    % Step 3 : Voting 
    for i=1:k 
     A(i) = tr_data(knearestneighbors(i),2); 
    end 

    M = mode(A); 

    if (M~=1) 
     test_data(sample,2) = mode(A); 
    else 
     test_data(sample,2) = tr_data(knearestneighbors(1),2); 
    end 
end 

당신은 사용할 수 있습니다

  • test_data = [6,0; 2,0; 5,0]
  • tr_data = [1,1; 0,2; 3,2; 4,4; 5,3]
+5

모범 사례 또는 optimis를 찾는 경우 특정 오류에 도움을주기보다는 도움을 요청하십시오.이 코드를 CodeReview 사이트에 게시하는 것이 좋습니다. –

답변

0

나는 수정 다음과 같습니다

  1. 3 단계 : 루프가 효율적이지 않습니다, A =tr_data(knearestneighbors,2);
  2. 를하려고 문이

을 단순화 할 수있는 경우 -

test_data(sample,2) = mode(A); 

if (M==1) 
    test_data(sample,2) = tr_data(knearestneighbors(1),2); 
end 
+0

고맙습니다.하지만 정확성에 대해 어떻게 생각하십니까? '가까운 이웃들 '이해야 할 일을하고 있니? –

관련 문제