K-Means聚类算法的使用
K-Means聚类算法的使用
1、简介
K-Means是一种广泛使用的聚类算法,属于无监督学习方法,主要用于将数据集划分为多个组(簇)。它的基本思想是通过迭代的方式最小化簇内的误差平方和(即簇内所有点到该簇中心的距离平方和)。
2、算法原理
初始化:
- 随机选择K个数据点作为初始的簇中心(质心)。
- 或者使用某些启发式方法(如K-Means++)来选择初始质心,以提高算法的性能和稳定性。
分配点到最近的簇:
- 对于数据集中的每一个点,计算它与每个质心之间的距离,并将其分配给距离最近的质心所在的簇。
- 常用的距离度量方法是欧氏距离,但也可以使用其他距离度量。
更新质心:
- 对于每个簇,重新计算其质心,新的质心是该簇中所有点的平均值。
重复步骤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聚类算法的使用/