matlab 实现模糊C均值聚类

1. 原理

模糊c均值算法步骤:

1. 设定聚类数目c和加权指数b:

2. 初始化各个聚类中心m

3. 重复下面的运算,直到各个样本的隶属度值稳定:用当前的聚类中心根据下式计算隶属度函数:

用当前的隶属度函数按下式更新计算各类聚类中心:

当模糊C均值算法收敛时,就得到了各类的聚类中心和各个样本对于各类的隶属度值,从而完成了模糊聚类划分

Matlab中模糊c均值聚类函数(b=2):

[Center,U,obj_fcn]=fcm(data,cluster_n)

data:要聚类的数据集合,每一行为一个样本;

cluster_n:聚类数;

Center:最终的聚类中心矩阵,每一行为聚类中心的坐标值;

U:最终的模糊分区矩阵;

obj_fcn:在迭代过程中的目标函数值。

2. 过程

2.1 数据集合并及可视化

 

将MALE.txt和FEMALE.txt文件合并成一个data.txt文件,在matlab中导入data文件并绘制样本点分布:

图1 初始样本点分布图

2.2 模糊c均值聚类

调用MATLAB中模糊c均值聚类函数fcm实现聚类,初始设置聚类簇的个数为2,求出每个样本的最大隶属度,然后找出分别属于两类样本的点并绘制图像:

程序如上图所示,运行后聚类结果如下:

图2 迭代过程中目标函数值

可以看出目标函数值在迭代中是不断减小的

图3 聚类结果

图4 簇为2聚类结果样本点分布

为了能够寻找到更合理的聚类数目,接下来分别进行3类、4类、5类聚类

图5 簇个数为3

图6 簇个数为4

图7 簇个数为5

3. 结果与分析

在上述实验过程中,我们成功实现了模糊c均值聚类,因为数据集是由两类样本合成的所以初始聚类簇的个数设置为2,结果如图4所示,然后从图中可以发现聚类效果似乎并非最佳,于是后续又增大了簇的个数进行多次实验,如图5到图7所示,通过观察可知聚类个数为4时或许会更加合理。在实验迭代的过程中可以了解到这种聚类的方式主要是通过优化目标函数然后得到每个样本点对所有类中心的隶属度,从而决定样本点的类属以达到自动对样本数据进行聚类的目的。同时我也通过改变聚类个数的方式去寻找更加合理的类别数。但是实验中还缺少对于聚类优劣的描述,可以通过一些聚类指标来对实验进行进一步优化。

以下是一个基于模糊c均值聚类Matlab代码示例: ``` % 读取数据 data = csvread('data.csv'); % 初始化参数 num_clusters = 3; % 聚类数 fuzziness = 2.0; % 模糊度 threshold = 1e-6; % 停止迭代的阈值 max_iter = 1000; % 最大迭代次数 num_samples = size(data, 1); num_features = size(data, 2); % 初始化隶属度矩阵 U = rand(num_samples, num_clusters); U = U./repmat(sum(U, 2), 1, num_clusters); % 迭代计算 for i = 1:max_iter % 计算聚类中心 centroids = U' * data ./ repmat(sum(U)', 1, num_features); % 计算距离矩阵 distances = zeros(num_samples, num_clusters); for j = 1:num_clusters distances(:, j) = sum((data - repmat(centroids(j, :), num_samples, 1)).^2, 2); end % 更新隶属度矩阵 U_new = zeros(num_samples, num_clusters); for j = 1:num_clusters U_new(:, j) = 1./distances(:, j).^(2/(fuzziness-1)); end U_new = U_new./repmat(sum(U_new, 2), 1, num_clusters); % 检查是否停止迭代 if max(max(abs(U_new - U))) < threshold break; end U = U_new; end % 显示结果 [~, labels] = max(U, [], 2); scatter(data(:, 1), data(:, 2), 15, labels, 'filled'); ``` 在此示例中,我们首先读取一个名为"data.csv"的二维数据集。然后,我们指定了聚类数、模糊度、停止迭代的阈值和最大迭代次数等参数。接下来,我们初始化隶属度矩阵并开始迭代计算。每次迭代时,我们计算聚类中心、距离矩阵和新的隶属度矩阵,并检查是否满足停止迭代的条件。最后,我们将结果可视化,使用不同的颜色表示不同的簇。 请注意,这个示例是基于标准的模糊c均值聚类算法。实际上,有许多改进的方法可以提高聚类的效率和准确性,如基于遗传算法模糊c均值聚类模糊c均值聚类模糊度自适应调整等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

deleteeee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值