返回

以实例充分展示K-means聚类方法的应用!

人工智能

什么是 K-means 聚类?

K-means 聚类是一种无监督的机器学习算法,用于将一组数据点划分为 K 个簇,其中 K 是一个预先定义的数字。每个簇由具有相似特征的数据点组成,而簇之间的差异则尽可能大。

K-means 聚类算法的目的是找到一组簇中心,使得每个数据点都分配给与其最近的簇中心。簇中心是簇中所有数据点的平均值。

K-means 聚类算法步骤

K-means 聚类算法的步骤如下:

  1. 选择 K 个初始簇中心。这些簇中心通常是随机选择的。
  2. 将每个数据点分配给与其最近的簇中心。
  3. 更新每个簇的簇中心,使其等于簇中所有数据点的平均值。
  4. 重复步骤 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 聚类算法对初始簇中心的选取敏感,不能很好地处理非凸簇和噪声数据。