?? classify_nn.m
字號:
%%用最近鄰方法分類 采用歐氏距離
function [class,mis_num,correct_rate]=classify_NN(data,class_num,train_num,dis_mark)
[ dim,total_num ] = size( data ) ;
class_data_num = total_num/class_num ; %得到每類中的樣本數目
for class_mark = 1:class_num %for循環得到用來訓練的數據
for class_data_mark = 1:train_num
train_data( :,( class_mark-1 )*train_num+class_data_mark ) = data( :,( class_mark-1 )*class_data_num+class_data_mark );
%test_data(:,())
end
end
test_num = class_data_num-train_num;
for class_mark = 1:class_num %for循環得到用來測試的數據
for class_data_mark = 1:test_num
test_data( :,( class_mark-1 )*test_num+class_data_mark ) = data( :,( class_mark-1 )*class_data_num+class_data_mark+train_num );
%test_data(:,())
end
end
train_data_num = train_num*class_num;
test_data_num = test_num*class_num;
for test_data_mark = 1:test_data_num %for循環求測試數據與每個訓練數據的距離
for train_data_mark = 1:train_data_num
switch dis_mark
case 'L2'
dis(test_data_mark,train_data_mark) = norm(test_data(:,test_data_mark)-train_data(:,train_data_mark));
case 'cos'
dis(test_data_mark,train_data_mark) = acos((test_data(:,test_data_mark)'*train_data(:,train_data_mark))/(norm(test_data(:,test_data_mark))*norm(train_data(:,train_data_mark))));
case 'L1'
dis(test_data_mark,train_data_mark) = norm(test_data(:,test_data_mark)-train_data(:,train_data_mark),1);
otherwise
dis(test_data_mark,train_data_mark) = norm(test_data(:,test_data_mark)-train_data(:,train_data_mark));
end
end
end
[mindis,index]=min(dis');
class = fix((index+train_num-1)/train_num); %求測試數據所屬的類別
mis_num = 0;
for test_data_mark = 1:test_data_num
if class(test_data_mark)~=fix((test_data_mark+test_num-1)/test_num) %若算得的類別與實際所屬類別不一樣則分類錯誤
mis_num = mis_num+1;
end
end
correct_rate =(test_data_num-mis_num)/test_data_num;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -