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)
结果如下图:
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于