Iris数据简单分类文档格式.docx
《Iris数据简单分类文档格式.docx》由会员分享,可在线阅读,更多相关《Iris数据简单分类文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
最初为150类,依据欧氏距离,最终分为3类,图形显示三类。
2)C-均值聚类法:
不同的初始聚类中心,a)前三个,b)后三个,c)第1、51、101个,d)前50平均值、中间50平均值、后50平均值
计算不同方法获得的分类结果,最终分为3类,图形显示三类。
3)对比批量处理法和单样本修正法的结果。
二、方法原理
1、数据标准化
数据标准化有两个直接目的,一是消除量纲的影响,二是同一各特征的影响度。
比较常用的标准化方法是零均值处理和单位方差处理。
零均值处理的计算公式为:
单位方差处理的计算公式为:
2、聚类准则
聚类准则可以评价聚类结果的好坏,误差平方和准则是常用的一种聚类准则。
误差平方和准则计算公式如下:
,其中
其中C代表聚类数,ni是第i类中的样本数。
Je取值越小,表明聚类结果越好。
计算误差平方和准则Je的程序如下:
functionoutput=Je_SquareError(classy_result)
classy_n=length(classy_result);
%元胞中元素个数
[~,classy_dimensions]=size(classy_result{1});
%每个元素的维度
classy_mean=zeros(classy_n,classy_dimensions);
Je=zeros(classy_n,1);
fori=1:
classy_n
classy_mean(i,:
)=mean(classy_result{i},1);
%每个元素的均值
h=pdist2(classy_result{i},classy_mean(i,:
));
%每个点到均值点的距离
Je(i)=h'
*h;
%距离平方和
end
output=sum(Je);
3、聚类算法
聚类算法有非迭代算法和迭代算法两种类型。
1)非迭代算法中常用的是分级聚类法,算法开始时将每条数据视为一级,每次循环依据最小距离合并一级,并用均值点作为新级的内容,直到级数减小到要求的分类数退出循环,实现聚类效果。
分级聚类法的算法流程图如下:
图1分级聚类算法流程图
分级聚类法程序:
%分级聚类函数
%A是原始数据,a为期望的类别数
functionoutput=Hierarchical_cluster(A,a)
orginal_data=A;
classy_n=a;
%最终的分类数
classy_result=cell(classy_n,1);
%最后的返回结果
[orginal_number,~]=size(orginal_data);
%原数据数量,原数据维度
current_n=orginal_number;
%当下的类别数
current_data=orginal_data;
%当下的数据
current_data_No=cell(current_n,1);
orginal_number
current_data_No{i}=i;
%存放每个类别中的数据对应的原始数据中的序号
while(current_n>
classy_n)
%寻找距离最近的两个级
pdist_diag=ones(1,current_n)*100000;
pdist_data=squareform(pdist(current_data))+diag(pdist_diag);
%距离
min_data=min(min(pdist_data));
[i_data,j_data]=find(pdist_data==min_data);
mini_data=i_data
(1);
%mini_data,minj_data即为数据中相邻最近的两个数据
minj_data=j_data
(1);
%记录并合并最近两个点所在级中对应的原始数据中的序号
new_data_No=[current_data_No{mini_data}current_data_No{minj_data}];
%删除旧级,增加新级,%用新级代替一个旧级
current_data(mini_data,:
)=(current_data(mini_data,:
)+current_data(minj_data,:
))/2;
current_data_No{mini_data}=new_data_No;
current_data(minj_data,:
)=[];
%删除一个旧级
current_data_No(minj_data)=[];
current_n=current_n-1;
%减少一级
classy_result{i}=orginal_data(current_data_No{i},:
);
output=classy_result;
2)迭代算法中常用的是C均值法,根据C个中心点一句最小距离法将数据分为C类,然后迭代计算中心点,重新进行分类……直到中心点不再发生变化,即完成聚类运算。
单样本处理和批量样本处理C均值聚类法的算法流程图如下:
图2C均值聚类算法
C均值分类算法:
%动态聚类法
%A是原始数据
%a为期望的类别数
%b是选择初始中心的方式,
%c是选择处理方式,0代表批处理方式,1道标单样本修正方式
functionoutput=Dynamical_cluster(A,a,b,c)
Center_methond=b;
Train_methond=c;
[orginal_number,orginal_imensions]=size(orginal_data);
Center=zeros(classy_n,orginal_imensions);
%%%%%%%%%%%%%%%%%选取初始中心点,需要保证这三个点不一样
i=0;
while(length(unique(Center,'
rows'
))<
ifCenter_methond==0%数据前n个连续不同的点作为初始中心点
i=i+1;
Center=orginal_data(i:
classy_n+i-1,:
elseifCenter_methond==1%数据后n个连续不同的点作为初始中心点
Center=orginal_data(orginal_number-classy_n+1-i:
orginal_number-i,:
elseifCenter_methond==2%数据第1+i、51+i、101+i个点作为中心点,i=0、1、2...
Center(1,:
)=orginal_data(1+i,:
Center(2,:
)=orginal_data(51+i,:
Center(3,:
)=orginal_data(101+i,:
elseifCenter_methond==3%数据随机n个不同的点作为初始中心点
orginal_data_rand=randperm(orginal_number);
Center=orginal_data(orginal_data_rand(1:
classy_n),:
elseifCenter_methond==4%数据前50,中50、后50平均点作为中心点
)=mean(orginal_data(1:
50,:
),1);
)=mean(orginal_data(51:
100,:
)=mean(orginal_data(101:
150,:
elseifCenter_methond==5%数据随机分为n类,n类的中心作为初始中心点
fori=0:
classy_n-1Center(i+1,:
)=mean(orginal_data(orginal_data_rand(i*fix(orginal_number/classy_n)+1:
(i+1)*fix(orginal_number/classy_n)),:
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%分类
flag=1;
class_ever_last=zeros(orginal_number,1);
class_ever=zeros(orginal_number,1);
while(flag==1)
ifTrain_methond==0%批量修正法
[~,class_ever]=min(pdist2(orginal_data,Center),[],2);
%计算最近的均值点
fori=1:
Center(i,:
)=mean(orginal_data(class_ever==i,:
%计算新的均值点
else%单样本修正法
[~,class_ever(i)]=min(pdist2(orginal_data(i,:
),Center));
%归属类别
ifclass_ever_last(i)~=class_ever(i)%这个点类别发生改变
forj=1:
iffind(class_ever==j)>
0%计算新的均值点
Center(j,:
)=mean(orginal_data(class_ever==j,:
%判断中心点有无变化
n_flag=length(nonzeros(class_ever_last-class_ever));
ifn_flag>
class_ever_last=class_ever;
else
flag=0;
%中心点不再变化
classy_result{i}=orginal_data(class_ever==i,:
三、结果结论
根据上一个作业,选取特征三、四进行分类效果较好。
对选取特征三、四的Iris数据进行聚类结果如下
1、不分类图像
图3Iris数据特征3、4不分类展示
2、分级聚类结果
图4分级聚类结果
3、C均值聚类结果
1)选取后三个连续且互不相同的数据作为初始中心点聚类结果:
图5第一种初始中心点C均值聚类结果
2)选取后三个连续且互不相同的数据作为初始中心点聚类结果:
图6第二种初始中心点C均值聚类结果
3)选取第1、51、151个数据作为初始中心点聚类结果:
图7第三种初始中心点C均值聚类结果
4)选取前50、中间50、后50平均值作为初始中心点,聚类结果如下:
图8第四种初始中心点C均值聚类结果
表1各种聚类方法结果比较
初始中心选取
C均值聚类法
分级聚类
批量处理
单样本处理
前三个连续且互不相同的点
17.9267
23.7193
后三个连续且互不相同的点
第1、51、151个点
前50、中50、后50平均点
观察以上所有数据,针对选取特征3、4的Iris数据有以下几点发现:
(1)在分为3类的前提下,C均值聚类法的效果要优于分级聚类法;
(2)对于C均值聚类,初始中心的选取以及中心点的计算方式(即批处理、单样本处理)是不会影响最终的聚类结果的;
(3)在测试程序时发现,对于C均值批处理聚类法,初始中心点的选取时应该保证互不相同,否则无法成功的将数据分为C类,这是由批处理的C均值聚类算法特性所导致的。
如选取前标准化后的前三个点(-1.3368,-1.3086)、(-1.3368,-1.3086)、(-1.3935,-1.3086),分类结果如下所示:
图9初始中心有相同点时C均值聚类结果