K-均值(K- means) ** 是最普及的聚类算法**,算法接受一个未标记的数据集,然后将数据聚类成不同的组
聚类算法 是无监督学习中的典型算法,K-均值算法 又是聚类算法中的经典算法
K- means算法 要求预先设定聚类的个数,然后不断更新聚类中心,通过多次迭代最终使得所有数据点到其聚类中心距离的平方和趋于稳定
K-均值是一个迭代算法,假设我们想要将数据聚类成n个组,其方法为:
首先从n 个向量中随机选择 K K K个点,称为聚类中心(cluster centroids)

对于数据集中的每一个数据,按照距离 K K K个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类
计算每一个组的平均值,将该组所关联的聚类中心点移动到平均值的位置
重复步骤2-4直至中心点不再变化

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
}
随机初始化N个聚类中心;
while(true)
{
簇分配:计算所有点到这N个聚类中心的距离,从而把数据分为N个簇(隔得最近的一个簇);
计算均值:对于每一个簇,计算各点到该簇聚类中心的距离,取平均值
移动聚类中心:移动该聚类中心到平均值处;
}
首先初始化随机选取的中心点(如图中的红色X和黑色X)

分别计算每个样本数据点到红色红色X和黑色X的距离后分类,到谁的距离小就将其标记为哪一类(分为了红色和蓝色的点)

然后移动中心点——将得到的所有红色(蓝色)的样本点数据进行求平均值,得到的两个平均值即为新的中心点

重复迭代上述很多次之后,得到中心点不在变化,则得到最终聚类结果

注意:如果有一个聚类中心,它没有被分配到任何一个点:
K-均值算法也可以很便利地用于将数据分为许多不同组,即使在没有非常明显区分的组群的情况下也可以
