K-Means

K-means,K-means++和KNN的比较

2017-12-21  本文已影响0人  四喜汤圆

1. K-means

作用

把n个对象根据他们的属性分为K个聚类,使得

算法过程

一开始是原始数据,杂乱无章,看起来都一样,没有label。

  1. 人为指定聚类个数,令K=2;
  2. 人为指定初始聚类中心(需要一定的先验知识):随机在坐标上选K(此处K=2)个点,作为聚类中心;
  3. 把每个数据样本划分到最近的中心点那一簇;
  4. 划分完后更新每个簇的中心(即把该簇的所有数据点的坐标加起来取平均值),得到新的簇中心后,再次进行操作3,就这样不断“划分——更新——划分——更新”,知道每个簇的中心不再移动为止。

注意

求簇中心的算法:
1. 使用每个点的坐标平均值
2. 
3. 
4. 

算法特点

  1. 聚类中心的个数K要事先给定,但在实际中这个K是非常难以估计的,很多时候事先并不知道该分几个类才合适。
  2. 需要人为地指定初始聚类中心,不同的初始聚类中心可能导致完全不同的聚类结果。(这个缺陷可以使用K-means++改进)。

2. K-means++

算法过程

  1. 从输入的数据点集合中随机选择一个点作为第一个聚类中心
  2. 对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x)
  3. 选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大
  4. 重复2和3直到K个聚类中心被选出来
  5. 利用这K个初始的聚类中心来运行标准的K-means算法。

注意

如何使D(x)较大的点,被选取作为聚类中心的概率较大
A:
1. 先从数据库中随机挑个随机点当“种子点”
2. 对每个未被选中的点:计算其和最近的“种子点”的距离D(x)保存在一个数组里,然后把这些距离加起来得到Sum(D(x))
3. 再取一个随机值,用权重的方式来取下一个“种子点”:
  1)先取一个能落在Sum(D(x))中的随机值Random
  2)对于未被选中的数据点,如果Random-=D(x)后,Random<=0,则将该数据点选做种子点
4. 重复2和3,直到K个聚类中心被选出来
5. 利用这K个聚类中心运行标准的K-means算法

算法特点

  1. 聚类中心的个数K要事先给定,但在实际中这个K是非常难以估计的,很多时候事先并不知道该分几个类才合适。
  2. 不需人为地指定初始聚类中心(是对K-means的改进)。

3. KNN

4. KNN和K-means比较

KNN K-means
分类算法 聚类算法
监督学习 无监督学习
喂给它的数据集是带label的数据 喂给它的数据集是无label的
没有明显的前期训练过程,属于memory-based learning 有明显的前期训练过程
K的含义:…… K是人工固定好的数字,假设数据集可以分为K个簇,由于是依靠人工定好,需要一点先验知识

参考文献

Kmeans(K均值)与Kmeans++和KNN(K近邻)算法比较

上一篇下一篇

猜你喜欢

热点阅读