1. 代价函数
K-means算法是比较容易理解的,它属于无监督学习方法,所以训练样本数据不再含有标签。我们假设有样本数据
x(1),x(2),⋯,x(m)
x
(
1
)
,
x
(
2
)
,
⋯
,
x
(
m
)
,我们选择设置
K
K
个聚类中心,K-means算法的代价函数表达式如下
2. 具体算法
K-means算法的具体流程如下:
Repeat {
for i = 1 to m
c(i) := index (form 1 to K) of cluster centroid closest to x(i)
for k = 1 to K
μk := average (mean) of points assigned to cluster k
}
其中,第一个循环用于更新每个样本距离最近的聚类中心,第二个循环用于更新聚类中心所处的位置。
3. 随机初始化
通常我们会随机选取 K K 个样本数据作为初始聚类中心,但是这样可能得到一个局部最小点。其中一个解决方法是,
多次运行K-均值算法,每一次都重新进行随机初始化,最后再比较多次运行K-均值的结果,选择代价函数最小的结果。
但是,这种方法在,即 K K 较小的时候还是可行的,但是如果较大,这么做也可能不会有明显地改善。
4.聚类数的选取
绝大多数是需要根据数据人工选取的。肘图的方法可能有所帮助,比如得到左侧结果的时候,我们就可以选择肘的位置的作为聚类数。但肘图不一定可行,比如得到图中右侧结果的时候。