K-Means聚类算法的使用

K-Means聚类算法的使用

1、简介

K-Means是一种广泛使用的聚类算法,属于无监督学习方法,主要用于将数据集划分为多个组(簇)。它的基本思想是通过迭代的方式最小化簇内的误差平方和(即簇内所有点到该簇中心的距离平方和)。

2、算法原理

  1. 初始化

    • 随机选择K个数据点作为初始的簇中心(质心)。
    • 或者使用某些启发式方法(如K-Means++)来选择初始质心,以提高算法的性能和稳定性。
  2. 分配点到最近的簇

    • 对于数据集中的每一个点,计算它与每个质心之间的距离,并将其分配给距离最近的质心所在的簇。
    • 常用的距离度量方法是欧氏距离,但也可以使用其他距离度量。
  3. 更新质心

    • 对于每个簇,重新计算其质心,新的质心是该簇中所有点的平均值。
  4. 重复步骤2和3

    • 重复执行“分配点”和“更新质心”这两个步骤,直到质心不再发生变化或变化非常小,或者达到预设的最大迭代次数。

3、K-Means的优缺点

优点:

  • 简单易实现。
  • 效率高,尤其是当簇的数量相对较少时。
  • 可以处理大规模数据集。

缺点:

  • 需要预先指定簇的数量K,但实际项目中K往往未知。
  • 因为质心是基于均值计算的,会导致K-Means对于异常值过于敏感。
  • 假设簇的形状为凸形,对于非凸形的簇效果不好。

4、测试案例

使用Sklearn生成的随机样本并验证分类

使用Python3代码如下:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

# 生成合成数据
n_samples = 1500
X, y = make_blobs(n_samples=n_samples, centers=4)

# np.random.seed(0)
# X = np.random.rand(n_samples, 2)

# 创建 KMeans 模型
kmeans = KMeans(n_clusters=4)

# 训练模型
kmeans.fit(X)

# 获取聚类结果
y_pred = kmeans.predict(X)
centers = kmeans.cluster_centers_

# 绘制结果
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=y_pred, s=50, cmap='viridis')
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75, marker='x')
plt.title("小宋K-Means测试")
plt.xlabel("x1")
plt.ylabel("x2")
plt.show()

5、运行效果


K-Means聚类算法的使用
https://www.dearcloud.cn/2024/11/14/20241114-k-means/K-Means聚类算法的使用/
作者
宋兴柱
发布于
2024年11月14日
许可协议