fcm算法的MATLAB实现
fcm算法
分析:
1.算法中包含的参数:
a.模糊因子expo(expo>1)
b.最大迭代次数max_t
c.迭代终止条件ε
2.算法中包含的过程:
a.目标函数
b.欧式距离
c.隶属矩阵
d.聚类中心
e.迭代过程
还有 不要忘记!!初始化!!
3.实现代码过程中需要写成子函数的部分:
a.初始化函数initfcm() (主要实现隶属度矩阵的初始化)
b.一次聚类过程stepfcm()(包含目标函数,隶属矩阵的计算等等)
c.距离函数distfcm()
d.画图函数plotfcm()
代码实现:
· 函数定义–左边是输出参数,右边是函数名以及输入参数
主函数:
function[center, U, obj_fcn] = fcm_final(data,c,options)
% 输入:
% data 数据集 n行m列,n为样本数据数,m为数据的特征数
% c 聚类中心的个数
%options(1): 隶属度矩阵U的指数expo,>1(缺省值: 2.0)
%options(2): 最大迭代次数max_t(缺省值: 100)
%options(3): 隶属度最小变化量e,迭代终止条件(缺省值: 1e-5)
%options(4): 每次迭代是否输出信息标志(缺省值: 1)
% 输出:
% U 隶属度矩阵
% center 聚类中心
% obj_fcn 目标函数if nargin ~= 2 && nargin ~= 3error('Too many or too few input argument! ');
end
data_n = size(data, 1);
data_m = size(data, 2);default_options = [2; 100; 1e-5; 1];if nargin == 2,options = default_options;
else if length(options) < 4,temp = default_options;temp(1:length(options)) = options;options = temp;endnan_index = find(isnan(options) == 1);options(nan_index) = default_options(nan_index);if options(1) <= 1,error('The exponent should be greater than 1 !');endendexpo = options(1);
max_t = options(2);
e = options(3);
display = options(4);obj_fcn = zeros(maxt, 1);
U = initfcm(c, data_n);for i = 1 : max_t[U, center, obj_fcn(i)] = stepfcm(data, U, c, expo);if display,fprintf('FCM:Iteration count = %d, obj_fcn = %f\n',i,obj_fcn(i));plotfcm(data,center,U,obj_fcn);endif i > 1,if abs(obj_fcn(i) - obj_fcn(i-1)) < e,break;endendend
iter_n = i;obj_fcn(iter_n + 1 : max_t) = [];
end> 子函数:**1.初始化函数initfcm()**
% U–> c * n(c行n列) ,c为聚类数, n为样本数
%% 初始化隶属矩阵时需要已知矩阵的行和列,因此输入应该为该矩阵的行和列
% 输入: c, data_n
% data_n 数据集data所含的样本数
% c 这组数据的聚类数
% 输出:U(初始化之后的隶属矩阵)
function[U] = initfcm(c, data_n)
U = rand(c, data_n);
col_sum = sum(U);
U = U./col_sum(ones(c,1), : );
end
**2.一次聚类过程stepfcm()**
% 一次聚类包含的过程:
% % (1)计算聚类中心,(2)目标函数,(3)距离函数,(4)计算新的隶属矩阵
% 输入:data,U,c,expo(模糊因子)
% 输出:U_new(新的隶属矩阵),center(聚类中心),obj_fcn(目标函数)
function[U_new, center, obj_fcn] = stepfcm(data, U, c, expo)
mf = U.^expo;
center = mf*data./((ones(size(data,2),1)*sum(mf’))’));
dist = distfcm(center, data);
obj_fcn = sum(sum(dist.^2 * mf));
temp = dist.^(-2/(expo-1));
U_new = temp./(ones(c,1)*sum(temp));
end
**3.距离函数distfcm()**
% 输入:data, center
% 输出:out
function out = disfcm(center,data)
out = zeros(size(center, 1), size(data, 1));
for k = 1:size(center, 1)
out(k,:) = sqrt(sum(((data - ones(size(data,1),1)*center(k,:)).^2)’,1));
end
end
**4.画图函数plotfcm()**
% 输入:data, center, U, obj_fcn
% 对fcmdata.dat(MATLAB自带的聚类数据集,有两个类)进行聚类
function plotfcm(data,center,U,obj_fcn)
figure(1)
subplot(2,1,1);
plot(U(1,:),’-b’);
title(‘隶属度矩阵值’)
ylabel(‘第一类’)
subplot(2,1,2);
plot(U(2,:),’-r’);
ylabel(‘第二类’)
xlabel(‘样本数’)
figure(2)
grid on
plot(obj_fcn);
title(‘目标函数变化值’);
xlabel(‘迭代次数’)
ylabel(‘目标函数值’)
figure(3)
title(‘聚类图像’);
plot(data(:,1),data(:,2),’*r’);
maxU = max(U);
index1 = find(U(1,:)==maxU);
index2 = find(U(2,:)==maxU);
plot(data(index1,1),data(index1,2),’*g’);
hold on
plot(data(index2,1),data(index2,2),’*r’);
plot(center(1,1),center(1,2),‘oy’,‘Markersize’,5,‘linewidth’,3)
plot(center(2,1),center(2,2),‘ob’,‘Markersize’,5,‘linewidth’,3)
hold off;
end
> 聚类结果![这里写图片描述](https://img-blog.csdn.net/20180730115135432?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2luX25vY2VuY2U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)> 收获心得%% 由于具有4个特征值的鸢尾花数据集是四维的,无法在图像中展示,可采用两两比对的方式展现。
%% 代码中的隶属度矩阵啊聚类中心啊目标函数啊等等这些表示实际上都是将算法中的数学计算式转化成矩阵问题,要注意理解。
fcm算法的MATLAB实现相关推荐
- fcm算法的MATLAB实现,FCM算法的matlab程序(初步)
FCM算法的matlab程序 1.采用iris数据库 iris_data.txt 5.1 3.5 1.4 0.2 4.9 3 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0 ...
- FCM算法原理及matlab实现
(一)FCM算法原理 Fuzzy c-means (FCM) is a clustering method that allows each data point to belong to multi ...
- Matlab中的FCM算法代码及中文详解
Matlab中的FCM算法代码及中文详解 转自:http://xiaozu.renren.com/xiaozu/106512/336681453 function [center, U, obj_fc ...
- matlab中存档算法代码,Matlab中的FCM算法代码及中文详解
Matlab中的FCM算法代码及中文详解 转自:http://xiaozu.renren.com/xiaozu/106512/336681453 function [center, U, obj_fc ...
- 【图像分割】基于matlab形态学重建和过滤改进FCM算法(FRFCM)的图像分割【含Matlab源码 085期】
⛄一.简介 首先,通过引入形态学重构操作将图像的局部空间信息纳入FRFCM中,以保证抗噪性和图像细节保留.其次,基于局部空间邻居和聚类中心内像素之间距离的成员资格分区的修改被仅依赖于成员资格分区的空间 ...
- 模糊聚类FCM算法和基于GA遗传优化的FCM聚类算法matlab仿真
目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 在各种糊聚类算法中 ,模糊C -均值聚类算法FCM (FuzzyC MeanClusteri ...
- 【图像分割】基于模糊聚类算法FCM实现图像分割matlab代码
1 简介 图像分割是数字图象处理中关键技术之一,是重要的研究领域,也是计算机视觉中的一个经典问题.聚类分析是图像分割领域的重要分支之一,也是数据挖掘中进行数据处理的重要分析工具和方法,且应用广泛.近年 ...
- fcm算法c语言实现,基于特征权重的FCM算法研究及应用
摘要: 模糊C-均值(FCM)聚类算法是非监督模式识别中应用范围最广泛的算法之一.但是传统的FCM算法中,设定样本的各维特征对分类效果的贡献水平是相同的.在实际中,由于特征提取不够完善,使得特征矢量中 ...
- fcm脑图像分割matlab,MATLAB程序:用FCM分割脑图像
MATLAB程序:用FCM分割脑图像 1. MATLAB程序 FCM_image_main.m function [accuracy,iter_FCM,run_time]=FCM_image_main ...
- 基于遗传模拟退火算法的模糊C-均值聚类算法(SAGAFCM)—MATLAB实现
本文的代码将放在最后,需要的小伙伴们可以免费获取哦!!! 文章目录 一.模糊C-均值聚类(FCM) 1.介绍 1).算法初步介绍 2)算法步骤 2.MATLAB实现 1).问题描述 2).算法实现 二 ...
最新文章
- linux卸载kodi,如何在Ubuntu上安装Kodi 18 Beta
- 宝藏文章!【CCNA命令大全】
- char与TCHAR相互转化
- boost::safe_numerics::interval相关的测试程序
- DCMTK:“内容映射资源”Content Mapping Resource中的各种CIDxxx和TIDxxx类的测试程序
- 你知道你常用的dos和linux命令吗?
- COSC 1047 – Winter 2019 – Assignment
- java 带超时时间lru_如何在O(1)时间复杂度下实现LRU
- 从零开始徒手撸一个vue的toast弹窗组件
- php 请求java_怎么php发送get请求给Java,然后返回想要的具体参数
- scala implicit隐式转化与隐式参数
- 本科论文发表的难度大吗
- 图像深度:8bit、16bit、24bit、32bit; 16.7M色彩
- C语言百分号加字母%d%p%o%x%u%c%s%f%e%g代表作用
- 其他:管理员账户已被禁用
- 「区块链系列」搭建区块链底层技术
- 计算机常用工具软件实训总结报告,计算机常用工具软件实训报告
- mysql expires_离expires区别
- Hydration 是什么?
- 小白自学c51笔记之数码管1——D74HC245和D74HC138