K - NN (K - Nearest Neighbor) 알고리즘 의 Matlab 구현

전기
        최근 안면 인식 졸업 디자인 을 하 는데 퍼 지 KNN 알고리즘 (FuzzyKNN, FKNN) 을 사용 하고 있다.FKNN 은 KNN 을 바탕 으로 발 전 된 것 으로 인터넷 검색 블 로 그 는 이 알고리즘 에 대한 자료 가 부족 하고 시간 이 있 으 면 이 알고리즘 에 대한 상세 한 소 개 를 한 편 쓴다.이 편 은 Matlab 를 사용 하여 KNN (Kd - Tree 알고리즘 미 실현) 을 간단하게 실현 하 는데 주로 과학 연 구 를 대상 으로 한다.
코드 구현
function y = knn(x, x_train, y_train, K)
% KNN K-Nearest Neighbors Algorithm
% Input:  x:               
%         x_train:      
%         y_train:        
%         K:        K 
%
% Output: y:                 
%
% Author: Keyven_guo

[size_x,~] = size(x);    %             ,          

predicted_label = zeros(size_x,1); %     Matrix[size_x][1]  0
for i = 1:size_x
    [dist,neighbors] = top_K_neighbors(x_train,x(i,:),K); 
    % x(i,:)     x  i ,:    
    predicted_label(i) = keyclass(y_train(neighbors),max(y_train(neighbors)); 
    % y_train(neighbors)     ∈neighbors y_train  
end

y = predicted_label;
end
function [dist, neighbors] = top_K_neighbors(x_train, y_train, x, K)
% Input:    x_train:        
%           y_train:          
%           x:                
%           K:          K 
%
% Output:   dist:       K    x   (    )
%           neighbors:  K       
%
% Author:   Keyven_guo

[size_x,~] = size(x_train);
test_mat = repmat(x,size_x,1); %     Matrix[size_x][1]     x
%        x_train       ,    x     
dist_mat = (x_train-double(test_mat)).^2; %     
dist_array = sum(dist_mat'); %  dist_mat  ('      )   sum  ,  sum       
[dists,neighbors] = sort(dist_arry); %  dist_arry    neighbors         
dists = dists(1:K); %   k 
neighbors = neighbors(1:K);

end
function result = keyclass(k_labels, class_num)
%       ,   map,   Hash     
%
% Author:    Keyven_guo

k = size(k_labels);
class_count = zeros(1,class_num);
for i=1:k
    class_index = k_labels(i) + 1;
    class_count(class_index) = class_count(class_index) + 1;
end

result = max(class_count);
result = result - 1;

end

후기
        실제 개발 에서 Kd - Tree 를 사용 하지 않 으 면 상기 K 근린 알고리즘 은 다음 과 같은 알고리즘 을 사용 하여 개선 할 수 있 습 니 다.
(1) ACM 알고리즘 문제 에서 앞의 k 작은 요 소 를 찾 습 니 다 (최대 의 사고 방향 으로 대량의 데이터 처리 에 적합 하고 공간 복잡 도가 적 으 며 시간 복잡 도 는 O (n) 에 가 깝 습 니 다.
(2) 데이터 구조 맵

좋은 웹페이지 즐겨찾기