K近邻聚类算法

概述

随机选择K个聚类中心,在每一次迭代中,先为每个点确定其最近的聚类中心,这一步称为集群分配(cluster assignment),然后计算每个类中所有点的中心点,将该类的聚类中心移动到中心点,这一步称为中心移动(move centroid),得到这k个聚类中心的新位置,进行下一次迭代,直到每个聚类中心点正确分布在每个类的中心。

算法的输入有两个参数:聚类中心的数量K和一系列训练集 X = { x 1 , x 2 , … , x m } X=\{x^1,x^2,\dots,x^m\} X={x1,x2,,xm},聚类过程如图所示:

伪代码如下:

  • 随机初始化K个聚类中心 μ 1 , μ 2 , … , μ K \mu _1,\mu_2,\dots ,\mu_K μ1,μ2,,μK
  • 重复此过程直到 μ 1 , μ 2 , … , μ K \mu _1,\mu_2,\dots ,\mu_K μ1,μ2,,μK不再改变 或者 到达最大迭代次数:
    • for i=1:m //对训练集中的每个数据
      • c i c^i ci=K个聚类中心中离i最近的一个中心 μ \mu μ
    • for k=1:K
      • μ k \mu_k μk=所有划分到 μ k \mu_k μk的点的均值(对 μ k \mu_k μk进行更新)

K近邻聚类与K近邻分类

  • KNN聚类是非监督学习,KNN分类是监督学习
  • KNN聚类是迭代的过程,KNN分类不需要迭代

关于随机初始化

一个推荐的随机初始化的方法:

随机选择K个训练集中的点 x 1 , x 2 , … , x K x_1,x_2,\dots,x_K x1,x2,,xK,令他们为初始聚类中心 x 1 = μ 1 , x 2 = μ 2 , … , x K = μ K x_1=\mu_1,x_2=\mu_2,\dots,x_K=\mu_K x1=μ1,x2=μ2,,xK=μK.

随机初始化的点会很大程度上影响到最终聚类的结果,如果初始化的不好,最终可能会陷入局部最优结果(local optima),避免这种的方式是进行多次随机初始化和聚类(一般取50到1000次),分别计算distortion,取distortion最小的一次
d i s t o r t i o n = 1 m ∑ i = 1 m ∣ ∣ x i − c i ∣ ∣ 2 distortion=\frac{1}{m}\sum_{i=1}^m ||x_i - c_i||^2 distortion=m1i=1mxici2
对于K比较小(2到10),进行多次随机初始化可能会很有用,但是对于K很大(如100),也许一次K聚类就能达到较好的效果。

关于选择聚类个数K

  • 根据肘部法则(elbow method),将K/distortion函数画出来,图像会看上去像人的胳膊肘,选择肘部的地方所表示的K值会是很好的选择。

  • 根据业务需要,这是很多情况下的方法,在运行KNN聚类之前心里就有了想要分成多少类的需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值