斯坦福机器学习笔记七

K均值算法

之前说到的算法都是监督学习算法,在监督学习中,训练集都是带标签的,我们的目标是找到能够区分正负样本的决策边界或者根据带标签的数据拟合出假设函数。现在开始介绍非监督学习算法,在非监督学习中,数据集没有标签,我们需要做的是将一系列无标签的数据集数据输入到一个算法中,让算法去找这些数据的内在结构。

这里写图片描述

图上数据看起来可以分成两个分开的点集(称为簇),能够将上图自动的圈成点集的算法被称为聚类算法。
K-均值算法是最普及的聚类算法,它接受一个未标记的数据集,然后将数据聚类成不同的组。

1、K-均值的实现

K-均值是一个迭代算法,它需要做两件事:一是簇分类,二是移动聚类中心。

假设我们想要将数据聚类成 K 个组,首先随机选择 K 个点,这 K 个点称为聚类中心。在每次循环中,先进行簇分配,遍历所有的样本,然后依据每个点更接近哪个聚类中心来进行分配,将所有点分配到 K 个不同的聚类中心,数据也就分成了 K 类;然后是移动聚类中心。将属于某一聚类中心这一类的数据计算均值,将聚类中心移动到均值处。再重复循环上述步骤,一直迭代,直到数据的分类不会再变的时候,则 K-均值方法已经收敛了。

K-均值算法有两个输入变量:需要分的簇数 K;训练样本 x,因为是无监督学习,所以没有 y。这里不在数据集 x前添加 x0 。用 μ1,μ2,μk 来表示聚类中心,用 c(1),c(2),c(m) 来存储与每个数据最近的聚类中心的索引,比如 c(i) 指的就是这个数据属于第i簇。K-均值算法的伪代码如下:

这里写图片描述

首先随机初始化聚类中心 μi ,第一个for循环是赋值步骤,对于每一个样例 i,计算其应该属于的类;第二个for循环是聚类中心的移动,对每个类 k,重新计算该类的质心。上式中,大写的 K 表示算法的分类数,即簇数;小写的 k 表示聚类中心的序号。

2、优化目标

K-均值最小化问题是要最小化所有的数据点与其所关联的聚类中心之间的距离之和,因此,K-均值的代价函数为:

J(c(1),,c(m),μ1,,μK)=1mmi=1x(i)μc(i)2

优化目标为:

minc(1),,c(m),μ1,,μKJ(c(1),,c(m),μ1,,μK)

之前给出的 K-均值迭代算法,第一个循环是用于减小 c(i) 引起的代价,而第二个循环是用于减小  μ i 引起的代价。

3、初始化聚类中心

在运行 K-均值算法之前,首先要初始化所有的聚类中心。聚类中心的个数要小于所有训练集实例的数量;随机挑选 K 个训练 ,作为聚类中心。
K-均值算法有时会停留在一个局部最小值,这取决于初始化的情况,类似下图:

这里写图片描述

解决的办法是,多次随机初始化聚类中心, 一般取50到1000次,并多次运行 K-均值比较结果,选取代价函数最小的分类结果为最终的分类结果。伪代码如下:

这里写图片描述

事实证明: 如果聚类数 K 比较小(2-10) 的话 ,做多次的随机初始化,通常能获得一个较好的局部最优解 。但是如果K非常大(K比10大很多)的话,多次随机初始化就可能没有太大的影响,更有可能第一次随机初始化的结果是最好的。

4、聚类数目的选择

没有所谓最好的选择聚类数目的方法,一般会考虑聚类的动机,比如想做衬衫大小分类,那么K=3可能会比较好。经常谈到的还有肘部法则。
改变聚类数目K的值,画出随着K值的变化,代价函数J取不同值的曲线,其中可能会有一个明显的拐点,如下图左图所示,该拐点就是比较好的取值。即在该点之前,曲线下降较快,该点之后,曲线下降不明显。当然也会存在没有拐点的情况,如下图右图所示。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值