求GAFCM的目标函数及基于聚类中心种群的Python实现代码
遗传模糊C均值算法(GAFCM)目标函数及Python实现
一、GAFCM目标函数说明
遗传模糊C均值算法(GAFCM)结合遗传算法全局搜索能力与模糊C均值(FCM)聚类特性,以聚类中心作为种群个体,核心目标函数基于FCM构建,本质是最小化样本到对应聚类中心的加权平方距离之和,权重由样本隶属度决定。
目标函数公式:
$$J(U, V) = \sum_{i=1}^{N} \sum_{k=1}^{C} u_{ik}^m |x_i - v_k|^2$$
其中:
- $u_{ik}$:样本$x_i$属于聚类$k$的隶属度
- $m$:模糊指数(通常取2)
- $v_k$:第$k$个聚类中心
- $N$:样本总数
- $C$:聚类类别数
二、Python实现代码
以下是以聚类中心为种群个体的GAFCM目标函数实现,包含距离计算和适应度(目标函数)计算两个核心函数:
import numpy as np def distfcm_(data, V): """ 计算每个聚类中心到所有样本的欧氏距离 参数: data: 样本数据集,形状为(N, D),N为样本数,D为特征维度 V: 聚类中心集合,形状为(C, D),C为聚类数,D为特征维度 返回: dist: 距离矩阵,形状为(C, N),dist[k][i]代表第k个聚类中心到第i个样本的距离 """ dist = np.zeros((V.shape[0], data.shape[0])) for k in range(V.shape[0]): # 利用numpy自动广播简化计算,适配任意维度样本与聚类中心 dist[k, :] = np.sqrt(np.sum((data - V[k, :])**2, axis=1)) return dist def fitness_function(X, C, c, m, alfa): """ GAFCM的适应度函数(即目标函数),计算加权平方距离之和并返回 参数: X: 样本数据集,形状为(N, D) C: 当前种群中的聚类中心个体,形状为(C, D) c: 聚类类别数(可根据需求替换内置的cluster_n值) m: 模糊指数 alfa: 预留扩展参数(当前实现未使用,可用于添加正则项等) 返回: obj_fcn: 目标函数值,即加权平方距离总和 """ dist = distfcm_(X, C) cluster_n = 3 expo = m # 计算隶属度矩阵U tmp = dist ** (2 / -(expo - 1)) U = tmp / np.sum(tmp, axis=0) # 按列归一化得到隶属度 mf = U ** expo # 隶属度的m次幂 # 计算最终目标函数值 obj_fcn = np.sum((dist ** 2) * mf) return obj_fcn
代码优化说明
- 优化了原代码的广播逻辑,移除手动创建的固定维度
ones((150,4)),利用numpy自动广播特性适配任意维度的样本与聚类中心。 - 为函数添加清晰注释,明确参数、返回值含义,提升代码可读性。
内容的提问来源于stack exchange,提问作者Soap
相关产品推荐
相关产品推荐

