基于核方法的模糊C均值聚类
摘要:
本文主要针对于FCM算法在很大程度上局限于处理球星星团数据的不足,引入了核方法对算法进行优化。
与许多聚类算法一样,FCM选择欧氏距离作为样本点与相应聚类中心之间的非相似性指标,致使算法趋向于发现具有相近尺度和密度的球星簇。因此,FCM很大程度上局限于对球星星团的处理,不具有普遍性。联系到支持向量机中的核函数,可采用核方法将数据映射到高维特征空间进行特征提取从而进行聚类。现阶段,核方法已广泛应用于模糊聚类分析算法。核方法的应用目前已成为计算机智能方面的热点之一,对于核学习的深入研究具有很重要的意义。本文主要讲述将核方法应用到FCM算法中。
一 核方法概述
1. 核方法的简单介绍
核方法起源于支持向量机(SVM)理论,将数据通过特征映射嵌入到相应的特征空间(希尔伯特空间),发现数据在特征空间上的线性模式,进而选取相应的核函数利用输入计算内积,其中特征映射Φ的作用就是将数据重新编码,从而发现数据之间的线性模式。根据对偶解法可得算法所需要的信息位于特征空间上数据点之间的内积,所以可以将内积作为输入特征的直接函数,同时也减少了算法的时间复杂度。因此,核方法常用来处理那些效率低下,特征相似的问题。
核函数是核方法应用的关键,它在很大程度上解决了非线性以及高维数问题。核函数对数据进行隐性的非线性映射,不用具体求出非线性映射,只需计算内积,使算法更为高效和灵活。核函数的本质是解决数据之间的相似问题,核函数可以有很多不同的形式,并且构造方法也多种多样,现已得到了多种核函数,不同的核函数可作为不同的相似度指标,在FCM算法中就是衡量样本点和聚类中心之间的距离。
基于上述分析,我们需要解决非球星星团的聚类分析问题。联系到T.M.Cover的模式可分性定理:一个复杂的模式分析问题映射到高维空间后,会比在低维空间线性可分。结合支持向量机,联系到核方法,可将数据使用Mercer核映射到高维特征空间进行特征提取,选取相应的核函数进行聚类分析。
2. 核方法的研究进展
早在20世纪60 年代就有学者在模式识别中引入了核函数,直到支持向量机成功应用于模式识别,核方法才得到了快速的发展。Scholkopfs等人首先在特征提取中应用到了核学习的思想,提出核主成分分析法(KPCA);之后,Mika、Baudt、Roth等人采用核学习方法将线性判别分析算法拓展为核判别分析算法。核方法的研究逐渐活跃起来,已涌现出了大量算法,经过学者们的不懈努力,核方法现已形成了较完整的学习研究体系。目前针对于核方法的研究大体可以分为:基于核学习的分类算法、基于核学习的聚类算法(核聚类)以及基于核学习的神经网络等研究分支。
核聚类是近年发展起来的一个重要分支,现已取得了丰硕的成果。随着核学习研究的不断深入,核学习已被广泛应用到字符识别、人脸识别、图像检索、目标跟踪、图像处理以及文本归类等各个领域。可以断言,核方法必将有更为广阔的应用前景。
3. 核模糊C均值聚类
该算法选取相应的核函数替代FCM算法中的欧氏距离。结合FCM算法我们来分析一下核模糊C均值聚类,在这里我们可将其表示为KFCM。
我们知道,FCM的目标函数为:

约束条件为:
现在要引入核方法,则可将目标函数转化为:
其中Φ指的是特征映射,根据核方法的中的转换技巧,我们可以做如下转换:

在此选取高斯核:
,根据
,
结合K(x,x) = 1,则目标函数可转化为:

为了最小化目标函数,结合约束条件,求得聚类中心和隶属度矩阵的更新公式分别为:

根据上述公式不断迭代求出满足条件的隶属度以及聚类中心从而最小化目标函数,保证算法收敛,具体的算法步骤如下:
算法开始之前必须给定一个由N个L维向量组成的数据集X以及所要分得的类别个数C,自定义隶属度矩阵。
(1)设定类别的个数C和模糊系数m;
(2)初始化隶属度矩阵且满足公归一化条件;
(3)根据公式聚类中心;
(4)根据公式更新隶属度矩阵;
(5)根据矩阵范数比较迭代的隶属度矩阵,若收敛,迭代停止,否则返回(3)。
二 MATLAB实现
在此我们选取同样选取MR图像实现,建立MKFC.m文件,代码如下:
%%%%%MKFCM
clear all
clc;
a=imread('MRI.jpg');
I=imnoise(a,'salt & pepper',0.03);
[height,width,c]=size(a);
a=rgb2gray(a);
end
a=double(a);
[row,column]=size(a);
%% 几个参数
beta = ;
cluster_num = ;%将图像分为四类
default_options = [2.0; % exponent for the partition matrix U
; % max. number of iteration
0.01; % min. amount of improvement
]; % info display during iteration
options = default_options;
m = options(); % p,图像的质量参数
iter_num = options(); % Max. iteration 最大迭代次数
threshold = options(); % Min. improvement 最小进化步长
display = options(); % Display info or not 显示信息与否
costfunction = zeros(iter_num, );
%%%%%%%%%%%%%%%%%%%%%%%
tic
%% 初始化隶属度并归一
membership = zeros(height,width,cluster_num);
:height
:width
member_sum=;
:cluster_num
membership(i,j,k)=rand();
member_sum=member_sum + membership(i,j,k);
end
:cluster_num
membership(i,j,p)=membership(i,j,p)/member_sum;
end
end
end
center = zeros(cluster_num,);
:iter_num %迭代次数控制
%% 计算初始中心
:cluster_num
sum = ;
sum1 = ;
:height
:width
sum = sum + membership(h,t,u).^m * exp((-) * (a(h,t) - center(u).^) / (beta.^)) * a(h,t);
sum1 = sum1 + membership(h,t,u).^m * exp((-) * ((a(h,t) - center(u))^) / (beta.^));
end
end
center(u) = sum / sum1;
end
:height
:width
:cluster_num
costfunction(o) = costfunction(o) + * membership(h,t,k).^m * ( - exp( - * ((a(h,t) - center(k)).^)/(beta.^)));
temp =( - exp( - * ((a(h,t) - center(k)).^)/(beta.^))).^(- / (m -));
top = ;
:cluster_num
top = top + ( - exp((- * (a(h,t) - center(p)).^) /(beta.^))).^(- / (m -));
end
membership(h,t,k) = temp / top;
end
end
end
if display,
fprintf('iter.count = %d, obj. fcn = %f\n',o, costfunction(o));
end
)) < threshold , break;end;
end
end
toc
%% 输出图像
newing = zeros(row,column);
:row
:column
maxmembership=membership(i,j,);
index=;
:cluster_num
if(membership(i,j,k)>maxmembership)
maxmembership=membership(i,j,k);
index=k;
end
end
newimg(i,j) = round( * (-(index-)/(cluster_num-)));
end
end
subplot(,,),imshow(uint8(a)); title('原图')
subplot(,,);imshow(I);title('加噪图像');
subplot(,,);imshow(uint8(newimg));title('KFCM分割后的图像');
可以得到结果:

与之前的FCM的分割结果相比还是有很大的提升的。结合之前所分析的,考虑到空间数据之间的相关性,结合各点的邻域信息,在原代码中添加邻域信息:
%% 邻域信息
Xk = zeros(height,width);
:height
:width
up = i - ;
down = i + ;
left = j - ;
right = j + ;
)
up = i;
end
if (down > height)
down = height;
end
)
left = width;
end
if (right > width)
right = height;
end
A = zeros(,);
for x = up : down
for y = left : right
A = a(x,y);
end
end
Xk(i,j) = mean(A);
end
end
这样可对算法进一步优化。
好了,将核方法应用到FCM算法今天就说这么多了,总而言之,核方法的应用确实使算法的性能提高了不少。
基于核方法的模糊C均值聚类的更多相关文章
- 多核模糊C均值聚类
摘要: 针对于单一核在处理多数据源和异构数据源方面的不足,多核方法应运而生.本文是将多核方法应用于FCM算法,并对算法做以详细介绍,进而采用MATLAB实现. 在这之前,我们已成功将核方法应用于FCM ...
- 模糊C均值聚类-FCM算法
FCM(fuzzy c-means) 模糊c均值聚类融合了模糊理论的精髓.相较于k-means的硬聚类,模糊c提供了更加灵活的聚类结果.因为大部分情况下,数据集中的对象不能划分成为明显分离的簇,指派一 ...
- 模糊C均值聚类的公式推导
j=1...n,N个样本 i=1...c,C聚类 一.优化函数 FCM算法的数学模型其实是一个条件极值问题: 把上面的条件极值问题转化为无条件的极值问题,这个在数学分析上经常用到的一种方法就是拉格朗日 ...
- 图像模糊C均值聚类分割代码
转自:直觉模糊C均值聚类与图像阈值分割 - liyuefeilong的专栏 - CSDN博客 https://blog.csdn.net/liyuefeilong/article/details/43 ...
- 5-Spark高级数据分析-第五章 基于K均值聚类的网络流量异常检测
据我们所知,有‘已知的已知’,有些事,我们知道我们知道:我们也知道,有 ‘已知的未知’,也就是说,有些事,我们现在知道我们不知道.但是,同样存在‘不知的不知’——有些事,我们不知道我们不知道. 上一章 ...
- ML: 聚类算法-K均值聚类
基于划分方法聚类算法R包: K-均值聚类(K-means) stats::kmeans().fpc::kmeansruns() K-中心点聚类(K-Medoids) ...
- 高介分类:核方法与支持向量机(SVM)
数据模型:并不是简单地二维数据,多个维度或者对象的数据聚合起来 { persion1's attr1:value1,...,persion1's attrN:va ...
- 【转】算法杂货铺——k均值聚类(K-means)
k均值聚类(K-means) 4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应.但是很多时 ...
- 基于MATLAB的中值滤波均值滤波以及高斯滤波的实现
基于MATLAB的中值滤波均值滤波以及高斯滤波的实现 作者:lee神 1. 背景知识 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. 中值滤 ...
随机推荐
- 深入浅出ES6(十四):let和const
作者 Jason Orendorff github主页 https://github.com/jorendorff 回溯到1995年,当Brendan Eich在设计第一版JavaScript时, ...
- BZOJ 1015: [JSOI2008]星球大战starwar 并查集
1015: [JSOI2008]星球大战starwar Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝 ...
- 如何在jmeter中调用自己写的java工具包
本文介绍在jmeter中调用自己写java工具包,并非直接继承jmeter提供的java sample request接口. 工具/原料 jmeter eclipse 方法/步骤 通常用jmeter做 ...
- ABP集合帖
http://www.cnblogs.com/kebinet/p/5341663.html http://www.cnblogs.com/farb/p/ABPAdvancedTheoryContent ...
- java异步操作实例
1.异步操作过程实例: A.开启一个线程一直执行耗时操作 B.通过每隔多长多件轮询线程是否实行完毕,thread.isCompleted() C.执行完毕后,通过回调函数返回真实信息 一个调用者在调用 ...
- weblogic 安装与配置
Weblogic 安装 从官网 下载 需要的weblogic 版本, 解压缩后得到 wls1036_generic.jar [fmw_12.1.3.0.0_wls.jar , fmw_12.2.1.1 ...
- Log4J入门教程(一) 入门例程
Log4J的入门简介学习 简介: Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务器.NT的事件记录器.U ...
- iOS复杂动画之抽丝剥茧(Objective-C & Swift)
一.前言 随着开发者的增多和时间的累积,AppStore已经有非常多的应用了,每年都有很多新的APP产生.但是我们手机上留存的应用有限,所以如何吸引用户,成为产品设计的一项重要内容.其中炫酷的动画效果 ...
- mongo中查询Array类型的字段中元素个数
I have a MongoDB collection with documents in the following format: { "_id" : ObjectId(&qu ...
- VS 解决方案目录结构设置
涉及到的配置: 项目编译时使用的中间目录: 项目链接的输出目录: 项目编译结束后,拷贝生成的 dll 和 lib 到指定目录: 项目编译结束后,拷贝需要的 dll 到输出目录: 设置项目的工作目录: ...