K-means
1.定义
K - means算法是一种无监督的聚类算法,其主要目标是将给定的数据集合划分成K个不同的簇(cluster)。这里的K是一个预先定义好的参数,表示要将数据划分成的簇的数量。
2.算法步骤
步骤一初始化
首先随机选择K个数据点作为初始的聚类中心(centroid)。这些中心代表了每个簇的初始位置。 下图中随机选取了两个点作为聚类中心。
步骤二:分配数据点到最近的聚类中心
对于数据集中的每个数据点,计算它到每个聚类中心的距离 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|
步骤三:更新聚类中心
对于每个簇,重新计算它的聚类中心。新的聚类中心是该簇中所有数据点的均值。将原来的聚类中心的位置移动到新的聚类中心的位置。
步骤四:重复步骤二和步骤三,直到收敛
收敛的判断标准可以是聚类中心不再发生明显变化(例如,前后两次聚类中心的距离小于某个预先设定的阈值),或者数据点所属的簇不再发生变化。
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 值。
5.优点
- 简单易懂:算法的原理和步骤相对简单,容易理解和实现。
- 计算效率高:在处理大规模数据集时,K - means算法的计算速度相对较快,因为它主要涉及到距离计算和均值计算等简单的数学运算。
- 可扩展性好:可以应用于高维数据,并且能够有效地处理大量的数据点。
6.缺点
需要预先指定K值:在实际应用中,很难提前知道数据应该被划分成多少个簇。K值的选择不当可能会导致聚类结果不理想。
对初始值敏感:由于初始聚类中心是随机选择的,不同的初始值可能会导致不同的聚类结果。
不能发现非球形的簇:K - means算法倾向于发现球形的簇,对于形状不规则的簇(如椭圆形、环形等)可能无法得到很好的聚类效果。
7.应用场景
市场细分:将客户按照购买行为、消费习惯等特征划分成不同的群体,以便企业制定针对性的营销策略。
图像压缩:可以将图像中的像素点聚类,用聚类中心来表示一组像素点,从而实现图像的压缩。
文本分类:对文档进行聚类,将相似的文档归为一类,帮助用户快速浏览和分类文档。