Machine Learning week 8 Clustering

Clustering

聚类算法可以做什么呢,下面是几个例子

K-Means Algorithm

K-means algorithm是一种迭代算法,也是一种最广泛使用的聚类方法。
如下图,图中绿色点表示我们的数据。我们希望把它们分成2个小组,那么下面就是K-Means进行聚类的过程。
K-Means算法包括2个主要的步骤。1 cluster assignment 2 move centroid points

首先随机初始化2个点作为cluster centroid

遍历所有的点,分别计算它们和给定的cluster centroid点的距离,并计算出最近的cluster centroid点,然后进行分类,如下图,
距离红色中心点近的点都标成红色。距离蓝色点近的点都标成蓝色


上面就是第一步的cluster assignment过程,那么下面就要开始进行第二步move cluster centroid points了。
根据上面的分类计算出每个分类自己的中心点作为新的cluster centroid点。如下图是计算得到的新的centroid点。


然后就是循环过程了
根据新的centroid进行新一轮的cluster assignment,如下


然后重新计算centroid

最终会得到如下


这种情况下,即使再次进行循环,结果是不会发生变化的,已经进入稳定的分类结果

那么我们看一下K-means方法正式的描述:
input: K代表分类个数,然后是training set,由于是unsupervised learning,这里的训练集是没有打label的。这里的训练集数据时N维数据,并没有使用我们之前经常使用的方法去设置常数项。

下面我们使用K代表分类个数,k代表1-K中间的index,c的上标i表示第i个training example,它表示第i个数据的分类结果,μ表示每次的中心点


下面我们熟悉一下这里的名称所代表的含义



下面是新的中心点的计算过程,move centroid部分

有的时候,可能会发现有的分类中没有得到任何点包含在其中,这种情况下有2中做法
1 丢弃掉这个分类,那么就得到了K-1个分类,这是比较常用的做法
2 重新初始化一个centroid 作为新的分类替换掉空的分类,重新得到K-1个分类,然后继续计算
即使是针对区分性不是很好的数据,如下,K-means也可以得到很好的分类结果。

Optimization Objective

K-means算法也是有它自己的一个cost function需要优化的,需要通过扎到合适的c(每个点的分类)和u(每个点对应的分类的中心点)来优化的就是所有点到所有的中心点的距离平方和

现在我们看一下K-means算法,可以发现cluster assignment部分在不改变中心点的情况下通过改变分类,来优化了总体的距离平方和。
而move centroid部分通过不改变分类的情况下,改变中心点来优化了总体距离平方和。

所以cost function应该是一直在逐步减小的

通过这种方法,我们可以验证我们的代码运行的正确与否。

Random Initialization

之前提到过一种初始化centroid的方法,就是随机初始化2个点。但其实下面要讲的方法更加常用,推荐使用下面的方法。
就是随机选择数据集中的K个点,作为centroid point

根据我们选择的初始点的不同,是可能叨叨不同的分类结果的,可能得到一个局部最优的结果


对于局部最优的问题,当分类个数不是很多的时候,可以进行多次K-means算法来找到其中最小的cost function,但是当K比较大的时候,可能第一次的结果就会是一个不错的分类,后面的多次重复计算可能只能提供一点点优化。下面对于K取值2-10的分类来说,执行50-1000次K-means算法来找到最优分类是比较合理的选择


Choosing the number of Clusters

选择cluster的个数,每个人都可能有自己的选择。
如下图,可以把它们分成4组,也可以分成2组,我们很难评价到底哪个更好。



而使用计算机自动选择K,也没有很好的方法。
下面介绍一种选择K的方法,但这并不是一种经常使用的方法。如果cost function随着K的变化呈现左下图的曲线的话,可以想象这条曲线是一个手臂。选择胳膊肘处的K值,会是比较好的选择。但是现实情况常常是右下图的现象,很难区分出到底哪个点是手肘点。


下面是一个关于局部最优的题目,所以如果想要尝试使用上面的方法的话,要首先确保得到的是最优解,然后再相互比较才有意义




其实更好的方式还是根据需求进行选择K的值是更好的方法。

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值