資源簡(jiǎn)介
可以通過(guò)使用KNN分類器進(jìn)行圖片分類,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是返回最大值的位置的。
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????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
評(píng)論
共有 條評(píng)論