模糊 C-均值算法容易收敛于局部极小点,为了克服该缺点,将遗传算法应用于模糊 C-均值
算法(FCM)的优化计算中,由遗传算法得到初始聚类中心,再使用标准的模糊 C-均值聚类
算法得到最优分类结果,本文提供 matlab 源代码,测试无误,请放心下载。
function [BESTX,BESTY,ALLX,ALLY]=GAFCM(K,N,Pm,LB,UB,D,c,m)
%% 此函数实现遗传算法,用于模糊 C-均值聚类
%% 输入参数列表
% K&&&&&&& 迭代次数
% N&&&&&&& 种群规模,要求是偶数
% Pm&&&&&& 变异概率
% LB&&&&&& 决策变量的下界,M×1 的向量
% UB&&&&&& 决策变量的上界,M×1 的向量
% D&&&&&&& 原始样本数据,n×p 的矩阵
% c&&&&&&& 分类个数
% m&&&&&&& 模糊 C 均值聚类数学模型中的指数
%% 输出参数列表
% BESTX&&& K×1 细胞结构,每一个元素是 M×1 向量,记录每一代的最优个体
% BESTY&&& K×1 矩阵,记录每一代的最优个体的评价函数值
% ALLX&&&& K×1 细胞结构,每一个元素是 M×N 矩阵,记录全部个体
% ALLY&&&& K×N 矩阵,记录全部个体的评价函数值
%% 第一步:
M=length(LB);%决策变量的个数
%种群初始化,每一列是一个样本
farm=zeros(M,N);
for i=1:M
&&& x=unifrnd(LB(i),UB(i),1,N);
&&& farm(i,:)=x;
end
%输出变量初始化
ALLX=cell(K,1);%细胞结构,每一个元素是 M×N 矩阵,记录每一代的个体
ALLY=zeros(K,N);%K×N 矩阵,记录每一代评价函数值
BESTX=cell(K,1);%细胞结构,每一个元素是 M×1 向量,记录每一代的最优个体
BESTY=zeros(K,1);%K×1 矩阵,记录每一代的最优个体的评价函数值
k=1;%迭代计数器初始化
%% 第二步:迭代过程
while k<=K
%% 以下是交叉过程
&&& newfarm=zeros(M,2*N);
&&& Ser=randperm(N);%两两随机配对的配对表
&&& A=farm(:,Ser(1));
&&& B=farm(:,Ser(2));
&&& P0=unidrnd(M-1);