机器学习(二十)

来源:互联网 发布:淘宝美工如何上新 编辑:程序博客网 时间:2024/05/16 01:51

K-Means Algorithm

K-means是一个非常经典的非监督学习聚类算法,因为数据集不带有标签,我们只去探究数据所表现出的某种结构。
K-means算法非常简单,用下面一张图就可以表示了。
这里写图片描述
具体步骤:
1. 人为选取K值(即要聚类的个数)。
2. 随机选取K个数据点作为K个初始中心(centroid),并标记为1到K。
3. 对每个数据点(m个)分别计算到K个centroid的距离,然后选取距离最近的centroid作为该点的从属对象,然后标记该点为对应centroid的标记(如点A从属于centroid1,那么该点就标记为1)。步骤3过后,所有的数据点都会从属于某个centroid。
4. 分别对每个centroid的所有下属数据点进行平均值计算,得出新的K个centroid。
5. 反复步骤3和4,直到收敛,centroid不再变化。

Optimization Objective

这里写图片描述
对于每个问题,我们都要考虑我们在优化的函数(即目标函数)是什么,当然聚类问题也不例外,对于K-means来说,明确目标函数有助于我们debug和之后更好得进行分簇。目标函数具体形式在上图,就不详细阐述了,很简单,分别对所有的数据点计算到其centroid距离的平方的和。

Random Initialization

如下图所示,K-means并不是一个凸优化问题,它可能存在很多局部最优解,这跟我们初始选取的centroid有关。那我们应该如何解决呢?
这里写图片描述
解决方法就是对于同一个问题,进行多次(50-1000次)K-means计算,由于每次随机初始化的centroid不一样,以至最后的结果都会有所不同,最后我们根据对应目标函数的大小选取结果最小的作为我们的最优解。一般来说,这个结果可能是全局最优,就算不是全局最优也一定非常接近全局最优,所以可以当做我们最后的结果。需要注意的是,如果K值过大,那么一般我们第一次K-means操作就会得到最优解或者接近最优解的解,这样多次K-means就没有太大的意义,如果K值小(2-10),那么多次K-means就会有明显的效果。

Choosing the Number of Clusters

最后我们讲一下如果进行K值选取。
Elbow Method
这里写图片描述
对于K值,我们做出KJ(θ) 图,如果像上图左一样,出现类似于Elbow的拐点,那么我们就选定该点的K为我们所要选取的K,如果如上图右,那么这个时候Elbow method将不再适用,这种时候将没有合适的方法指导我们进行自动选取K值,我们必须结合我们的需求人工给定K值。
最后Mark一下,通过canopy算法可以自动选取较为恰当的簇数,具体不在这里详述。

原创粉丝点击