班级:021051
学号:02105035
姓名:戴涛。
一。k均值算法。
1.算法思想。
k-means算法是将各个聚类子集内的所有数据样本的均值作为该聚类的代表点,通过迭代过程把数据集划分为不同的类别,使得评价聚类性能的准则函数达到最优,从而使生成的每个聚类内紧凑,类间独立。在下面的算法中,在计算数据样本之间的距离时,采用的欧式距离。
其步骤如下:
1)为每一个聚类确定一个初始的聚类中心,这样就有k个聚类中心。
2)将样本集中的样本按照最小距离准则分配到最临近聚类。
3)使用每个聚类中的样本均值作为新的聚类中心。
4)重复步骤2,3直到聚类中心不再变化。
5)结束,得到k个聚类。
二 .k-均值实验结果。
2.1 k-均值处理iris数据结果。
2.1 k-均值处理wine原始数据结果。
2.2 对wine数据做归一化处理,再用k-均值算法处理结果。
4.实验分析与结论。
4.1 一次实验数据制成**如下。
k-均值处理iris,wine识别率表。
4.2实验分析。
k-均值处理iris数据识别率相对k-近邻法低了一些,一次识别率在0.88左右,并且对第1类,第2类数据识别率很高,对第3类数据不太理想。再者,k-均值对初始点很敏感,初始点不同,识别率往往不同,最高识别率达到0.
89,最低降到0.606.每次随机结果都不同。
处理wine原始数据的识别率相对较低,识别率仅0.70左右,但对wine数据做了归一化以后,k-均值的识别率大大提高,在0.943左右,识别率很高。
分析数据分布可知,从实验得到的数据分布图对比,我们得到iris数据的第1类,第2类聚类性比较好,且聚类相对独立,近似类椭圆形形分布,而第3类数据分别比较离散,成长方形分布,所以k-均值对iris数据第1类,第2类识别率高,对第3类识别率较低。 同理,原始wine数据分布都比较零碎,没有成近似圆形,所以k-均值识别率低。 但对wine数据归一化以后,3类数据分别聚类性很好,并且数据呈现类圆形分布,且聚类间相对独立,所以,k-均值识别率很高。
4.3 实验结论。
均值处理数据分布近似球形,且聚类间相对独立的数据识别率很高,对数据聚类性不高,数据分别不成现类圆形分布,或者数据交叉比较多的数据识别率不高。
2. k-均值对数据初始点很敏感,初始点不同,得到的识别率也不同,所以要分析数据分布,合理选取初始点,对识别率也很重要。
3. 对类似wine数据,存在奇异样本数据,需要先对数据做预处理,比如归一化处理,再用k-均值处理,能大大提高识别率。
5.k-均值matlab**。
5.1 处理iris数据**。
k-均值处理iris数据程序。
function k_means()
clc;clear all;
k=3;x=importdata(''
y=x(:,5);
x=x(:,1:4);
coef,score,latent,t2] =princomp(x);%数据主成分分析,用于画图。
latent
subplot(2,1,1);
画出数据原始图。
for i=1:150,if ( i<=50 )
plot(x(i,1),x(i,2),'r*')显示第1类。
hold on
elseif (i>50 &&i<=100)
plot(x(i,1),x(i,2),'b*')显示第2类。
hold on
elseplot(x(i,1),x(i,2),'g*')显示第3类。
hold on
endend
title('iris原始数据图');
n=randperm(150); 随机选取3个初始点。
start(1,:)x(n(1),:
start(2,:)x(n(2),:
start(3,:)x(n(3),:
class,num,center] =kmeans(x,k,start);%调用k-均值函数。
right=0;
count1=0;count2=0;count3=0;
for i=1:150
if class(i)==y(i)
right=right+1;
endif (i<=50)&&class(i)==y(i))
count1=count1+1;
endif (i>50&&i<=100)&&class(i)==y(i))
count2=count2+1;
endif (i>100)&&i<=150)&&class(i)==y(i)
count3=count3+1;
endend
right=right/150; %计算识别率。
disp('k-均值识别率:')disp(right);
disp('第1类数目:')disp(num(1))
disp('第1类识别率:')disp(count1/50)
disp('第2类聚类中心:')disp(center(1,:)
disp('第2类数目:')disp(num(2))
disp('第2类识别率:')disp(count2/50)
disp('第2类聚类中心:')disp(center(2,:)
disp('第3类数目:')disp(num(3))
disp('第2类识别率:')disp(count3/50)
disp('第3类聚类中心:')disp(center(3,:)
画图程序:以第一个特征作x轴和第二个特征作y轴,画图。
subplot(2,1,2);
for i=1:150,if class(i)==1,plot(x(i,1),x(i,2),'r*')显示第一类。
hold on
elseif class(i)==2,plot(x(i,1),x(i,2),'b*')显示第二类。
hold on
elseif class(i)==3,plot(x(i,1),x(i,2),'g*')显示第三类。
hold on
endend
endend
strt=['红色*为第一类;蓝色*为第二类;绿色*为第三类' ]
text(3, 1.60, strt);
title('k-均值法处理iris数据聚类分类图');
k均值算法函数。
function [class,num,center] =kmeans(x,k,start)
n,d] =size(x);
class = zeros(1,n); 设置class 为分类结果显示矩阵。
num = zeros(1,k); num保存每一类的个数。
diedai_max= 1000;
diedai_max=1000;
diedai = 1;
while diedai < diedai_max
%计算每个数据到聚类中心的距离。
for i = 1:n
distance = sum((repmat(x(i,:)k,1)-start).^2,2); 用repmat函数进行k*1个矩阵扩展。
[m,ind] =min(distance); ind 保存最小距离的标号。
class(i) =ind; %将当前聚类结果存入class 中。
endfor i = 1:k
%找到每一类的所有数据,计算他们的平均值,作为下次计算的聚类中心。
ind = find(class==i);
start(i,:)mean(x(ind,:)
num(i) =length(ind); 统计每一类的数据个数。
enddiedai = diedai + 1;
endcenter = start;
end end
5.2 处理归一化wine数据**。
k-均值处理wine数据程序。
function k_means()
clc;clear all;
k=3;x=importdata(''
y=x(:,1); 保存类别标号。
x=x(:,2:14);
p=importdata(''导入数据。
p=p(:,2:14);
p=p';for i=1:13
p(i,:)p(i,:)min(p(i,:)max(p(i,:)min(p(i,:)对wine数据做归一化处理。
end p=p';
x=p;coef,score,latent,t2] =princomp(x);%数据主成分分析,去主成分作图。
latent;
scoresubplot(2,1,1);
画出数据原始图。
for i=1:178
if ( i<=59)
plot(x(i,1),x(i,13),'r*')显示第一类。
hold on
elseif (i>59 &&i<=130)
plot(x(i,1),x(i,13),'b*')显示第二类。
hold on
elseplot(x(i,1),x(i,13),'g*')显示第三类。
hold onend
模式识别大作业
一。问题重述。利用fisher线性判别法和最近邻算法对sonar数据进行分类,并得出正确率。二。fisher线性判别法思路。用训练样本求出d维空间到一维空间的投影方向w,进而求出样本均值,进而可求出阈值t,带入测试样本得到投影点y,将y与t相比,即可进行分类判别。2.1 fisher准则函数中的基本...
模式识别大作业
作业1 用身高和 或体重数据进行性别分类 一 基本要求 用和的数据作为训练样本集,建立bayes分类器,用测试样本数据对该分类器进行测试。调整特征 分类器等方面的一些因素,考察它们对分类器性能的影响,从而加深对所学内容的理解和感性认识。具体做法 1 应用单个特征进行实验 以 a 身高或者 b 体重数...
模式识别大作业
一 题目。对sonar和wdbc中数据 如表1所示 进行分类,并将实验结果填入表2。不降维方法用邻近法,降维用fisher判别 表1 实验数据。表2实验结果 准确率 二 fisher线性判别法。fisher线性判别分析的基本思想 通过寻找一个投影方向 线性变换,线性组合 将高维问题降低到一维问题来解...