k-means是人工智能领域最常用的快速基础算法之一,广泛用于聚类、数据预分析及与改进其他机器学习算法等。为了进一步提高k-means算法效率,很多优秀的k-means算法通过对每个样本维持一个上下界来减少样本距离计算次数,达到加速目的。比如最早的Elkan,以及在此基础上发展出来的harmly, ann, exp, yingyang等等。本文基于重庆邮电大学王国胤与夏书银共同提出的多粒度-粒球计算理论(Xia S , Liu Y , Ding X , Wang G et al. Granular Ball Computing Classifiers for Efficient, Scalable and Robust Learning[J]. Information Sciences, 2019, 483:136-152.),使用球体来划分度量空间簇,提出了一种简单、高效的Ball-k-means算法。由于使用超球体来量化空间簇,获得了更加精确的近邻关系,该近邻关系不需要额外参数,消除了现有大多数优秀加速算法中单个样本上下界,单个样本点的计算次数远小于现有的同类顶尖算法。(原文链接:https://ieeexplore.ieee.org/document/9139397;可下载链接:https://www.researchgate.net/publication/342914449_A_Fast_Adaptive_k-means_with_No_Bounds

一、核心基本概念

定义1 (球簇)

该概念借鉴于多粒度-粒球计算理论(Xia S , Liu Y , Ding X , Wang G et al. Granular Ball Computing Classifiers for Efficient, Scalable and Robust Learning[J]. Information Sciences, 2019, 483:136-152.),用超球体这种最简单的模型(不管数据多少维,只有半径和中心两个参数)来量化和表示簇,可以获得更精确的空间关系刻画。

定义2 (近邻球簇)

使用近邻球簇可大大缩减了一个球簇内的点在下一次的迭代中的距离计算范围:其距离计算范围从所有点限制到了它的近邻球内部。一个球簇的点在下一次迭代中只会在它的近邻簇中调整,不需要计算该簇中点到其他所有点的距离,从而降低了计算次数,该特性由定理1保证

近邻球的关系示意图如图1所示:C1和C2是C3的近邻球,C4不是C3的近邻球,所以C3的点可能被分配到C1和C2中,不可能被分配到C4中。

图1. 近邻球簇的关系示意图

证明过程省略,具体证明过程可参见原文

二、球簇内部量化,进一步加速

每个球簇内部被进一步划分为稳定域和活动域,具体定义如下定义3。稳定域中的点不需要在下一次迭代中进行调整,因此这些点在下一次迭代中的距离计算次数为零,该特性由定理2保证。

如图2所示,球C1有两个近邻簇C2和C3, 其稳定域是由C2确定的、由绿色虚线包围的区域。

图2. 近邻球簇的关系示意图

证明过程省略,具体证明过程可参见原文

三、球簇活动域划分为环,进一步加速

将活动域划分为环后(具体定义见定义4),每个环内的近邻球数进一步降低,从而进一步减少距离计算次数。如图2所示: 第一层环(绿色虚线和蓝色虚线之间)中的点只可能被分配到C2中,而不是所有的近邻簇(即C2和C3),该特性由定理3来保证。

证明过程省略,具体证明过程可参见原文

四、降低求近邻簇过程中的簇与簇中心的距离计算次数

为了降低近邻簇的距离计算次数,对于某个球簇C,当其他簇满足中心距离达到如定理4描述的条件后,其在下一次迭代中不可能成为球簇C的近邻簇。因此不同球簇中心之间的距离计算次数得到了缩减。该特性由定理4保证。如图3所示,Cj在下一次迭代中不可能成为Ci的近邻球,因此下一次迭代中不需要计算两者之间的距离。

证明过程省略,具体可参见原文

图 3. Cj在下一次迭代中不可能成为Ci的近邻球

五、稳定簇

这是最终的加速过程。对于某个球簇,如果一个簇中的点没有发生任何变化,我们称之是稳定的。如果一个簇的近邻簇在上一代都是稳定簇,那么该簇在当前迭代过程中不需要参与任何计算。该特性由定理5保证。随着迭代过程的推进,稳定簇会越来越多,基于稳定簇的算法加速作用也会越来越明显。

证明过程省略,具体可参见原文

六、时间复杂度分析

以下是与其他算法的时间复杂度分析对比,具体请参见原文。

结论

Ball k-means 突破了现有大多数优秀精确k-means算法基于单一样本上下界约束调整的思路,消除了单一样本需要维护的上下界,实现个一个更加精确、简单和自适应的计算过程。整体算法简单、高效。

本文的c语言源代码,以及python调用版本可从以下链接下载(包含单精度和双精度两种版本),执行速度远高于sklearn中的k-means算法。欢迎大家使用(请引用原文:S. Xia et al., "A Fast Adaptive k-means with No Bounds," in IEEE Transactions on Pattern Analysis and Machine Intelligence, doi: 10.1109/TPAMI.2020.3008694.)并提出宝贵意见:

https://github.com/syxiaa/ball-k-means;

http://www.cquptshuyinxia.com/ball-k-means.html.

欢迎大家多多交流,多提宝贵意见:xiasy@cqupt.edu.cn;380835019@qq.com.

2020年 TPAMI长文, Ball k-means:一种无界的快速自适应精确k-means算法相关推荐

  1. Ball k-means:一种无界的快速自适应精确k-means算法

    k-means是人工智能领域最常用的快速基础算法之一,广泛用于聚类.数据预分析及与改进其他机器学习算法等.为了进一步提高k-means算法效率,很多优秀的k-means算法通过对每个样本维持一个上下界 ...

  2. Python,OpenCV中的K近邻(knn K-Nearest Neighbor)及改进版的K近邻

    Python,OpenCV中的K近邻(knn K-Nearest Neighbor)及改进版的K近邻 1. 效果图 2. 源码 参考 这篇博客将介绍将K-最近邻 (KNN K-Nearest Neig ...

  3. CV之FR(H+k机器学习):基于每人几张人脸图片训练H+k模型实现(国内外明星)新人脸图像的姓名预测(准确度高达100%)

    CV之FR(H+k机器学习):基于每人几张人脸图片训练H+k模型实现(国内外明星)新人脸图像的姓名预测(准确度高达100%) 目录 输出结果 设计思路 输出结果 设计思路

  4. 鸿蒙系统电视k歌,华为电视怎么k歌?看完两分钟快速开启K歌模式

    原标题:华为电视怎么k歌?看完两分钟快速开启K歌模式 利用智能电视在家k歌,是一个很不错的娱乐活动.那么,家里的华为怎么电视k歌?需要准备什么设备?下面就为大家分享一份详细教程,看完 两分钟快速开启K ...

  5. C语言学习之编程实现:输入长方形的两个边长a, b和一个整数k。k=1时,输出长方形的周长 l; k=2时 ,输出长方形的面积s;当k=3时 , 输出长方形的周长1和面积s

    C语言学习 编程实现:输入长方形的两个边长a, b和一个整数k.k=1时,输出长方形的周长 l; k=2时 ,输出长方形的面积s;当k=3时 , 输出长方形的周长1和面积s #include < ...

  6. 【无码专区10】第K大查询(双向链表 /主席树+st表)

    已自我实现,但还是归入无码专区序列.哈哈哈哈哈 对于my idea部分,我的每一个想法都实现了,可供参考. problem 给定一个 1∼n1\sim n1∼n 的排列和 kkk,求所有 r−l+1≥ ...

  7. python动态规划算法最大k乘积_C语言使用DP动态规划思想解最大K乘积与乘积最大问题...

    最大K乘积问题设I是一个n位十进制整数.如果将I划分为k段,则可得到k个整数.这k个整数的乘积称为I的一个k乘积.试设计一个算法,对于给定的I和k,求出I的最大k乘积. 编程任务: 对于给定的I 和k ...

  8. 输入圆的的半径r 和一个整型数k,当k=1 时,计算圆的面积;当k=2 时,计算圆的周长;当k = 3 时,既要求求圆的周长也要求出圆的面积

     题目:输入圆的的半径r 和一个整型数k,当k=1 时,计算圆的面积:当k=2 时,计算圆的周 长:当k = 3 时,既要求求圆的周长也要求出圆的面积. 解析:输入半径r和整型数k,由题目分析的,由于 ...

  9. 174. 地下城游戏;剑指 Offer 40. 最小的k个数;378. 有序矩阵中第K小的元素;703. 数据流中的第K大元素

    一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主. 骑士的初始 ...

最新文章

  1. mysql数据库链接百分号_数据库百分号怎么用
  2. 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session
  3. matlab腔内光子寿命,mcFORnp matlab环境下,利用蒙特卡洛模拟光子包在生物组织内的光路传输 271万源代码下载- www.pudn.com...
  4. 想要一篇高分SCI,这些临床统计的诀窍你要知道
  5. mysql5.7半自动同步设置【转】
  6. Docker安装RabbitMQ(docker-compose.yml)
  7. apache安装_kali Linux下的Apache的配置和安装:
  8. Oracle经典面试题,你都掌握了吗?
  9. python爬虫接口_python爬虫之百度API调用方法
  10. JS屏蔽360浏览器代码
  11. 什么是Symbian
  12. HTML5+CSS3的速查手册
  13. vulhub漏洞复现30_Jetty
  14. 信安冬令营实训报告(信息收集,主机渗透,内网渗透)
  15. 如何对华为网络产品选型
  16. 爬取初试----猫眼电影,猫眼评分
  17. android安全开发_现代android安全开发
  18. 使用MSP430F5529的ADC测量,并用OLED显示传感器输出的模拟量
  19. linux mtd 用法,Linux mtd与ubi关系详解,ubi使用命令总结
  20. 那些解释起来很蛋疼的IT工种

热门文章

  1. 计算机网络工程硕士论文范文,网络工程硕士论文范文
  2. 【Bugfix系列】通过工具定位corrupted double-linked list: 0xxxxxxxx
  3. 花80万造企业新掌门人 主教吃喝玩乐
  4. MTK平台发展及各芯片功能介绍2
  5. 承德石油高等专科学校计算机怎么样,承德石油高等专科学校有计算机专业吗
  6. linux 邮件客户端 n1,Linux中如何安装使用Nylas N1邮件客户端
  7. μC/OS-II操作系统中的任务
  8. SQL Server中clustered与nonclustered的区别
  9. bug:poi、Cannot get a STRING value from a NUMERIC cell
  10. 将手绘地图或自制地图显示在网页上(利用百度API)