K-means算法
K-means算法是聚类问题(无监督学习)应用最广泛的算法
步骤
-
K-means算法接收两个输入:
- K:聚类出的族的个数
- 数据集
{x(1),x(2),...,x(m)}
此外,规定
x(i)∈Rn(即去除了
x0=1)
-
第一步:随机初始化 K 个聚类中心,记为
μ1,μ2,...,μk∈Rn
-
第二步:重复以下步骤,直到聚类中心不再移动
- 族分配
for i = 1 to m :
compute
c(i)=mink∣∣x(i)−uk∣∣2
这里 小写 k 表示第 i 个聚类
c(i) 表示当前样本
x(i)所属的那个族的索引或者序号
- 移动聚类中心
for k = 1 to k :
计算聚类 k 的所有点的平均距离
μk,将聚类中心 k 移到此处
例如:
c(1)=2,c(5)=2,c(6)=2,c(10)=2,则
μk=41[x(1)+x(2)+x(3)+x(4)]∈Rn
如果存在一个没有点的聚类中心,一般是直接去除该聚类(即从 K 变成 K-1),或者是重新初始化聚类中心,但这种情况比较少出现。
代价函数(失真代价函数)
J(c(1),c(2),...,c(m),μ1,...,μK)=m1i=1∑m∣∣x(i)−μc(i)∣∣2
其中,
uc(i) 表示
x(i) 所属的那个族的聚类中心。
随机初始化
步骤
- 设置 K < 训练样本 m
- 在训练集中随机选择 K 个点
- 让
μ1,μ2,...,uK 等于这 K 个样本
随机初始化值不同,K均值最后可能得到不同的结果
如何避免局部最优
随机初始化多次(一般50-1000次),选择最小的
J(θ)
当 K 比较小时(2-10),多次随机初始化会有较大的影响,可以保证最下化畸变函数。 但是当 K 较大时,多次随机初始化结果可能会好一点点,但是不会好太多。