资源简介
利用蚁群算法得到模糊聚类的初始值,再利用FCM对样本数据进行分类。
代码片段和文件信息
clc;
clf;
clear;
% X = 测试样本矩阵;
X = load(‘data1.TXT‘);
[Nn]=size(X); % N =测试样本数;n =测试样本的属性数;
K = 4; % K = 组数;
R = 100; % R = 蚂蚁数;
t_max = 1000; % t_max =最大迭代次数;
% 初始化
c = 10^-2;
tau = ones(NK) * c; %信息素矩阵,初始值为0.01的N*K矩阵(样本数*聚类数)
q = 0.9; % 阈值q
rho = 0.1; % 蒸发率
best_solution_function_value = inf; % 最佳路径度量值(初值为无穷大,该值越小聚类效果越好)
tic %计算程序运行时间
t = 1;
%=======程序终止条件(下列两个终止条件任选其一)======
% while ((t<=t_max)) %达到最大迭代次数而终止
% while ((best_solution_function_value>=19727)) %达到一定的聚类效果而终止
while ((best_solution_function_value>=19727))
%=========================
%路径标识字符:标识每只蚂蚁的路径
solution_string = zeros(RN+1);
for i = 1 : R %以信息素为依据确定蚂蚁的路径
r = rand(1N); %随机产生值为0-1随机数的1*51的数组
for g = 1 : N
if r(g) < q %如果r(g)小于阈值
tau_max = max(tau(g:));
Cluster_number = find(tau(g:)==tau_max); %聚类标识数,选择信息素最多的路径
solution_string(ig) = Cluster_number(1); %确定第i只蚂蚁对第g个样本的路径标识
else %如果r(g)大于阈值求出各路径信息素占在总信息素的比例,按概率选择路径
sum_p = sum(tau(g:));
p = tau(g:) / sum_p;
for u = 2 : K
p(u) = p(u) + p(u-1);
end
rr = rand;
for s = 1 : K
if (rr <= p(s))
Cluster_number = s;
solution_string(ig) = Cluster_number;
break;
end
end
end
end
% 计算聚类中心
weight = zeros(NK);
for h = 1:N %给路径做计算标识
Cluster_index = solution_string(ih); %类的索引编号
weight(hCluster_index) = 1; %对样本选择的类在weight数组的相应位置标1
end
cluster_center = zeros(Kn); %聚类中心(聚类数K个中心)
for j = 1:K
for v = 1:n
sum_wx = sum(weight(:j).*X(:v)); %各类样本各属性值之和
sum_w = sum(weight(:j)); %各类样本个数
if sum_w==0 %该类样本数为0,则该类的聚类中心为0
cluster_center(jv) =0
continue;
else %该类样本数不为0,则聚类中心的值取样本属性值的平均值
cluster_center(jv) = sum_wx/sum_w;
end
end
end
% 计算各样本点各属性到其对应的聚类中心的均方差之和,该值存入solution_string的最后一位
F = 0;
for j= 1:K
for ii = 1:N
Temp=0;
if solution_string(iii)==j;
for v = 1:n
Temp = ((abs(X(iiv)-cluster_center(jv))).^2)+Temp;
end
Temp = sqrt(Temp);
end
F = (Temp)+F;
end
end
solution_string(iend) = F;
- 上一篇:Matlab车牌定位源代码
- 下一篇:目标跟踪程序
评论
共有 条评论