1. 无监督学习
在机器学习中,无监督学习可以被简单理解为不为训练集提供对应的类别标识。
无监督学习(Unsupervised Learning)下的训练集:(x(1)),(x(2)),(x(3))
2. 聚类
在监督学习中,把对样本进行分类的过程称之为分类(Classification),而在无监督学习中,将物体被划分到不同集合的过程称之为聚类(Clustering)。
在聚类中,把物体所在的集合称之为簇(cluster)。
3. K-Means 算法及实现
K: 描述了簇的数量,也就是应当聚合成的几何数。
Means:均值求解,是该算法的核心。
实现步骤:
1)根据设定的聚类数 K ,随机地选择 K 个聚类中心(Cluster Centroid)
2)评估各个样本到聚类中心的距离,如果样本距离第 i 个聚类中心更近,则认为其属于第 i 簇
3)计算每个簇中样本的平均(Mean)位置,将聚类中心移动至该位置
重复以上步骤直至各个聚类中心的位置不再发生改变。
4. 优化目标
和其他机器学习算法一样,K-Means 也要评估并且最小化聚类代价
代价函数J,也被称为失真代价函数:J(c(1),c(2),...,c(m);μ1,μ2,...,μk)=1m∑i=1m∣∣x(i)−μc(i)∣∣2J(c_{(1)},c_{(2)},...,c_{(m)};μ_1,μ_2,...,μ_k)=\frac{1}{m}\sum_{i=1}^m||x^{(i)}−μ_c^{(i)}||^2J(c(1),c(2),...,c(m);μ1,μ2,...,μk)=m1i=1∑m∣∣x(i)−μc(i)∣∣2K-Means 最小化代价函数的过程:
1)样本分配时:固定住了 (μ1,μ2,...,μk)(μ_1,μ_2,...,μ_k)(μ1,μ2,...,μk) ,而关于 (c(1),c(2),...,c(m))(c_{(1)},c_{(2)},...,c_{(m)})(c(1),c(2),...,c(m)) 最小化了JJJ ;
2)中心移动时:再关于 (μ1,μ2,…,μk) 最小化了JJJ 。
5. 随机初始化
通常,会随机选取 K 个样本作为 K 个聚类中心( K<m )。但是,不同的初始化有可能引起不同的聚类结果,能达到全局最优(global optimal)固然是好的,但是,往往得到的是局部最优(local optimal)。
为了避免局部最优,只能尝试不同的初始化。
所以k-mean该方法计算量较大,所以只适用于 K 值较小的场景。
6. 选择聚类数
肘部法则(Elbow Method)的方法来选定适当的K值,但是并不是所有代价函数曲线都存在明显的“肘关节”。
通常的方法是:观察训练集,根据实际目的选择合适的k值。
7. 知识补充
1)二分 K-Means 算法
常规的 K-Means 算法的误差通常只能收敛到局部最小,在此,引入一种称为二分 K-Means(bisecting kmeans)的算法,相较于常规的 K-Means,二分 K-Means 不急于一来就随机 K 个聚类中心,而是首先把所有点归为一个簇,然后将该簇一分为二。计算各个所得簇的失真函数(即误差),选择误差最大的簇再进行划分(即最大程度地减少误差),重复该过程直至达到期望的簇数目。
二分 KMeans 算法流程大致如下:
初始时,所有样本被看做在同一个簇:c(1)=c(2)=…=c(m)
while num<k ( num 表示当前的簇数):
for i=1 to num (对于每一个簇):
- 计算误差
- 在该簇上进行 K-Means 聚类,其中 k=2
- 计算将该簇一分为二后的总误差,该误差在之后将会被用于比较
选择使得总误差最小的簇进行划分。
虽然二分 K-Means 能带来全局最优解,但是我们也可以看到,该算法是一个贪心算法,因此计算量不小。