clear all;
clc;
%标签1
aver1=[8,3];%均值
covar1=[2 0;0 2.5];%二维数据协方差
data1=mvnrnd(aver1,covar1,100);%产生高斯分布数据
for i = 1:100
for j=1:2
if data1(i,j)<0
data1(i,j)=0;
end
end
end
label1=ones(100,1); %定义标签数据为1
plot(data1(:,1),data1(:,2),'b+');
hold on;
%标签2
aver2=[3,8];
covar2=[2 0;0 2.5];
data2=mvnrnd(aver2,covar2,100);
for i = 1:100
for j=1:2
if data2(i,j)<0
data2(i,j)=0;
end
end
end
label2=label1+1;
plot(data2(:,1),data2(:,2),'r^');
hold on;
%标签3
aver3=[2,2];
covar3=[2 0;0 2];
data3=mvnrnd(aver3,covar3,100);
for i = 1:100
for j=1:2
if data3(i,j)<0
data3(i,j)=0;
end
end
end
label3=label2+1;
plot(data3(:,1),data3(:,2),'co');
%组合数据
data = [data1;data2;data3];
label = [label1;label2;label3];
k=11;
for m = 3:1:7
for n = 3:1:7
test_data = [m,n]; %测试数据5*5矩阵
distance = zeros(300,1);
%11NN,求测试数据和类中每个数据的距离
for i = 1:300
distance(i) = sqrt((test_data(1)-data(i,1)).^2 + (test_data(2)-data(i,2)).^2);
end
%选择排序算法,只找出最小的前K个数据,对数据和标号都进行排序
for i = 1:k
ma = distance(i);
for j = i+1:300
if distance(j)<ma
ma = distance(j);
label_ma = label(j);
tmp = j;
end
end
distance(tmp) = distance(i); %排数据
distance(i) = ma;
label(tmp) = label(i); %排标签
label(i) = label_ma;
end
cls1 = 0;%统计1类中距离测试集最近的个数
cls2 = 0;%统计2类中距离测试集最近的个数
for i = 1:k
if label(i) ==1
cls1= cls1+1;
elseif label(i) ==2
cls2 = cls2+1;
else
cls3 = k-cls1-cls2;
end
end
if cls1>cls2 && cls1>cls3
plot(m,n,'kp'); %属于类1
elseif cls2>cls3 && cls2>cls1
plot(m,n,'g.'); %属于类2
elseif cls3>cls1 && cls3>cls2
plot(m,n,'m*'); %属于类3
end
label = [label1;label2;label3];
end
end