KMeans实现
符号
- (K): 聚类的个数
- (x^{(i)}): 第i个样本
- (mu_{1},mu_{2},...mu_{K}): K个中心节点
- (c^{(i)}): 第i个样本对应的是哪个聚类, (c^{(i)})的值在1-K
- (m): 样本的数量
- (n): 特征的数量
实现
- 随机初始化中心centroids
- 在指定的迭代个数内
centroids = init_centroids
Repeat within maxIter {
for i = 1:m
c(i) := 第i个样本对应的最近的中心节点在centroids中的index(1 to K)
end
for k = 1:K
mu(k) := 根据得到的c, 计算出新的中心(平均值, 得到的centroids不一定要在样本中)
end
}
损失函数
- KMeans中的损失函数一般用于基于elbow判断K的取值
-
[J(c^{(1)},c^{(2)},...,c^{(m)},mu_1,mu_2,...,mu_k)={1over{m}sum_{i=1}^m||x^{(i)}-mu_{c^{(i)}}||^2}
]
选择K
- 方法1: 根据常识判断
- 方法2: 将K从1遍历到一个值, 如果得到CostFunction与K的图是elbow形状的, 则拐点为我们期望的值