经典聚类算法K-means

625 阅读3分钟

K-means

1.定义

K - means算法是一种无监督的聚类算法,其主要目标是将给定的数据集合划分成K个不同的簇(cluster)。这里的K是一个预先定义好的参数,表示要将数据划分成的簇的数量。

2.算法步骤

步骤一初始化

首先随机选择K个数据点作为初始的聚类中心(centroid)。这些中心代表了每个簇的初始位置。 下图中随机选取了两个点作为聚类中心。

step1.png

步骤二:分配数据点到最近的聚类中心

对于数据集中的每个数据点,计算它到每个聚类中心的距离 d 。距离的计算可以使用欧几里得距离(Euclidean distance)、曼哈顿距离(Manhattan distance) 等多种距离度量方式。

将数据点分配给距离最近的聚类中心,同一个聚类中心的数据点为同一个簇。

欧几里得距离:d = \sqrt{(x_1-x_2)^2 + (y_1-y_2)^2}

曼哈顿距离:d = |x_1 - x_2| + |y_1 - y_2|

步骤三:更新聚类中心

对于每个簇,重新计算它的聚类中心。新的聚类中心是该簇中所有数据点的均值。将原来的聚类中心的位置移动到新的聚类中心的位置。

step2.png

步骤四:重复步骤二和步骤三,直到收敛

收敛的判断标准可以是聚类中心不再发生明显变化(例如,前后两次聚类中心的距离小于某个预先设定的阈值),或者数据点所属的簇不再发生变化。

3.成本函数

采用每个数据点到其聚类中心的距离之和,作为其成本,假设有m个簇,x^{(i)}表示第i个簇的所有数据点,\mu_{(i)}为第i个簇的聚类中心。假设有m个簇,则成本H为:

H = \sum_{i=0}^{m}||x^{(i)} - \mu_{(i)}||^2

4.如何决定簇的个数(肘方法)

Elbow method(肘方法)是一种用于确定 K-Means 算法中最佳聚类数(K 值)的方法。

步骤:

  • 选择一个合适的 K 值范围,通常从 1 开始逐渐增加。
  • 对于每个 K 值,运行 K-Means 算法,并计算代价函数 SSE。
  • 将不同 K 值对应的 SSE 绘制在一个图表上。
  • 观察曲线,找到 “肘部” 对应的 K 值。

elbowmethod.png

5.优点

  • 简单易懂:算法的原理和步骤相对简单,容易理解和实现。
  • 计算效率高:在处理大规模数据集时,K - means算法的计算速度相对较快,因为它主要涉及到距离计算和均值计算等简单的数学运算。
  • 可扩展性好:可以应用于高维数据,并且能够有效地处理大量的数据点。

6.缺点

需要预先指定K值:在实际应用中,很难提前知道数据应该被划分成多少个簇。K值的选择不当可能会导致聚类结果不理想。

对初始值敏感:由于初始聚类中心是随机选择的,不同的初始值可能会导致不同的聚类结果。

不能发现非球形的簇:K - means算法倾向于发现球形的簇,对于形状不规则的簇(如椭圆形、环形等)可能无法得到很好的聚类效果。

7.应用场景

市场细分:将客户按照购买行为、消费习惯等特征划分成不同的群体,以便企业制定针对性的营销策略。

图像压缩:可以将图像中的像素点聚类,用聚类中心来表示一组像素点,从而实现图像的压缩。

文本分类:对文档进行聚类,将相似的文档归为一类,帮助用户快速浏览和分类文档。