k均值聚类算法(The k-means clustering algorithm)

本文介绍了K-means聚类算法的基本概念与实现步骤。包括质心初始化、样本点分配及质心更新等核心环节,并解释了算法如何通过迭代逐步减少失真函数达到收敛状态。此外还探讨了算法可能存在的局部最优问题及其解决方法。

在聚类问题中,我们试图将给定的样本集{x(1),,x(m)}分割成几个各自汇聚的聚类。这类问题中输入特征同之前一样是一个n维向量x(i)Rn,但输出标签y(i)是不存在的,因此这是一个非监督式学习问题。

k-means 聚类算法的执行步骤如下:

  1. 随机初始化k个聚类质心的坐标值μ1,μ2,,μkRn
  2. 循环直至收敛:{

    循环每个i,有:

    c(i):=arg minjx(i)μj2.

    循环每个j,有:
    μj:=mi=11{c(i)=j}x(i)mi=11{c(i)=j}.

    }

上面的算法中,k代表我们猜测的聚类数量,聚类质心μj代表我们当前假设的聚类质心坐标。初始化质心坐标时,我们可随机选取k个样本点,让k个质心的坐标等于这k个样本点(当然还有其他初始化质心的方法)。

算法的内循环重复执行两个步骤:(1) 将样本点x(i)分配给距离它欧式距离最近的质心;(2) 将每个聚类质心坐标向其所辖样本点的均值点移动。

下图是一个k-means 算法运行的图示。
illustration of running k-means

上图:点表示训练样本,叉叉表示聚类质心。(a) 原始数据集。 (b)随机初始化聚类质心(在此例中,没有让初始质心等于某一样本值)(c-f) k-means算法迭代的图解。

k均值算法可以保证一定会收敛吗?答案是yes。为了便于理解,我们定义失真函数(distortion function)

J(c,μ)=i=1mx(i)μc(i)2

失真函数描述了每个样本点x(i)到其所属质心μc(i)距离的平方和。k-means算法实际就是最小化失真函数J的坐标下降法。
究其本质,算法的内层循环,先固定质心坐标μ,求J关于质心分配c的最小化;然后固定质心分配c,求J关于质心坐标μ的最小化。算法运行中J一定的单调下降的,它的值也必将收敛(单调有界必收敛)。

失真函数J是一个非凸函数,所以我们不能保证J会收敛到全局最优解。换而言之,尽管多数情况下k-means算法都表现很好,但它有可能会陷入局部最优。为了避免这个问题,普遍的做法是多次运行这个算法,选取J(c,μ)值最小的那一组聚类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值