一、无监督学习
无监督学习与监督式学习相反,数据并不带有任何标签。算法要找到隐含在数据中的结构。比如将数据分为簇状的,就被称为聚类算法(clustering),这是一个典型的无监督学习算法。
聚类算法可以用于:
- 市场划分
- 社会关系网络分析
- 计算机集群聚类
- 天文数据聚类
二、K-Means算法
在聚类问题中,我们会给定一组未加标签的数据集,同时希望有一个算法能够自动的将这些数据分成有密切关系的子集或者是簇,K-means算法是现在最热门的聚类算法。
1、算法步骤:
- 随机设置两个初始点,称作聚类中心(cluster centroids)。
- 簇分配:遍历每个样本,根据距离将每个数据点分配给两个聚类中心之一。簇分配:遍历每个样本,根据距离将每个数据点分配给两个聚类中心之一。
- 移动聚类中心:将该聚类中心移动到同簇点的均值处。移动聚类中心:将该聚类中心移动到同簇点的均值处。
- 迭代:重复2和3直到实现聚类。迭代:重复2和3直到实现聚类。
算法的输入:
- 参数K(聚类的簇的数量)
- 无标签的数据集(x1,x2,x3…xm)
2、优化目标
首先设定几个参数:
所以K均值算法的优化目标为:
也就是说,对于每一个样本,我们要找到其所属的数据簇c,以及聚类中心μ的坐标,以此实现最小化所有训练样本到对应聚类中心的平均距离之和.
PS:此代价函数有时也叫畸变函数(distortion cost function)
3、随机初始化
虽然有几种方法去随机选出聚类中心,但是有一种方法比其他方法更值得推荐:
- 设置K<m,即簇的数量要比训练样本数量小。
- 随机挑选K个训练样本。
- 让μ1,…,μK这些聚类中心等于这K个训练样本。
有时候会出现上图右下这种局部最优解的情况,此时我们需要尝试多次随机初始化。然后在多个结果中选择J最小的那组分类。(K=2~10)
4、选择簇类数量
这个问题目前没有能自动解决的方法,只能手动选择。
- 肘部法则:
画出代价函数J随着数据簇数量K而变化的图像。代价函数会随着数据簇数量上升而减少,最后会趋于平稳。如果在某一个点开始明显地趋于平稳,那么我们选择代价函数刚开始变平稳的那个点K;但如果代价函数是平滑地趋于平稳的话,那这个方法就失效了。
- 根据目的选取
选取能更好服务于你后续目的的K值。