資源簡介
用Matlab實現(xiàn)了KNN算法中最近鄰元素的查找,算出的結(jié)果與Spss完全一致

代碼片段和文件信息
%?作者:肖皇
%?時間:20140901
%?該算法是為了實現(xiàn)LinearRegression。
clear?all
clc
%?導(dǎo)入入數(shù)據(jù)
[ndatatextz]=xlsread(‘car_M.xlsx‘);?%ndata為訓練集與目標集數(shù)據(jù),最后一行為目標字段;text為文本字符
[nm]=size(ndata);
ndata_standard=zeros(nm);
%標準化數(shù)據(jù)?spss里是用這個公式標準化的
for?i=1:n
????for?j=1:m
???????ndata_standard(ij)=2*(ndata(ij)-min(ndata(:j)))/(max(ndata(:j))-min(ndata(:j)))-1;?
????end
end
%計算歐幾里德距離?
e_length=zeros(n-11);
for?i=1:n-1
???e_length(i1)=sqrt((ndata_standard(i:)-ndata_standard(n:))*(ndata_standard(i:)-ndata_standard(n:))‘);
end
%對求出的距離排序,并記錄其原先所在的位置
b=zeros(1n-1);
for?i=1:n-1
????b(1i)=i;
end
for?i=1:n-1
???for?j=i+1:n-1
???????if?e_length(i1)>e_length(j1)
??????????temp=e_length(i1);
??????????e_length(i1)=e_length(j1);
??????????e_length(j1)=temp;
??????????temp=b(1i);
??????????b(1i)=b(1j);
??????????b(1j)=temp;
???????end??????
???end????
end
%K值
k=3;
%?輸出結(jié)果
table1=cell(k+1m+1);
for?i=1:m+1
????table1{1i}=z{1i};
end
for?i=1:k
???for?j=1:m+1
??????table1{i+1j}=z{b(1i)+1j};???????
???end???
end
disp(‘最近鄰的K個鄰居的各屬性‘);
disp(table1);
table=cell(k+12);
table(1:)={‘model‘‘distance‘};
for?i=1:k
????table{i+11}=z{b(1i)+11};
????table{i+12}=e_length(i1);
end
%顯示輸出結(jié)果
disp(‘最近鄰的K個鄰居‘);
disp(table);
%繪制各變量的直方圖
x=zeros(1k);
for?i=1:k
???x(1i)=i;?
end
y=zeros(km);
for?i=1:k
????y(i:)=ndata(b(1i):);
end
%設(shè)置橫坐標注釋
model=cell(1k+1);
for?i=1:k
????model{1i}=z{b(1i)+11};
end
model{1k+1}=z{n+11};
for?i=1:m?????
????subplot(24i)bar(xy(:i));
????hold?on;
????subplot(24i)bar(4ndata(ni)‘r‘);???
????title(z{1i+1});
????set(gca‘Xtick‘[1?2?3?4]);
????xlabel(model);
end
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????1851??2014-11-11?11:24??main.m
?????文件???????12057??2014-10-27?15:33??car_M.xlsx
評論
共有 條評論