1 简介
随着模糊聚类理论的形成,针对不同的应用层面,越来越多的模糊聚类算法被提出来,最为典型的有基于目标函数的模糊聚类方法、基于相似-模糊关系的方法、基于模糊等价关系的传递闭包法、还有基于图论的最小支撑树方法等。在众多模糊算法中,基于目标函数的模糊聚类方法(FCM)是其中最受欢迎的一种。该方法是将归类问题转化为一个约束的、非线性的规划问题。通过优化求解这个规划问题,从而得到数据集的模糊划分和归类。该方法设计简单,应用范围广,还可以借助经典数学的非线性规划理论求解,而且容易通过计算机编程语言在计算机上得以实现。聚类,就是对事物按照一定的规律和要求进行分类的过程,其中仅通过事物之间的相似性作为分类规则,而缺乏对数据的先验知识的分类属于无监督分类。而聚类分析是通过数学的方法将一个原本没有类别标记的样本集按照一定的准则划分成几个子集,使得相似的样本尽可能的聚集在一类,不相似的样本尽可能的处于不同的类中,是一种多元统计分析方法。?
2 部分代码
function [U, V,objFcn] = myfcm(weight, data, c, T, m, epsm)
% fuzzy c-means algorithm
% 输入: data: 待聚类数据,n行s列,n为数据个数,s为每个数据的特征数
% c : 聚类中心个数
% m : 模糊系数
% 输出: U : 隶属度矩阵,c行n列,元素uij表示第j个数据隶属于第i类的程度
% V : 聚类中心向量,c行s列,有c个中心,每个中心有s维特征
% written by Zhang Jin
% see also : mydist.m myplot.m
if nargin < 4
T = 100; %默认迭代次数为100
end
if nargin < 6
epsm = 1.0e-6; %默认收敛精度
end
if nargin < 5
m = 2; %默认模糊系数值为2
end
[n, s] = size(data);
% 初始化隶属度矩阵U(0),并归一化
U0 = rand(c, n);
temp = sum(U0,1);
for i=1:n
U0(:,i) = U0(:,i)./temp(i);
end
iter = 0;
V(c,s) = 0;
U(c,n) = 0;
distance(c,n) = 0;
while( iter<T )
iter = iter + 1;
% U = U0;
% 更新V(t)
Um = U0.^m;
V = Um*data./(sum(Um,2)*ones(1,s)); % MATLAB矩阵相乘啊,好东西
% 更新U(t)
for i = 1:c
for j = 1:n
distance(i,j) = mydist(data(j,:),V(i,:),weight); % 算距离,去data的第j行
end
end
U=1./(distance.^m.*(ones(c,1)*sum(distance.^(-m))));
objFcn(iter) = sum(sum(Um.*distance.^2));
% FCM算法停止条件
if norm(U-U0,Inf)<epsm
break
end
U0=U;
end
% myplot(U,objFcn);
3 仿真结果
4 参考文献
[1]戈国华, 肖海波, 张敏. 基于FCM的数据聚类分析及Matlab实现[J]. 福建电脑, 2007(4):2.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除