k–means算法

K-means算法,也称为K-平均或者K-均值,一般用在机器学习中,作为掌握聚类算法的第一个算法。

  • k-means历史

虽然其思想能够追溯到1957年Hugo Steinhaus ,“k-均值”术语于1967年才被James MacQueen 首次使用。标准算法则是在1957年被Stuart Lloyd作为一种脉冲码调制的技术所提出,但直到1982年才被贝尔实验室公开出版 。在1965年,E.W.Forgy发表了本质上相同的方法,所以这一算法有时被称为Lloyd-Forgy方法。更高效的版本则被Hartigan and Wong提出(1975/1979)。

  • k-means定义

给定数据集 D={x1,x2,…,xm},k–means算法将整个数据集划分为若干簇C={c1,c2,…ck} ,选定k值,即簇个数。

  1. 初始化:随机选择k个数据点,作为每个簇的中心。

  2. 重新分配:对于数据集中的每一个数据点,计算其到k个中心点的距离,并将其分配到距离最近的中心点所在簇

  3. 重新计算:所有数据点都被分配后, 更新每个簇的中心点,设置为该簇所有数据点的

  4. 重复以上过程直到收敛每个簇的中心点不再变化

  • 欧氏距离

在n维欧式空间中,每个点是一个n维实数向量。给定点x:(x1,x2…,xn)和点y(y1,y2,…yn)

image
  • 举例
image
 随机选4个初始点,聚成4类,每种颜色一类
image
    重新计算每个点到簇中心的距离
image
     将点从新分配到离它最近的簇中
image
       更新每个簇的中心点
image
  重复以上过程,直至簇中心不再变化为止
image
  • K-means算法思考

K值选择

k 值对最终结果的影响至关重要,而它却必须要预先给定。给定合适的 k 值,需要先验知识,凭空估计很困难,或者可能导致效果很差。

异常点的存在

K-means算法在迭代的过程中使用所有点的均值作为新的质点(中心点),如果簇中存在异常点,将导致均值偏差比较严重。比如一个簇中有2、4、6、8、100五个数据,那么新的质点为24,显然这个质点离绝大多数点都比较远;在当前情况下,使用中位数6可能比使用均值的想法更好,使用中位数的聚类方式叫做K-Mediods聚类(K中值聚类)。

初始值敏感

K-means算法是初值敏感的,选择不同的初始值可能导致不同的簇划分规则。为了避免这种敏感性导致的最终结果异常性,可以采用初始化多套初始节点构造不同的分类规则,然后选择最优的构造规则。针对这点后面因此衍生了:二分K-Means算法、K-Means++算法、K-Means||算法、Canopy算法等。

基因组分析 微信公众号推出 《50个经典算法讲解》系列文章, 第一篇文章 《K-means算法》,争取每周更新一篇高质量帖子。

关注微信公众号 ,**转发 ** 给同学和同事,您的认可,是对我最大的支持 ,任何问题,后台可以留言。

你可能感兴趣的:(k–means算法)