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. 001_Layout布局
  2. python的for语句打印金字塔图形_python实现输入任意一个大写字母生成金字塔的示例...
  3. 网关限流(令牌桶算法)
  4. 春运火车票开抢:打着“加速包”名号就算“合法黄牛”了吗?
  5. java中的object... args参数
  6. python3.8安装pygame_Python3.8安装Pygame教程
  7. DAC0832的多功能信号/波形发生器Proteus仿真设计,4种波形(正弦、三角、方波、锯齿),附仿真+C程序+论文等
  8. dotnet OpenXML PPT 动画框架入门
  9. Metro风格用户界面设计原则
  10. 云杰恒指:7.19恒指期货早盘资讯
  11. 解决web系统session劫持
  12. 计算机科学引论connectivity,计算机科学引论课后题原文
  13. 常见PCIE X1/X4/X8/X16插槽作用与区别
  14. 兼容微信6.74 ios12版本
  15. 专访凌云光技术3D视觉业务部经理李淼:做好技术和产品,为VR行业服务
  16. 罗马数字 古罗马数字转换为阿拉伯数字
  17. mysql靶场_BWVS靶场搭建
  18. matlab中文乱码问题
  19. 笔记本出厂预装Win8改装Win7的操作步骤及常见问题___联想e430c之类可供参考
  20. 中国人保为哈尔滨宝月雅生物科技有限公司承保产品责任险,为消费者保驾护航

热门文章

  1. 转:李开复微博中的一句话
  2. Ubuntu安装32位程序兼容包
  3. 备份MBR分区表,破坏后恢复(一)
  4. 计算机无法自动更新,电脑时间不能自动更新了怎么办?每次开机都要重新设置时间...
  5. 快速解决:Xshell拖不进去文件夹或者软件包的问题
  6. 群晖Video Station刮削器使用指南
  7. 文献解读:有监督的机器学习在心理学上的应用
  8. Mac下QQ表情管理
  9. 银行数字化转型导师坚鹏:银行行长如何进行数字化转型
  10. bilibili助手C2C服务器,Bilibili (B站)200万用户数据爬取与分析(附源码)