FuzzyCMeans算法
FuzzyC-Means
模糊c-均值聚类算法 fuzzy c-means algorithm(FCMA)或(FCM)。模糊c均值聚类算法,是当前模糊系统里表现比较好的算法之一 其特征与k-means相似,也是基于距离来判断分类。模糊c均值需要用户提供除数据之外至少一个参数,而这个参数与k-means中的k类似。
模糊c-均值聚类算法意在求解一个最小化问题即:

其中,uij为样本xj属于第i类的隶属度,故u是一个c×n的矩阵,xj就是第j个样本数据,ci为第i个聚类中心一共有c个,m则是一个大于1的加权常数一般取2,可由用户定义。 在这里每个样本对于不同类的隶属度之和被限制为1,但一般情况下模糊集合的隶属度通常加起来不为1。接下来我们需要把这个条件极值问题转化为无条件的极值问题, 这里用到的方法就是拉格朗日乘子法:

然后需要对各个变量求导,以求得使得原式最小的变量值。对聚类的中心C求导:

其中,

故:

然后,

最后,

至此聚类中心C的迭代公式已确认,接下来就是模糊矩阵u的迭代推导。
第一部分,先对条件式的前半部分对u进行求导。

然后再求后半部分。

将两部分叠加。



最后u的迭代公式:

(以上参考至:https://www.cnblogs.com/wxl845235800/p/11053261.html)
接下来我们就可以根据两个迭代公式将算法轻松地编程。初始模糊矩阵取随机数,采用的分类数据为鸢尾花数据集,m设置为2,截至条件为u的二范数变化小于1e-4.
function [V,F]=FSC(X,C,m)
[n,D]=size(X);
if D>n
X=X';
[n,D]=size(X);
end
if nargin==2
m=2;
end
old=0;
A=rand(C,n);
A=oneness(A,n);
new=norm(A);
while abs(new-old)>1e-4
old=new;
V=updataV(A);
A=updataA(X,V);
new=norm(A);
[~,index]=max(A);
end
F=zeros(C,n);
for f=1:n
F(index(f),f)=1;
end
if D>2
X=zscore(X); %数据标准化
[~,~,latent]=pca(X); %PCA降维
[~,b]=sort(latent,'descend');
X=X(:,b(1:2)); %取前两维绘图
PlotClusterinResult(X,index);
end
if D==2
PlotClusterinResult(X,index);
end
function A=oneness(A,n)
for i=1:n %模糊矩阵概率归一
A(:,i)=A(:,i)/sum(A(:,i));
end
end
function V=updataV(A)
V=zeros(D,C);
for i=1:C
V(:,i)=(A(i,:).^m*X)'/sum(A(i,:).^m);
end
end
function A=updataA(X,V)
A=zeros(C,n);
for i=1:C
for j=1:n
A(i,j)=1/sum((norm(X(j,:)'-V(:,i))./norm(X(j,:)'-V)).^(1/(m-1)));
end
end
A=oneness(A,n);
end
end
function PlotClusterinResult(X, IDX)
k=max(IDX);
Colors=hsv(k);
Legends = {};
for i=0:k
Xi=X(IDX==i,:);
if i~=0
Style = 'x';
MarkerSize = 8;
Color = Colors(i,:);
Legends{end+1} = ['Cluster #' num2str(i)];
else
Style = 'o';
MarkerSize = 6;
Color = [0 0 0];
if ~isempty(Xi)
Legends{end+1} = 'Noise';
end
end
if ~isempty(Xi)
plot(Xi(:,1),Xi(:,2),Style,'MarkerSize',MarkerSize,'Color',Color);
end
hold on;
end
hold off;
axis equal;
grid on;
legend(Legends);
legend('Location', 'NorthEastOutside');
end
测试Matlab自带fisheriris数据集。
FSC(meas,3)
结果如下图:

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)