引言

群集运算(Clustering)是数据挖掘和机器学习领域中的一个基础且重要的概念。它通过将相似的数据点归为一组,从而帮助我们发现数据中的隐藏结构和模式。本文将深入探讨群集运算在数据挖掘与机器学习核心教材中的关键算法,包括它们的原理、实现和应用。

1. K-均值聚类算法

1.1 算法原理

K-均值聚类算法是一种迭代优化算法,其目标是将数据集划分为K个簇,使得每个数据点都分配到距离最近的簇中心。

  • 初始化:随机选择K个数据点作为初始簇中心。
  • 分配:将每个数据点分配到最近的簇中心。
  • 更新:计算每个簇的平均值,作为新的簇中心。
  • 迭代:重复分配和更新步骤,直到簇中心不再变化或达到预设的迭代次数。

1.2 代码示例

import numpy as np

def k_means(data, k):
    # 初始化簇中心
    centroids = data[np.random.choice(data.shape[0], k, replace=False)]
    for _ in range(10):  # 迭代次数
        # 分配
        distances = np.sqrt(((data - centroids[:, np.newaxis])**2).sum(axis=2))
        labels = np.argmin(distances, axis=0)
        # 更新
        centroids = np.array([data[labels == i].mean(axis=0) for i in range(k)])
    return centroids, labels

# 示例数据
data = np.array([[1, 2], [1, 4], [1, 0],
                 [10, 2], [10, 4], [10, 0]])

# 运行K-均值聚类
centroids, labels = k_means(data, 2)
print("簇中心:", centroids)
print("标签:", labels)

1.3 应用场景

K-均值聚类算法适用于处理高维数据,尤其在图像处理、文本挖掘等领域。

2. 层次聚类算法

2.1 算法原理

层次聚类算法通过将数据点逐步合并为更大的簇,形成一棵树(层次树)来描述数据中的层次结构。

  • 单链接:最近邻合并。
  • 完全链接:最远邻合并。
  • 平均链接:簇中心距离合并。
  • ** Ward链接**:最小化簇内平方和合并。

2.2 代码示例

import numpy as np
from scipy.cluster.hierarchy import linkage, fcluster

def hierarchical_clustering(data, method='ward'):
    # 计算层次树
    tree = linkage(data, method=method)
    # 聚类
    labels = fcluster(tree, t=2, criterion='maxclust')
    return tree, labels

# 示例数据
data = np.array([[1, 2], [1, 4], [1, 0],
                 [10, 2], [10, 4], [10, 0]])

# 运行层次聚类
tree, labels = hierarchical_clustering(data)
print("层次树:", tree)
print("标签:", labels)

2.3 应用场景

层次聚类算法适用于处理复杂的数据结构,尤其在生物信息学、社会网络分析等领域。

3. 总结

本文介绍了数据挖掘与机器学习核心教材中的两种关键群集运算算法:K-均值聚类和层次聚类。这些算法在处理高维数据、发现数据中的隐藏结构和模式等方面具有广泛的应用。通过深入理解这些算法的原理和实现,我们可以更好地应对实际的数据挖掘和机器学习问题。