• 大小: 2KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: Matlab
  • 标签: KNN  matlab  

资源简介

可以通过使用KNN分类器进行图片分类,KNN分类器完整的matlab代码。

资源截图

代码片段和文件信息

function results = knn_classify(train_data test_data num_neighbors train_labels)
% classify test_data using KNN classifier established from train_data
% Input:
%       train_data      -       training data TRAIN_NUM x D matrix
%       test_data       -       testing data  TEST_NUM x D matrix
%       num_neighbors   -       number of nearest neighbors
%       train_labels    -       training labels TRAIN_NUM x 1 matrix
% Output:
%       results         -       labels for testing data TEST_NUM x 1 array



[TRAIN_NUM D] = size(train_data);
[TEST_NUM D2] = size(test_data);


results = zeros(TEST_NUM 1);
for i = 1:TEST_NUM
    [dists neighbors] = find_top_K_neighbors(train_data test_data(i:) num_neighbors);
    results(i) = recog(train_labels(neighbors) max(train_labels));
end



%------------------------------subfunction--------------------------------%
function [dists neighbors] = find_top_K_neighbors(train_data test_sample K)
% find the top K nearest neighbors in the train_data for test_sample
% Input:
%       train_data      -       training data N x D matrix
%       test_sample     -       test_sample 1 x D array
%       K               -       number of neighbors
% Output:
%       dist            -       least K distance
%       neighbors       -       K nearest neighbors 1 x K array

[N D] = size(train_data);
[dummy D2] = size(test_sample);



test_matrix = repmat(test_sample N 1);        % N by D
dist_mat = (train_data - test_matrix) .^ 2;     % N by D
dist_array = sum(dist_mat‘);                    % 1 by N
[dists neighbors] = sort(dist_array);
dists = dists(1:K);
neighbors = neighbors(1:K);


%--------------------------------subfunction------------------------------%
function label = recog(neighbor_labels num_class)
% find the label for the current test sample with neighbor_labels
% Input:
%       neighbor_labels         -       labels for K neighors of the current 
%                                       test sample
%       num_class               -       number of class
% Output:
%       label                   -       label for the current test sample

num_neighbors = length(neighbor_labels);
cnt_labels = zeros(num_class 1);

for i = 1:num_neighbors
    cnt_labels(neighbor_labels(i)) = cnt_labels(neighbor_labels(i)) + 1;
end

[dummy label] = max(cnt_labels);%Y是返回最大值的,I是返回最大值的位置的。



 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-07-18 16:01  knn\
     文件        2448  2013-06-28 09:26  knn\knn_classify.m
     文件        2253  2013-07-18 15:47  knn\main.m

评论

共有 条评论