模糊聚类FCM的MATLAB实现
来源:互联网 发布:网络知识培训手机 编辑:程序博客网 时间:2024/04/30 12:32
FCM的原理在之前的博文中写过。现在按照它的算法流程,用MATLAB实现。共包括三个函数(myfcm.m, mydist.m, myplot.m)
测试数据集用的是鸢尾花(iris)数据集。下载地址 http://download.csdn.net/detail/u013657981/9241121
1. myfcm.m
function [U, V,objFcn] = myfcm(data, c, T, m, epsm)% fuzzy c-means algorithm% 输入: data: 待聚类数据,n行s列,n为数据个数,s为每个数据的特征数% c : 聚类中心个数% m : 模糊系数% 输出: U : 隶属度矩阵,c行n列,元素uij表示第j个数据隶属于第i类的程度% V : 聚类中心向量,c行s列,有c个中心,每个中心有s维特征% written by Zhang Jin% see also : mydist.m myplot.mif nargin < 3 T = 100; %默认迭代次数为100endif nargin < 5 epsm = 1.0e-6; %默认收敛精度endif nargin < 4 m = 2; %默认模糊系数值为2end[n, s] = size(data); % 初始化隶属度矩阵U(0),并归一化U0 = rand(c, n);temp = sum(U0,1);for i=1:n U0(:,i) = U0(:,i)./temp(i);enditer = 0; V(c,s) = 0; U(c,n) = 0; distance(c,n) = 0;while( iter<T ) iter = iter + 1;% U = U0; % 更新V(t) Um = U0.^m; V = Um*data./(sum(Um,2)*ones(1,s)); % MATLAB矩阵相乘啊,好东西 % 更新U(t) for i = 1:c for j = 1:n distance(i,j) = mydist(data(j,:),V(i,:)); end end U=1./(distance.^m.*(ones(c,1)*sum(distance.^(-m)))); objFcn(iter) = sum(sum(Um.*distance.^2)); % FCM算法停止条件 if norm(U-U0,Inf)<epsm break end U0=U;endmyplot(U,objFcn);
2. mydist.m
function d = mydist(X,Y)% 计算向量Y到向量X的欧氏距离的开方d = sqrt(sum((X-Y).^2));end
3. myplot.m
function myplot(U,objFcn)% 将隶属度U矩阵可视化figure(1)subplot(3,1,1);plot(U(1,:),'-b');title('隶属度矩阵值')ylabel('第一类')subplot(3,1,2);plot(U(2,:),'-r');ylabel('第二类')subplot(3,1,3);plot(U(3,:),'-g');xlabel('样本数')ylabel('第三类')figure(2)grid onplot(objFcn);title('目标函数变化值');xlabel('迭代次数')ylabel('目标函数值')
结果
可以看到,大约迭代了8次左右,目标函数开始收敛,从隶属度矩阵上可以看出,第一类与其它类区分较为明显,第二类和第三类比较相似,区分度有所降低。
0 0
- 模糊聚类FCM的MATLAB实现
- 机器学习笔记----Fuzzy c-means(FCM)模糊聚类详解及matlab实现
- 机器学习笔记----Fuzzy c-means(FCM)模糊聚类详解及matlab实现
- fcm算法的MATLAB实现
- 模糊聚类算法(FCM)和硬聚类算法(HCM)的VB6.0实现及其应用
- 模糊聚类算法(FCM)和硬聚类算法(HCM)的VB6.0实现及其应用
- 模糊聚类算法(FCM)和硬聚类算法(HCM)的VB6.0实现及
- 模糊聚类算法(FCM)和硬聚类算法(HCM)的VB6.0实现及其应用
- FCM 模糊C均值聚类算法
- 模糊C均值聚类算法(FCM) --…
- FCM聚类算法(模糊C均值算法)
- 模式识别经典算法——FCM图像聚类分割(最简matlab实现)
- 基于数据场和云模型的FCM聚类算法MATLAB源代码
- 基于数据场和云模型的FCM聚类算法MATLAB源代码
- MATLAB实现FCM算法,简单代码实现
- 模糊C均值算法(FCM)分割图像MATLAB程序
- FCM算法原理及matlab实现
- FCM聚类算法
- 14.LeetCode Longest Common Prefix(easy)[字符串公共前缀]
- 通俗易懂的机器学习入门指导
- Dubbo框架结构
- [线段树]讲义(1)
- 在Action 中读取页面传递来的数据
- 模糊聚类FCM的MATLAB实现
- CodeForces 200B Drinks
- 插入排序 java实现
- 黑马程序员——JAVA学习日志之多线程
- 01背包算法 动态规划(c++实现)
- poj-3041-Asteroids
- python调用caffe接口进行classify时提示Mean shape incompatible with input shape错误的解决方法
- android常见错误一
- quartz cron 表达式用法(CronTrigger 教程)