运用三角不等式加速Kmeans聚类算法


引言:最近在刷《数据挖掘导论》,第九章, 9.5.1小节有提到,可以用三角不等式,减少不必要的距离计算,从而达到加速聚类算法的目的。这在超大数据量的情况下,尤为重要。但是书中并没有给出解释和证明。本文以k-means聚类算法为代表,讲解下怎么利用三角不等式减少计算过程。


1. 三角不等式

任一三角形,两边之和大于第三边,两边之差小于第三边。可以从欧式距离扩展到多维欧几里得空间:设任意三个向量a,b,c。d(x,y)代表x,y在空间上的距离,则三角不等式满足:
\[d(a,b)+d(b,c)\ge d(a,c) , d(a,b) - d(b,c) \le d(a,c)\]

2.K-means算法

K-mean算法

  1. 随机选择K个数据点作为初始质心
  2. repeat
  3.   计算每一个数据点计算到现有K个质心的距离,将它归属到距离最近质心的所在簇中
  4.   重新计算质心。
  5. until 所有质心不再变动

3. 定义

\[假设存在数据点集 X=\{x_1, x_2,..,x_n\} , 质心的集合C=\{ C_1,C_2,...,C_m\}, 对应的簇集合为S=\{ S_1,S_2,...,S_m\}。\]

4.三角不等式推出的引理

引理1:
\[设 C_i ,C_j(i\neq j )\in C, x \in X。如果2 d(x,C_i) \le d(C_i,C_j) ,那么d(C_i,x) \le d(C_j,x) 。 \]

=

引理2:
\[ 设C_i \in C, \exists C_j \in C,使得d(C_i,C_j) = min \ d(C_i,C)。对于数据点x \in X,若有2 d(x,C_i) \le d(C_i,C_j),\ 那么min \ d(x,C) = d(C_i,x)。(记d(x,C)是x到所有质心的距离)\]

证明引理1:

因为有 \[2 d(C_i,x) \le d(C_i,C_j) \ (1)\]
且由三角不等式:\[ d(C_i,C_j) \le d(x,C_i) + d(x,C_j) \ (2)\]
所以 \[2 d(C_i,x) \le d(x,C_i) + d(x,C_j),即d(C_i,x) \le d(C_j,x)\]

证明引理2:

运用反证法:
假设 \[ \exists C_k \in C,使得d(C_k,x) < d(C_i,x), \]
由题干有:
\[ d(C_k,C_i) \ge d(C_i,C_j) (1) , d(x,C_i) \le d(C_i,C_j) (2)\]
又因为 \[ d(C_k,x) +d (C_i,x) \ge d(C_k,C_i) (3)\]
所以结合(1)(3):
\[ d(C_k,x) +d (C_i,x) \ge d(C_i,C_j) (4)\]
又由假设:
\[ 2d(C_i,x) > d(C_i,C_j) (5)\]
这与条件中\[2 d(x,C_i) \le d(C_i,C_j)\]相矛盾,所以可知假设不成立。
即 \[min \ d(x,C) = d(C_i,x)\]

5.运用引理1,引理2减少不必要的距离计算

首先\[对于每一个C_i,用一个hash表存放与它最近的距离 d(C_i,C_j)。\]

1.如果数据点x已经被分配:

\[ 则x与它目前所在簇的质心的距离为d(C_i,x),与d(C_i,C_j)比较。\]
\[如果 2 d(C_i,x) \le d(C_i,C_j),则说明不需要更换x的归属。\\(注意反之: 2 d(C_i,x) \gt d(C_i,C_j)),并不能说明x应该数据 C_j所在的簇,所以还需要继续计算x与每个质心的距离。)\]

2.如果数据点x还未被分配

\[ 则需要遍历计算, \forall C_i \in C, 比较 2 d(C_i ,x) \le d(C_i,C_j)是否成立,若成立,说明x应当归属 C_i ,无需再计算其他距离。\]

6. 改进的K-means算法

前文介绍了如何运用引理1,2 将它运用在K-means算法上,改写的k-means算法如下:

K-mean算法

  1. 随机选择K个数据点作为初始质心
  2. repeat
  3.  计算k个质心间的距离,并且用hash表保存每个质心的到其他质心的最短距离。(用d(Ci,Cj)表示质心Ci和它最近质心是Cj的距离)。
    4.  repeat
        对于每个数据点x
        if(数据点x已分配在质心Ci所在簇)
         if 2d(Ci,x) <=d(Ci,Cj)
          x分配无需变动;
         else
          继续计算x到现有K个质心的距离,将它归属到距离最近质心的所在簇中
          end if
        else(数据点x未分配到任何簇)
         for i from 0 to K do
          if 2d(Ci,x) <=d(Ci,Cj)
           将x归属到Ci所在簇中
           退出for循环
          end if
          end for
        end if
  4.   重新计算质心。
  5. until 所有质心不再变动

引申

本文中只举例了使用欧几里得距离的K-means算法。其实本文中的d(x,y)不仅可以指代distance,更广义的可以指代dissimilarity。任何通过度量相异性的聚类算法都可以使用三角不等式,避免多余的计算,例如计算最近邻的DBSCAN。感兴趣的读者可以自己推导改进。

转载于:https://www.cnblogs.com/bradleon/p/6842549.html

运用三角不等式加速Kmeans聚类算法相关推荐

  1. 基于GPU的K-Means聚类算法

    聚类是信息检索.数据挖掘中的一类重要技术,是分析数据并从中发现有用信息的一种有效手段.它将数据对象分组成为多个类或簇,使得在同一个簇中的对象之间具有较高的相似度,而不同簇中的对象差别很大.作为统计学的 ...

  2. K-Means聚类算法的原理及实现

    K-Means聚类算法的原理及实现[转] [转]http://www.aboutyun.com/thread-18178-1-1.html 问题导读: 1.如何理解K-Means算法? 2.如何寻找K ...

  3. 机器学习:k-means聚类算法+算法优化

    第六章:机器学习course02:k-means聚类算法 标签(空格分隔): 10-机器学习 $---by:Rianusr$ ##1 课题导入 ###1.1 k-means常见的应用场景 ![imag ...

  4. 模式识别:C-means(K-means)聚类算法与分级聚类(层次聚类)算法

    C均值聚类算法与分级聚类算法的聚类分析 一.实验目的 理解聚类的整体思想,了解聚类的一般方法: 掌握 C-means与分级聚类算法算法思想及原理,并能够熟练运用这些算法进行聚类分析: 能够分析二者的优 ...

  5. java iris_利用K-Means聚类算法实现对iris.data.ulab

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 利用K-Means聚类算法实现对iris.data.ulabel数据的聚类,这是在网上找到如果要换成我的iris.date iris.date.ulabl ...

  6. k-means聚类算法从入门到精通

    k-means算法是非监督聚类最常用的一种方法,因其算法简单和很好的适用于大样本数据,广泛应用于不同领域,本文详细总结了k-means聚类算法原理 . 目录 1. k-means聚类算法原理 2. k ...

  7. 基于K-Means聚类算法的主颜色提取

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 01.简介 本期我们将一起实现基于K-Means聚类算法的主色提取 ...

  8. K-means聚类算法和模糊C-means聚类算法

    K-means聚类算法和模糊C-means聚类算法 1.K-means聚类算法 K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数, ...

  9. 基于Kmeans聚类算法的图像分割(色彩分割)实战

    基于Kmeans聚类算法的图像分割(色彩分割)实战 图像分割是将一幅图像分割成多个像素区域的任务.属于同一对象类型的所有像素都被分配到同一类别下.图像分类是给一副完整的图像一个类别,目标检测是检测到图 ...

  10. 基于经典的机器学习k-means聚类算法实现对三通道图片的压缩操作

    https://www.toutiao.com/a6573221465104056846/ 压缩图片的原理 k-means算法实现图像的压缩是k-means聚类算法的一个经典的应用,它把一个彩色图压缩 ...

最新文章

  1. R语言笔记4:向量、矩阵的数学运算
  2. 使用nodejs和Java访问远程服务器的服务
  3. c语言rtu crc16,Modbus-RTU-crc16校验方法C语言实现
  4. UVA - 10934 Dropping water balloons(装满水的气球)(dp)
  5. test6 3-21 2021省选模拟赛six
  6. 手握顶会顶刊论文,自信满满面试算法岗竟被刷?
  7. 信息学奥赛一本通 1035:等差数列末项计算 | OpenJudge NOI 1.3 18
  8. python logging打印终端_python中那些小众但有用的自带标准库
  9. php diff 文本比较,php文本操作方法集合比较
  10. oracle中job的retry次数,Oracle 19c注意事项: DBMS_JOB 行为变化
  11. SQLServer导入Excel格式数据
  12. 爬取QQ空间说说及简易数据分析
  13. 红米note10 pro刷机
  14. Elasticsearch顶尖高手系列:高手进阶篇(二)
  15. 使用LSTM模型进行产品销售额的预测产品订单效益最大化
  16. Python搭建tensorflow三层神经网络
  17. x射线计算机断层摄影设备参数,GB 17589—2011 X射线计算机断层摄影装置质量保证检测规范.pdf...
  18. Ubuntu22.04 VMWare Kernel Module Updater 失败
  19. OSChina 周五乱弹 —— 破手机比 2080ti 核动力煤气灶还贵
  20. STEP7编程调试(METH-MPI/DP-S2)

热门文章

  1. java把一个对象赋值给另一个对象
  2. 正则表达式匹配任意文本中的网络图片链接
  3. 运维:你们 JAVA 服务怎么又又又又出问题了,内存降不下来。
  4. Python计算圆周长和面积
  5. Autosar DCM 诊断(Diagnostic Communication Manager)
  6. Android实现选择相册图片---类似微信的选择图片页面
  7. FSA-Net环境配置
  8. Ceph 分布式存储架构解析与工作原理
  9. 50G PON将成为未来发展部署的重点
  10. H77、Z75、Z77主板有什么区别?