java实现近邻聚类算法,近邻传播聚类算法 - osc_t74tdxrl的个人空间 - OSCHINA - 中文开源技术交流社区...
近邻传播聚类算法
1.算法简介
AP(Affinity Propagation)通常被翻译为近邻传播算法或者仿射传播算法,是在2007年的Science杂志上提出的一种新的聚类算法。AP算法的基本思想是将全部数据点都当作潜在的聚类中心(称之为exemplar),然后数据点两两之间连线构成一个网络(相似度矩阵),再通过网络中各条边的消息(responsibility和availability)传递计算出各样本的聚类中心。
2.相关概念(假如有数据点i和数据点j)
1)相似度: 点j作为点i的聚类中心的能力,记为S(i,j)。一般使用负的欧式距离,所以S(i,j)越大,表示两个点距离越近,相似度也就越高。使用负的欧式距离,相似度是对称的,如果采用其他算法,相似度可能就不是对称的。
2)相似度矩阵:N个点之间两两计算相似度,这些相似度就组成了相似度矩阵。如图1所示的黄色区域,就是一个5*5的相似度矩阵(N=5)
3) preference:指点i作为聚类中心的参考度(不能为0),取值为S对角线的值(图1红色标注部分),此值越大,最为聚类中心的可能性就越大。但是对角线的值为0,所以需要重新设置对角线的值,既可以根据实际情况设置不同的值,也可以设置成同一值。一般设置为S相似度值的中值。(有的说设置成S的最小值产生的聚类最少,但是在下面的算法中设置成中值产生的聚类是最少的)
4)Responsibility(吸引度):指点k适合作为数据点i的聚类中心的程度,记为r(i,k)。如图2红色箭头所示,表示点i给点k发送信息,是一个点i选点k的过程。
5)Availability(归属度):指点i选择点k作为其聚类中心的适合程度,记为a(i,k)。如图3红色箭头所示,表示点k给点i发送信息,是一个点k选diani的过程。
6)exemplar:指的是聚类中心。
7)r (i, k)加a (i, k)越大,则k点作为聚类中心的可能性就越大,并且i点隶属于以k点为聚类中心的聚类的可能性也越大
3.数学公式
1)吸引度迭代公式:
(公式一)
说明1:Rt+1(i,k)表示新的R(i,k),Rt(i,k)表示旧的R(i,k),也许这样说更容易理解。其中λ是阻尼系数,取值[0.5,1),用于算法的收敛 说明2:网上还有另外一种数学公式:
(公式二)
sklearn官网的公式是:
(公式三)
我试了这两种公式之后,发现还是公式一的聚类效果最好。同样的数据都采取S的中值作为参考度,我自己写的算法聚类中心是5个,sklearn提供的算法聚类中心是十三个,但是如果把参考度设置为p=-50,则我自己写的算法聚类中心很多,sklearn提供的聚类算法产生标准的3个聚类中心(因为数据是围绕三个中心点产生的),目前还不清楚这个p=-50是怎么得到的。
2)归属度迭代公式
说明:At+1(i,k)表示新的A(i,k),At(i,k)表示旧的A(i,k)。其中λ是阻尼系数,取值[0.5,1),用于算法的收敛
4.详细的算法流程
1)设置实验数据。使用sklearn包中提供的函数,随机生成以[1, 1], [-1, -1], [1, -1]三个点为中心的150个数据。
2)计算相似度矩阵,并且设置参考度,这里使用相似度矩阵的中值
3)计算吸引度矩阵,即R值。
如果有细心的同学会发现,在上述求R和求A的公式中,求R需要A,求A需要R,所以R或者A不是一开始就可以求解出的,需要先初始化,然后再更新。(我开始就陷入了这个误区,总觉得公式有问题,囧)
4)计算归属度矩阵,即A值
5)迭代更新R值和A值。终止条件是聚类中心在一定程度上不再更新或者达到最大迭代次数
6)根据求出的聚类中心,对数据进行分类
这个步骤产生的是一个归类列表,列表中的每个数字对应着样本数据中对应位置的数据的分类
5. 参考文献
Frey B J, Dueck D. Clustering by passing messages between data points[J]. science, 2007, 315(5814): 972-976.
java实现近邻聚类算法,近邻传播聚类算法 - osc_t74tdxrl的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐
- java顺序表冒泡排序_冒泡排序就这么简单 - Java3y的个人空间 - OSCHINA - 中文开源技术交流社区...
冒泡排序就这么简单 在我大一的时候自学c语言和数据结构,我当时就接触到了冒泡排序(当时使用的是C语言编写的).现在大三了,想要在暑假找到一份实习的工作,又要回顾一下数据结构与算法的知识点了. 排序对我 ...
- java回调函数的生命_Java的回调函数 - choaklin 的个人空间 - OSCHINA - 中文开源技术交流社区...
暂且不提回调函数的各种定义,如我本人,虽然知道JavaScript的回调的使用,但是百科了回调的定义,还是觉得云里来雾里去.所以大可先从已熟悉的入手,旁推侧引它的原理,再引出Java版的实现. 因为博 ...
- 每天学习java一小时_java再学感受 - 编程一小时的个人空间 - OSCHINA - 中文开源技术交流社区...
首先的是,我买了一本新的有关于java的书,刚开始看,其实在此之前我已经学了一本java语法的书本,现在我买的这本书是我用来提升自己的java认知水平的,首先是对这本书的第一印象吧,里面的内容比较详细 ...
- java 全排列非递归算法_全排列的非递归算法 - osc_ivkc73ze的个人空间 - OSCHINA - 中文开源技术交流社区...
1.全排列的定义和公式: 从n个数中选取m(m<=n)个数按照一定的顺序进行排成一个列,叫作从n个元素中取m个元素的一个排列.由排列的定义,显然不同的顺序是一个不同的排列.从n个元素中取m个元素 ...
- java 负载均衡_java负载均衡 - 岁月静好I的个人空间 - OSCHINA - 中文开源技术交流社区...
作用 对系统的高可用,网络压力的缓解,处理能力扩容的重要手段之一. 服务器负载 我们通常所说的负载是指:服务器负载 软硬件负载 服务器负载又分为:软件负载--硬件负载 软件负载:通过在服务器上安装一些 ...
- java拆分任意五位数_五位数拆分出各位 - osc_foo7glsg的个人空间 - OSCHINA - 中文开源技术交流社区...
5.输入一个五位数,输出一个反转的五位数 输入->12345 输出->54321 //这是五位数字拆分方法. System.out.println("请输入五位数的数字:&quo ...
- java痴和堆_JAVA虚拟机理解 - 爱笑的痴迷者的个人空间 - OSCHINA - 中文开源技术交流社区...
JVM定义: JVM(Java Virtual Machine),是一种运行Java程序的软件实现,是虚拟的机器.Java程序与平台无关,它直接在虚拟机中运行. JVM运行过程: JVM将内存分划如下 ...
- java跨域cookie共享_cookie跨域共享 - qijian0503的个人空间 - OSCHINA - 中文开源技术交流社区...
问题描述 需要解决前端pc跟服务端(java),跨域后都能获取到同一个cookie. 使用二级域名共享cookie有一个限制条件,就是两个域名的二级域名必须相同 前端pc访问域名:a.b.com 后端 ...
- java代餐计算器_java入门7 - 千言sully的个人空间 - OSCHINA - 中文开源技术交流社区...
1...访问修饰符 返回值类型 方法名(参数列表){} 访问修饰符:方法允许访问的权限范围 返回值类型:void是不带return返回值的, 如果带返回值,此时要把返回值类型写出来 方法名( ...
最新文章
- 【机器学习】基于人工鱼群算法的多元非线性函数寻优
- python对输入的字符串进行解析_python数据类型_字符串常用操作(详解)
- 自定义服务器控件ImageButton
- 相同vlan跨交换机进行通信
- c语言程序输入n个数字排序,输入n个数字然后进行排序,用C语言编写。注意是n个数啊,不是确定的个数。...
- 深度学习:在图像上找到手势_使用深度学习的人类情绪和手势检测器:第2部分
- 利用Excel进行成对(配对)T检验
- sqlite3移植到arm linux
- pro git 阅读笔记1 基本操作
- 连接数据库超时设置autoReconnect=true
- innodb_file_per_table 理解
- java中调用xml的方法:DocumentBuilderFactory
- 在 Mac OS X 安装gcc编辑环境,make不能用时参考
- 用glew,glfw实现opengl绘制3D学习笔记1-实现一个窗口
- mysql及JAVA汉字转拼音
- 【图神经网络】蛋白质设计proteinsolver跑源码记录
- Mindjet MindManager2022思维导图解压安装程序教程
- 相机变焦与对焦方法及原理
- linux学习之用户管理篇
- android 卡联系人导入iphone,苹果手机怎么把通讯录导入新手机sim卡