吴恩达老师-K均值聚类
K均值聚类算法中主要是有两个关键的步骤:簇分配和移动聚类中心。
- 簇分配
- 假设有一个样本集合,需要将其分成两个类(簇:cluster,红色和蓝色)
- 首先随机生成两个聚类中心:红色和蓝色两个点
- 遍历每个样本绿色的点,求出和两个聚类中心的距离,判断和哪个更接近,则归属于哪个类(簇)
- 移动聚类中心
- 将两个聚类中心(红色和蓝色的叉)移动到同色点的均值处,找到所有红色(蓝色)点的均值
重复上述的步骤:簇分配和移动聚类中心,直到颜色的点不再改变,具体算法过程如下各图所示:
算法
输入
- K值:分成K个簇
- 训练样本
簇分配和移动聚类中心
总共K个簇,用$u_1,…,u_K$表示,求出每个样本$x^{(i)}$和某个聚类中心之间距离的最小值,采用的是欧式距离的平方,则该样本归属于其类
$$
c_i=\min ||x{(i)}-u_k||2
$$
代价损失函数
算法特性
- 基于划分的聚类算法,k值需要预先指定;
- 欧式距离的平方表示样本和聚类中心之间的距离,以中心或者样本的均值表示类别
- 算法是迭代算法,不能得到全局最优解
- 选择不同的初始中心,会得到不同的聚类结果
- 聚类结果的质量一般是通过类的平均直径来进行衡量的
k
的选择:一般的,当类别数增加平均直径会减小,当到达某个值后平均直径不再变化,此时的值就是k
值
代码实现
1 | import numpy as np |
1 | from numpy import * |