
[data_n,in_n] = size(data)
m= 2 % Exponent for U
max_iter = 100 % Max. iteration
min_impro =1e-5% Min. improvement
c=3
[center, U, obj_fcn] = fcm(data, c)
for i=1:max_iter
if F(U)>0.98
break
else
w_new=eye(in_n,in_n)
center1=sum(center)/c
a=center1(1)./center1
deta=center-center1(ones(c,1),:)
w=sqrt(sum(deta.^2)).*a
for j=1:in_n
w_new(j,j)=w(j)
end
data1=data*w_new
[center, U, obj_fcn] = fcm(data1, c)
center=center./w(ones(c,1),:)
obj_fcn=obj_fcn/sum(w.^2)
end
end
display(i)
result=zeros(1,data_n)U_=max(U)
for i=1:data_n
for j=1:c
if U(j,i)==U_(i)
result(i)=jcontinue
end
end
end
我贴部分FCM的Matlab代码:expo = options(1) % Exponent for U
max_iter = options(2) % Max. iteration
min_impro = options(3) % Min. improvement
display = options(4) % Display info or not
obj_fcn = zeros(max_iter, 1)% Array for objective function
U = initfcm(cluster_n, data_n) % Initial fuzzy partition
% Main loop
for i = 1:max_iter,
[U, center, obj_fcn(i)] = stepfcm(data, U, cluster_n, expo)
if display,
fprintf('Iteration count = %d, obj. fcn = %f\桐宏n', i, obj_fcn(i))
end
% check termination condition
if i >1,
if abs(obj_fcn(i) - obj_fcn(i-1)) <min_impro, breakend,
end
end
其中
U = initfcm(cluster_n, data_n) % Initial fuzzy partition
这个就是初始化划分矩阵,随机产生一个隶属判轮芦度矩阵,
代码如下:
U = rand(cluster_n, data_n)
col_sum = sum(U)
U = U./col_sum(ones(cluster_n, 1), :)
上面就是它初始化的一个隶属度矩阵,
cluster_n行,data_n列。
即一列中从掘带上到下表示每个样本隶属与每一类的隶属度。
然后在算法中不断迭代,
最后得到的还是如此大的一个矩阵,代表每个样本隶属与每一类的隶属度
然后选择最大的那个就是,它就属于那一类。
模糊C均值聚类算和源法,可将输入的数据集data聚为指定的cluster_n类\x0d\x0a\x0d\x0a【函数描述】 \x0d\x0a语法格式 \x0d\x0a[center, U, obj_fcn] = FCM(data, cluster_n, options)\x0d\x0a\x0d\x0a用法: \x0d\x0a1. [center,U,obj_fcn] = FCM(Data,N_cluster,options)\x0d\x0a2. [center,U,obj_fcn] = FCM(Data,N_cluster)\x0d\x0a\x0d\x0a输入前好变量 \x0d\x0adata ---- n*m矩阵,表示n个样本,每个样本具有m维特征值 \x0d\x0acluster_n ---- 标量,表示聚合中心数目,即类别数 \x0d\x0aoptions ---- 4*1列向量,其中 \x0d\x0aoptions(1): 隶属度矩阵U的指数,>1(缺省值: 2.0) \x0d\x0aoptions(2): 最大迭代次数(缺省值: 100) \x0d\x0aoptions(3): 隶属度最小变化量,迭代终止条件(缺省值: 1e-5) \x0d\x0aoptions(4): 每次迭代是否输出信息标志(缺省值慧棚铅: 0) \x0d\x0a\x0d\x0a输出变量 \x0d\x0acenter ---- 聚类中心 \x0d\x0aU ---- 隶属度矩阵 \x0d\x0aobj_fcn ---- 目标函数值欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)