[关闭]
@Libaier 2016-08-04T03:48:57.000000Z 字数 3227 阅读 1896

K-Means

聚类


主要思想

有四个牧师去郊区布道,一开始牧师们随意选了几个布道点,并且把这几个布道点的情况公告给了郊区所有的居民,于是每个居民到离自己家最近的布道点去听课。听课之后,大家觉得距离太远了,于是每个牧师统计了一下自己的课上所有的居民的地址,搬到了所有地址的中心地带,并且在海报上更新了自己的布道点的位置。牧师每一次移动不可能离所有人都更近,有的人发现A牧师移动以后自己还不如去B牧师处听课更近,于是每个居民又去了离自己最近的布道点……就这样,牧师每个礼拜更新自己的位置,居民根据自己的情况选择布道点,最终稳定了下来。

产生背景

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

应用场景

损失函数

如果距离度量算做损失的话,欧式距离为平方损失。

主要推导

K-means是为了求解如下公式,其中

表示n个聚类后的类别。

在一般欧式空间中,即使是两个簇,这个问题是NP难问题,即使在二维欧式空间,对一般的簇个数k,该问题也是NP难的。K-means使用贪心算法,通过迭代的方式克服计算中的巨大开销。

Tips:如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题。NP问题不是非P类问题。NP问题是指可以在多项式的时间里验证一个解的问题。NP问题的另一个定义是,可以在多项式的时间里猜出一个解的问题。NPC问题的定义非常简单。同时满足下面两个条件的问题就是NPC问题。首先,它得是一个NP问题;然后,所有的NP问题都可以约化到它。NP-Hard问题是这样一种问题,它满足NPC问题定义的第二条但不一定要满足第一条(就是说,NP-Hard问题要比NPC问题的范围广)。

求解算法

  1. 选取初始聚类中心

  2. 通过计算距离进行聚类

  3. 重新计算聚类中心

  4. 重复2-3步直至聚类中心不发生改变(或变化小于一定阈值)或者达到迭代次数上限

伪代码

  1. 输入:数据集D(N个样本),聚类簇数K
  2. 过程:
  3. D中随机选择K个向量做聚类中心
  4. repeat
  5. 初始化聚类结果集为空集
  6. for j = 0...N do
  7. 计算样本与均值向量的距离,将其划归为对应的类别
  8. end for
  9. for
  10. 使用均值法重新计算聚类中心
  11. end for
  12. until 聚类中心均不发生改(或变化小于一定阈值)变或者达到指定迭代次数T
  13. 输出:聚类结果集

复杂度分析

时间复杂度:O(TNmK) T迭代次数,N样本数,m样本维数,K聚类中心数

大数据下改进

评价

This example is meant to illustrate situations where k-means will produce unintuitive and possibly unexpected clusters. In the first three plots, the input data does not conform to some implicit assumption that k-means makes and undesirable clusters are produced as a result. In the last plot, k-means returns intuitive clusters despite unevenly sized blobs.

kmeans1

Comparing different clustering algorithms on toy datasets

kmeans1

算法改进

此部分大多源自资料5,部分没看明白

相关算法

关键领悟

参考资料

  1. wiki

  2. K-Means 算法

  3. KMeans聚类算法思想与可视化

  4. K-means clustering is not a free lunch

  5. 基本Kmeans算法介绍及其实现(c++)

  6. 清雨的 Data Science 笔记

  7. Zhao W, Ma H, He Q. Parallel k-means clustering based on mapreduce[M] Cloud Computing. Springer Berlin Heidelberg, 2009: 674-679.

  8. 基于MapReduce实现并行化K-means算法

  9. K-means聚类算法原理和C++实现
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注