Machine Learning 简明教程

Machine Learning - K-Means Clustering

K 均值算法可以总结为以下步骤:

  1. Initialization - 选择 K 个随机数据点作为初始中心点。

  2. Assignment - 将每个数据点分配给最近的中心点。

  3. Recalculation - 通过获取每个集群中所有数据点的均值来重新计算中心点。

  4. Repeat - 重复步骤 2-3,直到中心点不再移动或达到最大迭代次数。

K 均值算法是一种简单且高效的算法,并且可以处理大型数据集。然而,它有一些限制,例如对初始中心点的敏感性、收敛到局部最优的倾向以及对所有集群假设等方差。

Implementation in Python

Python 有几个库提供了各种机器学习算法的实现,包括 K 均值聚类。我们来看看如何使用 scikit-learn 库在 Python 中实现 K 均值算法。

Step 1 − Import Required Libraries

要在 Python 中实现 K 均值算法,我们首先需要导入所需的库。我们将分别使用 numpy 和 matplotlib 库进行数据处理和可视化,以及 scikit-learn 库进行 K 均值算法。

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

Step 2 − Generate Data

要测试 K 均值算法,我们需要生成一些样本数据。在此示例中,我们将生成 300 个带有两个特征的随机数据点。我们还会对数据进行可视化。

X = np.random.rand(300,2)

plt.figure(figsize=(7.5, 3.5))
plt.scatter(X[:, 0], X[:, 1], s=20, cmap='summer');
plt.show()

Step 3 − Initialize K-Means

接下来,我们需要通过指定集群数 (K) 和最大迭代次数来初始化 K 均值算法。

kmeans = KMeans(n_clusters=3, max_iter=100)

Step 4 − Train the Model

在初始化 K 均值算法之后,我们可以通过将数据拟合到算法来训练模型。

kmeans.fit(X)

Step 5 − Visualize the Clusters

为了可视化集群,我们可以绘制数据点并根据其分配的集群为它们上色。

plt.figure(figsize=(7.5, 3.5))
plt.scatter(X[:,0], X[:,1], c=kmeans.labels_, s=20, cmap='summer')
plt.scatter(kmeans.cluster_centers_[:,0], kmeans.cluster_centers_[:,1],
marker='x', c='r', s=50, alpha=0.9)
plt.show()

以上代码的输出将是一个带有根据其分配的集群着色的数据点的图,以及以红色“x”符号标记的中心点。

Complete Implementation Example

以下是 Python 中 K 均值聚类算法的完整实现示例:

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

X = np.random.rand(300,2)
plt.figure(figsize=(7.5, 3.5))
plt.scatter(X[:, 0], X[:, 1], s=20, cmap='summer');
plt.show()

kmeans = KMeans(n_clusters=3, max_iter=100)
kmeans.fit(X)
plt.figure(figsize=(7.5, 3.5))
plt.scatter(X[:,0], X[:,1], c=kmeans.labels_, s=20, cmap='summer')
plt.scatter(kmeans.cluster_centers_[:,0], kmeans.cluster_centers_[:,1],
marker='x', c='r', s=50, alpha=0.9)
plt.show()

当你执行此代码时,它将生成以下图作为输出:

k means clustering
k means clustering plot

Applications of K-Means Clustering

K 均值聚类是一种通用算法,在多个领域有各种应用。这里我们重点介绍了一些重要的应用:

Image Segmentation

K-Means 聚类可以根据像素的颜色或纹理将图像分割成不同的区域。这项技术被广泛用于计算机视觉应用,例如对象识别、图像检索和医学影像。

Customer Segmentation

K-Means 聚类可用于根据客户的购买行为或人口统计特征将客户分成不同的群体。这项技术被广泛用于营销应用,例如客户保留、忠诚度计划和定向广告。

Anomaly Detection

K-Means 聚类可用于通过识别不属于任何聚类的含歧义数据点来识别数据集中的异常值。这项技术被广泛用于欺诈检测、网络入侵检测和预测性维护。

Genomic Data Analysis

K-Means 聚类可用于分析基因表达数据,识别共调节或共表达的不同基因组。这项技术被广泛用于生物信息学应用,例如药物发现、疾病诊断和个性化医疗。