聚类FCM算法
来源:互联网 发布:视频相片制作软件 编辑:程序博客网 时间:2024/06/05 16:55
聚类FCM算法
个人博客,想要搭建个人博客的可以进来看看: http://www.ioqian.top/
在科研生活中,学习算法的时间不是很多,毕竟不是主要搞算法的,但是作为读研狗毕竟还是要毕业写论文的,算法还是要慢慢积累。
学习算法的目的很清晰,主要分为三点:一是扩展知识面,在这个AI如此火爆的年代,搞技术的出去别人聊AI要能听得懂,明白一些算法的思路才可以和别人正常交流;二是活跃思维,学习算法的创新点,锻炼大脑;三是学习解决问题的方法,码农工作中有的问题也需要高逼格的算法。
在科研过程中,每个人自己主攻方向,但是其他的方向都是有必要了解的,当然没必要花费太多的时间,拿算法来看,专门搞算法的算法大牛可能优化一种算法需要几个月去不断尝试,但是对于我来说,花半天时间看看博客,论文综述了解思路就可以了,知道这个算法干嘛的,抽象为什么数学问题,怎么解决完全够了。最后说一句,学过的东西都是有用的,行业都有共性,思路很重要。
参考博客:
http://blog.csdn.net/on2way/article/details/47087201 公式推导
http://www.cnblogs.com/ybjourney/p/4735335.html matlab版本实现
http://blog.csdn.net/cuifengqinghan/article/details/52725242 java版本有可视化界面
下面介绍我们的FCM算法,大致分为下面3个部分,有了下面的三个问题思路会很清晰
- FCM算法是什么,用来做什么?
- FCM的数学模型,如何求解数学模型?
- FCM的编码实现?
1. FCM简介
FCM算法,模糊C均值(Fuzzy C-means)算法,是基于目标函数的模糊聚类算法,主要用于数据的聚类分析。
模糊就是这个算法的重点和特点,模糊就是不确定的。拿人来举例子,人的年龄,一个人20岁就是20岁,18岁就是18岁所以人的年龄是确定的;人的外貌是不确定的,一个人漂亮不漂亮没办法直接给出一个确定的答复,只能说0.8分漂亮,0.2分不漂亮,这就是模糊。模糊有一个重要的感念隶属度,一般用u表示,表示一个样本属于这种结果的程度,漂亮不漂亮的问题就可以这样描述了
看了上图,只需要明白怎么表示隶属度就可以了,其中i代表了样本,a,b代表2中分类,一个样本属于不同分类点的求和等于1(0.8+0.2=1),这个很好想的。最后不要问为什么用Uai表示而不是Uia
Fcm算法的优点是什么?
传统的聚类分析是把每个元素严格的划分到一个类中,属于硬划分。模糊聚类分析将聚类生成的每个簇均看做模糊集合,通过隶属度来确定聚类关系,是一种柔性划分,得到元素属于各个簇的不确定性程度,使得聚类结果更加准确灵活,因此,模糊聚类分析逐渐成为聚类分析的主流。
2.FCM的属性模型
具体的推导公式看<<参考博客1>>
现在提出一个具体的问题,我们有数据集X,有n个数据,要把这些数据化成c类,每个类都有一个对应的中心C,每个样本j属于某一类i的隶属度为uij,所以我们可以得到一个目标函数J(1)和约束条件(2),我们要做的就是求取目标函数的极值?
上述公式中各个符合的意义
- J 代表了目标函数
- c 最后聚合的分类数目
- n 数据集中的数据个数
- uij 样本j属于类i的隶属度
- xj 数据集j的位置
- Ci 类i的中心位置
- m 结合代码发现取(2-6)都可以,是样本的轻缓程度
我们可以发现公式(1)就是由样本的隶属度与样本到类中心的欧氏距离相城组成,公式(2)就是说一个样本属于所有类的隶属度之和为1,公式(1)的物理意义就是当分类
如何解决这个非线性规划问题?
采用拉格朗日乘数法把约束条件拿到目标函数中去,再把得到的公式分别对Uij,Ci求导数,利用约束条件消减就可以得到下列的结论
上面两个公式是算法的关键
- Uij 物理意义是Uij越大,表示点j到i之外的类中心的距离乘积越大,就是远离其他类中心而靠近i类中心,也和隶属度的意义一致
- Ci 本质上是对样本点加权平均,当i类中心确定后,首先将所有点到该类的隶属度u求和,隶属度除以这个和就是所占的比重乘以xj就是这个点对于这个类i的贡献值
3.FCM的编码
上面的最后两个公式Uij和ci公式中互相包含,所以我们可以随便给一个赋值,然后开始迭代,用U算C,再用C算U…,结束条件可以是迭代多少次或者两次迭代后J值变化小于一个误差
FCM算法的一般步骤为:
**1.确定分类数c,指数m的值,迭代次数(防止达不到所需精度时停止迭代)
2.随机产生Uij,归一化(因为约束条件(2))
—开始循环迭代指定次数
3.根据U计算聚类中心C的位置
4.再根据C去计算U
5.计算目标函数J的大小和上一次迭代J的大小进行,小于要求精度就退出迭代,否则退出迭代
—迭代次数达到要求或者两次J之差小于精度要求
6,计算每个点到所有类Uij的最大值来决定这个点属于哪个类,标识**
具体的代码实现由Matlab的版本<<参考博客2>>和Java可视化版本<<参考博客3>>
- 聚类FCM算法
- FCM算法
- FCM 算法
- 经典的FCM算法
- FCM聚类算法
- FCM压缩算法
- FCM聚类算法
- FCM算法研究(一)
- Fcm算法初步学习探索
- fcm算法的MATLAB实现
- Fuzzy c-means (FCM)聚类算法
- FCM算法中评价指数matlab程序
- 详解FCM算法原理及应用
- 机器学习笔记-FCM算法python实现
- MATLAB实现FCM算法,简单代码实现
- FCM 模糊C均值聚类算法
- FCM算法原理及matlab实现
- Fuzzy c-means (FCM)聚类算法
- leetcode-month1-week3
- java操作FTP工具类
- idea window快捷键
- # 两和
- 干货分享:RS485通信和Modbus通信协议汇总
- 聚类FCM算法
- docker 安装mongodb
- 方向梯度直方图(HOG,Histogram of Gradient)学习笔记二 HOG正篇
- codevs1069 luogu1525 关押罪犯
- 对待棘手bug,新手与大牛的差距在哪里?
- (快排实例)查询一个数组中第n大的元素
- 小程序文档整理之 -- 快速上手
- Elasticsearch 1.4安装marvel
- JS 和 Java 中URL特殊字符编码方式