模式识别大作业k近邻.docx
- 文档编号:7074437
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:11
- 大小:19.19KB
模式识别大作业k近邻.docx
《模式识别大作业k近邻.docx》由会员分享,可在线阅读,更多相关《模式识别大作业k近邻.docx(11页珍藏版)》请在冰豆网上搜索。
模式识别大作业k近邻
姓名:
学号:
题目
对sonar和wdbc中数据(如表1所示)进行分类,并将实验结果填入表中。
表1实验数据
类别数
特征维数
样本个数
wdbc
2
30
=357
=212
sonar
2
60
=98
=110
解:
实验结果
准确率
Sonar
0.5569
Wdbc
0.8514
K-Means聚类算法
一.算法思想
K-均值算法的主要思想是先在需要分类的数据中寻找K组数据作为初始聚类中心,然后计算其他数据距离这三个聚类中心的距离,将数据归入与其距离最近的聚类中心,之后再对这K个聚类的数据计算均值,作为新的聚类中心,继续以上步骤,直到新的聚类中心与上一次的聚类中心值相等时结束算法。
在本次算法实现中,选择在两类样本点中随机选择两个点作为两类数据的初始聚类中心,然后在开始迭代,计算,直至找到最优分类。
二.算法流程图
开始
读入要分类的数据
设置初始聚类中心
计算数据到K个聚类中心的距离
将数据分入与其距离最小的聚类
计算新的聚类中心
聚类中心是否收敛?
否
输出K个分好的聚类
结束
是
三.程序运行结果
1、对sonar数据进行k均值聚类
表一:
sonar(Kmeans)
运行次数
准确率
1
0.5913
2
0.6030
3
0.5048
4
0.5817
5
0.4904
6
0.5192
7
0.6731
8
0.5721
9
0.5096
10
0.5240
平均准确率
0.5569
程序迭代次数:
6
得到第一类聚类中心是
(0.03250.04430.04690.05850.07170.09830.11620.13060.17420.19900.21790.23890.25620.27370.29650.34580.35680.39370.44860.51300.52660.48250.48940.52340.53120.57450.57900.60560.59510.58030.52200.47910.50200.53870.55080.53270.48230.45410.42710.39140.35470.32250.27240.23810.22080.17990.12630.09080.05250.02230.01610.01440.01180.01180.01070.00910.00910.00890.00940.0073)
得到第二类聚类中心是
(0.02640.03360.04130.05010.07810.10970.12630.13830.18110.21590.25100.25960.28740.31550.33970.40550.46470.50070.55110.60430.67710.74110.77690.79570.79430.80320.80370.76690.68080.58140.49000.40600.34730.29160.26210.26300.26610.24530.24220.24500.23530.24180.22520.19430.17780.14470.11930.09190.05140.01890.01600.01260.00980.01020.00810.00750.00680.00720.00670.0058)
2、对wdbc数据进行k均值聚类
表二:
wdbc(Kmeans)
运行次数
准确率
1
0.8514
2
0.8514
3
0.8514
运行了几次程序,发现准确率一直保持不变,分析可能是由于两类数据比较集中而类间距离又足够大导致,随机选择的样本点对数据分类没有产生什么影响。
程序迭代次数:
11
得到的第一类聚类中心是:
1.0e+003*
(0.01940.02170.12821.18590.00010.00010.00020.00010.00020.00010.00070.00120.00530.09570.00000.00000.00000.00000.00000.00000.02370.02890.15851.75300.00010.00040.00040.00020.00030.0001)
得到的第二类聚类中心是:
1.0e+003*
(0.01260.01860.08110.49610.00010.00010.00010.00000.00020.00010.00030.00120.00220.02380.00000.00000.00000.00000.00000.00000.01400.02470.09190.61960.00010.00020.00020.00010.00030.0001)
四.实验总结
用k均值聚类方法对sonar和wdbc的识别率分别是0.5569和0.8514。
主要原因可能是sonar数据中两类数据类间不够分离,类内距离不够紧密,而wdbc数据中两类数据的点类内相对集中,类间足够分离。
用k均值聚类对wdbc数据识别率较高。
经过几个晚上的艰苦奋斗,努力学习,不断请教前辈大神和上网查询,不断调试程序,最终才得以成功运行,我对这几种判别方法有了更深层次的认识,同时对matlab这个强大的数值计算软件应用的也更加熟练,山重水复疑无路,柳暗花明又一村,自己的能力也就是在不断的发现错误,改正错误中得到了提升。
五.程序代码及分析
1、对sonar数据进行k均值聚类代码及分析
functionkm
k=2;
da=xlsread('C:
\Users\lisai\Desktop\sonar');%½«Êý¾Ý´æÈëµ½daÖÐ
s=0;%sÓÃÀ´±£´æÁ½ÀàÊý¾Ý¸öÊý
forc=1:
208
ifda(c,61)==1
s=s+1;
B(s)=c;
end
end
D=da(B,:
);%½«1ÀàÊý¾Ý´æÈëµ½DÖÐ
out=randperm(s)';
data=out
(1);
x1=D(data,1:
60);%Ëæ»ú´Ó1ÀàÊý¾ÝÖÐÑ¡È¡1¸öÑù±¾
cid(1,:
)=x1;
cid(1,31)=0;
s=0;%sÓÃÀ´±£´æÁ½ÀàÊý¾Ý¸öÊý
forc=1:
208
ifda(c,61)==2
s=s+1;
B(s)=c;
end
end
D=da(B,:
);%½«2ÀàÊý¾Ý´æÈëµ½DÖÐ
out=randperm(s)';
data=out
(1);
x2=D(data,1:
60);%Ëæ»ú´Ó2ÀàÊý¾ÝÖÐÑ¡1¸öÑù±¾
cid(2,1:
60)=x2;
cid(2,61)=0;
A=da(:
1:
60);
[n,p]=size(A);%ÊäÈëÊý¾ÝÓÐn¸öÑù±¾£¬p¸öÊôÐÔ
A(:
p+1)=0;
Asum=0;
Csum2=NaN;
flags=1;
whileflags
flags=0;
%¼ÆËãÿ¸öÏòÁ¿µ½¾ÛÀàÖÐÐĵÄÅ·ÊϾàÀë
fori=1:
n
forj=1:
k
dist(i,j)=sqrt(sum((A(i,:
)-cid(j,:
)).^2));%Å·ÊϾàÀë
end
%A(i,p+1)=min(dist(i,:
));%ÓëÖÐÐĵÄ×îС¾àÀë
[x,y]=find(dist(i,:
)==min(dist(i,:
)));
[c,d]=size(find(y==A(i,p+1)));
ifc==0%˵Ã÷¾ÛÀàÖÐÐıäÁË
flags=flags+1;
A(i,p+1)=y(1,1);
else
continue;
end
end
i;
flags;
forj=1:
k
Asum=0;
[r,c]=find(A(:
p+1)==j);
cid(j,:
)=mean(A(r,:
),1);
form=1:
length(r)
Asum=Asum+sqrt(sum((A(r(m),:
)-cid(j,:
)).^2));
end
Csum(1,j)=Asum;
end
sum(Csum(1,:
));
Csum2=sum(Csum(1,:
));
Csum;
cid;%µÃµ½ÐµľÛÀàÖÐÐÄ
end
B=A;
B;
right=0;
sort1=0;
sort2=0;
forii=1:
208
ifB(ii,61)==1
sort1=sort1+1;
end
end
sort1;
forii=1:
208
ifB(ii,61)==2
sort2=sort2+1;
end
end
sort2;
forii=1:
208
ifB(ii,61)==da(ii,61)
right=right+1;
end
end
acc=right/208
cid
2、对wdbc数据进行k均值聚类代码及分析
functionkm2
da1=importdata('C:
\Users\lisai\Desktop\wdbc.txt');%½«Êý¾Ý´æÈëµ½daÖÐ
da=da1.data;%½«Êý¾ÝÓò´æÈëµ½AÖÐ
k=2;
forjj=1:
569
str1='M';
str2=da1.textdata(jj,2);
ifstrcmp(str2,str1)==1
da(jj,31)=1;
else
da(jj,31)=2;
end
end
s=0;%kÓÃÀ´±£´æÁ½ÀàÊý¾Ý¸öÊý
forc=1:
569
ifda(c,31)==1
s=s+1;
B(s)=c;
end
end
D=da(B,:
);%½«1ÀàÊý¾Ý´æÈëµ½DÖÐ
out=randperm(s)';
data=out
(1);
x1=D(data,1:
30);%Ëæ»ú´Ó1ÀàÊý¾ÝÖÐÑ¡È¡50¸öÑù±¾
cid(1,:
)=x1;
cid(1,31)=0;
s=0;%kÓÃÀ´±£´æÁ½ÀàÊý¾Ý¸öÊý
forc=1:
569
ifda(c,31)==2
s=s+1;
B(s)=c;
end
end
D=da(B,:
);%½«1ÀàÊý¾Ý´æÈëµ½DÖÐ
out=randperm(s)';
data=out
(1);
x2=D(data,1:
30);%Ëæ»ú´Ó1ÀàÊý¾ÝÖÐÑ¡È¡50¸öÑù±¾
cid(2,1:
30)=x2;
cid(2,31)=0;
A=da(:
1:
30);
[n,p]=size(A);%ÊäÈëÊý¾ÝÓÐn¸öÑù±¾£¬p¸öÊôÐÔ
A(:
p+1)=0;
Asum=0;
Csum2=NaN;
flags=1;
whileflags
flags=0;
%¼ÆËãÿ¸öÏòÁ¿µ½¾ÛÀàÖÐÐĵÄÅ·ÊϾàÀë
fori=1:
n
forj=1:
k
dist(i,j)=sqrt(sum((A(i,:
)-cid(j,:
)).^2));%Å·ÊϾàÀë
end
%A(i,p+1)=min(dist(i,:
));%ÓëÖÐÐĵÄ×îС¾àÀë
[x,y]=find(dist(i,:
)==min(dist(i,:
)));
[c,d]=size(find(y==A(i,p+1)));
ifc==0%˵Ã÷¾ÛÀàÖÐÐıäÁË
flags=flags+1;
A(i,p+1)=y(1,1);
else
continue;
end
end
i;
flags;
forj=1:
k
Asum=0;
[r,c]=find(A(:
p+1)==j);
cid(j,:
)=mean(A(r,:
),1);
form=1:
length(r)
Asum=Asum+sqrt(sum((A(r(m),:
)-cid(j,:
)).^2));
end
Csum(1,j)=Asum;
end
sum(Csum(1,:
));
%ifsum(Csum(1,:
))>Csum2
%break;
%end
Csum2=sum(Csum(1,:
));
Csum;
cid;%µÃµ½ÐµľÛÀàÖÐÐÄ
end
B=A;
B;
right=0;
sort1=0;
sort2=0;
forii=1:
569
ifB(ii,31)==1
sort1=sort1+1;
end
end
sort1;
forii=1:
569
ifB(ii,31)==2
sort2=sort2+1;
end
end
sort2;
forii=1:
569
ifB(ii,31)==da(ii,31)
right=right+1;
end
end
acc=right/569;
cid
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模式识别 作业 近邻