IRIS数据集分解聚类的matlab实现

先上结果
在这里插入图片描述

1:聚类原理

聚类分析指将物理或抽象对象的集合分组为由类似的对象组成的多个类的分析过程。它是一种重要的人类行为。分解聚类的基本思想是首先将所有的样本归成一类,然后依据相似性原理将其进行分解,分解的效果好坏我们通过一个评价函数对其进行评价:
在这里插入图片描述
其中N是总样本数,N1是第一类的样本数,N2是第二类的样本数,括号里的是均值。我们可以从这个评价函数里很明显的看出,这里采用了欧几里得距离来衡量样本之间的差异,同样的,我们也可以采用马马哈拉诺比斯距离和明科夫斯基距离进行衡量,这里不再赘述。

在分解聚类的过程中,我们常用的是对分算法,它的特点是将样本分解成两个类别。现在我们介绍对分算法:
1:选取目标函数,把全体样品分成两类
X = {x_1,x_2,…x_n};Y = { };E = 0
2:计算分别将x_1,x_2等样本从X计入Y中的E值,我们设将x_i计入Y样本时E最大,那么就把它归入Y。此时
X = {x_1,x_2,…x_i-1,x_i+1};
Y = {x_i};
E=E(1)
3:继续计算将x_1,x_2等样本从X计入Y中的E值,我们设将x_j计入Y样本时E最大,那么就把它归入Y。
4:若E(K+1)>=E(K),我们就重复上述行为,知道E(K)到达最大值停止,此时分类结果是最好的。

需要注意的是:在每次我们将一个样本从X拿出来放到Y的过程中,X的均值和Y的均值都发生了变化,需要重新计算,我们可以使用下列递推公式进行均值的更新
在这里插入图片描述

2:代码实现

整体代码我分成了三个部分:
1:第一部分是主函数部分,负责打乱输入的数据次序和将得到的数据进行划分,需要注意的是,IRIS数据集有三个大分类,我们要使用分解聚类对其进行操作,可以先进行一次聚类,然后选择第一次聚类的较大的数据集结果进行二次聚类,这样就可以将IRIS样本分解成三个类别。

[E(1),cluster1,cluster2] = find_min(A,cluster1,cluster2);
[E(2),cluster1,cluster2] = find_min(A,cluster1,cluster2);
for i=3:m
    [E(i),cluster1,cluster2] = find_min(A,cluster1,cluster2);
    if (E(i-2)>=E(i-1))
        break;
    end
end
a=find(cluster1);   %第一类结果放在a里面
------------------------------------------------------------------------------------
plot3(C_1(:,1),C_1(:,2),C_1(:,3),'r*');hold on;
plot3(C_2(:,1),C_2(:,2),C_2(:,3),'g*');hold on;
plot3(C_3(:,1),C_3(:,2),C_3(:,3),'b*');hold off;
title('可视化图形');
legend('Iris-setosa','Iris-versicolor','Iris-virginica');
xlabel('萼片长度');ylabel('萼片宽度');zlabel('花瓣长度');

2:第二个部分是均值推导部分。

function [X1,Y1,Z1,T1,X2,Y2,Z2,T2,m1,m2] = cut_cluster(A,B,C,D,cluster1,cluster2)
cluster1_index=find(cluster1);
cluster2_index=find(cluster2);
[m1,~]=size(cluster1_index);
[m2,~]=size(cluster2_index);

3:第三个部分是评价函数部分,我将每个每次的E值放在评价矩阵里,这样可以方便的对程序进行处理。

function [c,cluster1,cluster2] = find_min(A,cluster1,cluster2)
cluster1_copy = cluster1;cluster2_copy = cluster2; %进行矩阵投影
[a,~] = size(A);
E = zeros(a,1);

此外,由于样本的分类在IRIS数据集里面已经给了出来,所以我们可以在后续中加入准确度度量函数,以评价这个方法的优劣。

E值矩阵:
在这里插入图片描述
分类展示:
在这里插入图片描述在这里插入图片描述在这里插入图片描述
结果可视化(这里使用了四个变量里的萼片长度和宽度,花瓣长度作为三个坐标轴进行可视化操作):
在这里插入图片描述

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值