K均值聚类(K-Means)的数学原理
K均值聚类是一种迭代优化算法,其目标是将数据分为 \( k \) 个簇,最小化簇内样本点与簇中心的平方误差和(即误差平方和,SSE)。以下是核心数学原理:
1. 目标函数
K均值算法的目标是最小化以下目标函数: $ J = \sum_{i=1}^k \sum_{x \in C_i} ||x - \mu_i||^2 $
- \( k \):簇的数量(预定义)。
- \( $C_i $):第 \( i \) 个簇。
- \($ \mu_i $ \):第 \( i \) 个簇的中心(质心)。
- \( x \):数据点。
- \($||x - \mu_i||^2$ \):数据点 \( x \) 与簇中心 \( \mu_i \) 的欧氏距离的平方。
2. 算法流程
K均值通过以下步骤进行迭代优化:
-
初始化簇中心: 随机选择 \( k \) 个数据点作为初始簇中心,或者随机初始化。
-
分配样本点: 对每个样本点 \( x \),计算它到所有簇中心 \( \mu_i \) 的欧氏距离,分配到最近的簇: $ C_i = {x | ||x - \mu_i||^2 \leq ||x - \mu_j||^2, \forall j \neq i} $
-
更新簇中心: 对每个簇 \( C_i \),重新计算其簇中心为簇中所有点的均值: $ \mu_i = \frac{1}{|C_i|} \sum_{x \in C_i} x $
-
迭代: 重复步骤 2 和 3,直到簇中心不再发生变化或达到最大迭代次数。
3. 收敛性
- 收敛条件:目标函数 \( J \) 收敛到局部最小值。
- 缺点:对初始值敏感,可能陷入局部最优。
伪代码
以下是 K 均值算法的伪代码:
|
|
-
层次聚类的数学原理
层次聚类(Hierarchical Clustering)是一种基于层次结构的聚类方法,分为两种类型:凝聚式层次聚类(Agglomerative Hierarchical Clustering) 和 分裂式层次聚类(Divisive Hierarchical Clustering)。常用的凝聚式层次聚类从单个点开始,将其逐步合并为簇。
1. 数学原理
层次聚类通过定义簇之间的相似度或距离逐步构建一个层次结构(如树状结构)。核心数学原理包括以下部分:
1.1 数据点之间的距离
常见的距离度量方式:
- 欧氏距离(Euclidean Distance): $ d(x_i, x_j) = \sqrt{\sum_{k=1}^m (x_{ik} - x_{jk})^2} $
- 曼哈顿距离(Manhattan Distance): $ d(x_i, x_j) = \sum_{k=1}^m |x_{ik} - x_{jk}| $
1.2 簇之间的距离
定义两个簇 \( C_i \) 和 \( C_j \) 的距离的方法:
- 单链接法(Single Linkage): $ D(C_i, C_j) = \min_{x \in C_i, y \in C_j} d(x, y) $
- 全链接法(Complete Linkage): $ D(C_i, C_j) = \max_{x \in C_i, y \in C_j} d(x, y) $
- 平均链接法(Average Linkage): $ D(C_i, C_j) = \frac{1}{|C_i| |C_j|} \sum_{x \in C_i, y \in C_j} d(x, y) $
- 质心法(Centroid Linkage): $ D(C_i, C_j) = ||\mu_i - \mu_j||_2 $ 其中 \( $\mu_i$ \) 和 \( $\mu_j $\) 是两个簇的质心。
1.3 层次结构
- 在凝聚式层次聚类中,初始状态将每个点作为一个簇,逐步合并最近的簇,直到最终所有点合并为一个簇。
- 在分裂式层次聚类中,从整体簇开始,逐步分裂为多个小簇。
2. 算法流程(以凝聚式为例)
- 初始化:将每个数据点作为一个独立的簇。
- 计算所有簇之间的距离,找到最近的两个簇。
- 合并最近的两个簇。
- 更新距离矩阵(根据所选的距离计算方法)。
- 重复步骤 2 至 4,直到所有簇合并为一个簇或达到指定层次。
伪代码
以下是凝聚式层次聚类的伪代码:
|
|
高斯混合模型
|
|
代码说明
这段代码实现了一个简单的高斯混合模型(Gaussian Mixture Model, GMM)的训练过程,以下是其功能说明:
代码功能
- 生成数据:
- 两组高斯分布数据
red
和blue
分别从 $N(2,32)\mathcal{N}(2, 3^2)N(2,32)$ 和$ N(7,12)\mathcal{N}(7, 1^2)N(7,12)$ 生成,每组 1000 个样本。 - 合并两组数据形成一个数据集
both_color
,用于 GMM 模型的训练。
- 两组高斯分布数据
- 数据可视化:
- 使用散点图展示红色和蓝色数据点,红色点和蓝色点分布在两个高斯分布的中心附近,用来直观表示两组数据的分布。
- 实现高斯混合模型:
- 实现了一个
Gaussian
类,用于对输入数据训练高斯混合模型(GMM),并估计数据点的混合成分(责任度)。
- 实现了一个
- 高斯混合模型训练逻辑:
- 使用 EM(Expectation-Maximization)算法,包含以下步骤:
- E 步(Expectation Step):计算每个数据点属于每个高斯分量的责任度 $\gamma_{jk}$。
- M 步(Maximization Step):根据计算出的责任度更新均值 $\mu_k$、协方差 $\sigma_k^2$ 和混合系数 $\pi_k$。
- 模型通过循环迭代,直到参数收敛为止(满足 $\epsilon$ 条件)。
- 使用 EM(Expectation-Maximization)算法,包含以下步骤:
- 输出结果:
- 打印最终训练得到的参数:
- $\mu$(每个分量的均值向量)
- $\sigma$(每个分量的协方差矩阵)
- $\pi$(每个分量的混合系数)
- 打印最终训练得到的参数:
类和方法功能
Gaussian
类:- 用于实现高斯混合模型的训练。
- 接收输入数据、分量数(
num
)和收敛阈值(eps
)。 - 存储模型的参数(均值、协方差、混合系数)及中间计算结果(责任度)。
train
方法:- 执行 EM 算法,包括:
- 计算数据点的责任度。
- 更新高斯分布的参数:均值 $\mu_k$、协方差 $\sigma_k^2$、混合系数 $\pi_k$。
- 打印训练后的参数。
- 执行 EM 算法,包括:
calc_resp_val
方法:- 计算每个数据点属于每个高斯分量的责任度 $\gamma_{jk}$。
gauss
方法:- 计算多元正态分布的概率密度值,用于责任度的计算。
执行逻辑
- 生成两组高斯分布数据,合并并转换为训练数据
x_train
。 - 初始化
Gaussian
对象,设置分量数(num=2
)和收敛阈值(eps=0.1
)。 - 调用
train
方法,训练高斯混合模型。 - 打印模型参数(均值、协方差、混合系数)。