返回
以实例充分展示K-means聚类方法的应用!
人工智能
2023-12-18 03:02:53
什么是 K-means 聚类?
K-means 聚类是一种无监督的机器学习算法,用于将一组数据点划分为 K 个簇,其中 K 是一个预先定义的数字。每个簇由具有相似特征的数据点组成,而簇之间的差异则尽可能大。
K-means 聚类算法的目的是找到一组簇中心,使得每个数据点都分配给与其最近的簇中心。簇中心是簇中所有数据点的平均值。
K-means 聚类算法步骤
K-means 聚类算法的步骤如下:
- 选择 K 个初始簇中心。这些簇中心通常是随机选择的。
- 将每个数据点分配给与其最近的簇中心。
- 更新每个簇的簇中心,使其等于簇中所有数据点的平均值。
- 重复步骤 2 和 3,直到簇中心不再发生变化。
K-means 聚类算法的应用
K-means 聚类算法可以用于各种各样的任务,包括:
- 客户细分
- 市场研究
- 图像分割
- 自然语言处理
- 推荐系统
K-means 聚类算法的优缺点
K-means 聚类算法的优点包括:
- 简单易懂
- 易于实现
- 速度快
K-means 聚类算法的缺点包括:
- 对初始簇中心的选取敏感
- 不能很好地处理非凸簇
- 不能很好地处理噪声数据
K-means 聚类算法的代码示例
以下是用 Python 实现的 K-means 聚类算法的代码示例:
import numpy as np
import matplotlib.pyplot as plt
# 数据点
data = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]])
# K 值
K = 3
# 初始簇中心
centroids = np.array([[2, 2], [6, 6], [8, 8]])
# 迭代次数
iterations = 100
# 簇分配
cluster_assignment = np.zeros(len(data))
# 簇中心更新
for iteration in range(iterations):
# 将每个数据点分配给与其最近的簇中心
for i in range(len(data)):
distances = np.linalg.norm(data[i] - centroids, axis=1)
cluster_assignment[i] = np.argmin(distances)
# 更新每个簇的簇中心
for i in range(K):
centroids[i] = np.mean(data[cluster_assignment == i], axis=0)
# 绘制结果
plt.scatter(data[:, 0], data[:, 1], c=cluster_assignment)
plt.show()
结论
K-means 聚类算法是一种简单易懂、易于实现且速度快的聚类算法。它可以用于各种各样的任务,包括客户细分、市场研究、图像分割、自然语言处理和推荐系统。然而,K-means 聚类算法对初始簇中心的选取敏感,不能很好地处理非凸簇和噪声数据。