粒子群算法详见:https://blog.csdn.net/liutianbao2018/article/details/142743205
目录
1 K均值聚类原理
1.1什么是聚类
聚类是一种无监督学习方法,通过相似性度量将数据点划分为多个簇,使得同一簇内的数据点彼此相似而不同簇的数据点不相似。它依赖于多种算法(如K-means、DBSCAN等)和相似性度量(如欧氏距离、余弦相似度等)来实现,广泛应用于市场细分、图像分割、文档聚类等领域,为发现数据中的隐藏模式、异常值和群体结构提供有价值的洞察。下面是iris数据集的种类:
图1 iris数据集分类
1.2 K均值聚类原理
K-means聚类算法是一种基于迭代优化的聚类分析算法,其原理是将数据集划分为k个簇,使得每个数据点都属于最近的簇,并且簇的中心是所有数据点的平均值。
以下是K-means聚类算法的详细原理:
- 初始化:选择要将数据集分成k个簇,然后随机选择k个数据点作为初始簇中心。
- 分配:计算每个数据点与各个簇中心之间的距离,通常使用欧式距离或曼哈顿距离。将每个数据点分配到距离其最近的簇中心,每个数据点只能属于一个簇。
- 更新:根据分配的数据点更新簇中心点,这是通过计算属于每个簇的数据点的平均值来实现的。
- 重复:重复分配和更新步骤,直到簇中心点不再发生变化,或者达到预定的迭代次数。
- 输出:得到k个簇和每个簇的中心点。
图2 K-mean算法聚类结果
聚类簇中心点,通过计算属于每个簇的数据点的平均值来实现的先然不是最优解,接下来我们利用粒子群算法来寻找这个最优簇中心点。
2 PSO改进K均值聚类
具体思路:分K类, M个特征,N个种群,适应度值为错误率最小。
- 随机生成初始簇中心点,k*M*N矩阵;
- 求适应度值矩阵,找历史最优是Pb和全局最优Gb;
- 利用粒子群更新簇中心点,再求适应度值矩阵;
- 更新历史最优是Pb和全局最优Gb;
%% 适应度函数
function fitness= fun(x, K, cen,species)
s=0;
while s~=K
s=0;
[idx,centroids]= k_means(x, K, cen);%% k均值聚类
%%固定标签
[~,indx1]=sort(centroids(:,1));
indx2=indx1-[1:K]';
%初始化一个空数组来存储不按顺序排列的点的索引
% 遍历数组,比较相邻元素
for i = 1:length(indx2)
if indx2(i)==0
s=s+1;
else
s=s+0;
end
end
end
%%图中标注聚类错误部分
sidx = grp2idx(species);
miss = find(idx'~= sidx);
error=length(miss);
fitness=100-100*(length(idx)-error)/length(idx);
end