955 lines
40 KiB
Markdown
955 lines
40 KiB
Markdown
# 第十四章
|
||
|
||
机器学习(Machine Learning)领域中,监督学习和非监督学习是两种最基础且核心的范式。简单来说,它们的本质区别在于训练数据中是否包含“答案”。
|
||
|
||
---
|
||
|
||
## 1. 什么是监督学习(Supervised Learning)?
|
||
|
||
**监督学习**好比一名学生在老师的指导下学习。老师给学生一套练习题,并且每道题都附带了标准答案。学生通过观察题目特征(特征向量 $x$)和答案(标签 $y$)之间的对应关系,总结出规律。
|
||
|
||
- **核心目标**:建立一个从输入到输出的映射函数 $f(x) \rightarrow y$。
|
||
|
||
- **常见任务**:
|
||
|
||
- **回归(Regression)**:预测连续数值,如房价预测、股票价格走势。
|
||
|
||
- **分类(Classification)**:预测离散类别,如垃圾邮件检测(是/否)、图像识别(猫/狗)。
|
||
|
||
- **典型算法**:线性回归、逻辑回归、支持向量机(SVM)、决策树、随机森林、神经网络。
|
||
|
||
|
||
---
|
||
|
||
## 2. 什么是非监督学习(Unsupervised Learning)?
|
||
|
||
**非监督学习**则更像是一个孩子在没有老师指导的情况下自行探索世界。给出的数据只有题目(特征 $x$),没有答案(没有标签 $y$)。模型需要自己去发现数据内部隐藏的结构或模式。
|
||
|
||
- **核心目标**:发现数据的内在结构、分布或相似性。
|
||
|
||
- **常见任务**:
|
||
|
||
- **聚类(Clustering)**:根据相似性将数据分组,如客户细分、新闻聚合。
|
||
|
||
- **降维(Dimensionality Reduction)**:简化数据特征,去除冗余信息,如 PCA(主成分分析)。
|
||
|
||
- **关联规则(Association Rule)**:发现数据间的潜在规则,如超市里“买了尿布的人通常也会买啤酒”。
|
||
|
||
- **典型算法**:K-means 聚类、层次聚类、PCA、自编码器(Autoencoders)。
|
||
|
||
|
||
---
|
||
|
||
## 3. 两者的区别与联系
|
||
|
||
### 核心区别
|
||
|
||
|**维度**|**监督学习**|**非监督学习**|
|
||
|---|---|---|
|
||
|**数据标签**|有标签(Labeled Data)|无标签(Unlabeled Data)|
|
||
|**反馈机制**|直接反馈(有标准答案对比)|无反馈(仅寻找模式)|
|
||
|**预测能力**|强,能预测未来数据的类别或值|弱,主要用于描述和探索现有数据|
|
||
|**复杂度**|较高(数据标注成本昂贵)|较低(直接使用原始数据)|
|
||
|
||
### 两者的联系
|
||
|
||
1. **相辅相成**:在实际应用中,两者经常结合使用。例如,先通过非监督学习(聚类)对海量未标记数据进行预处理或异常检测,然后再利用监督学习进行精确分类。
|
||
|
||
2. **目标一致**:无论是哪种方式,其终极目标都是为了让计算机通过算法从数据中获取知识,提高处理任务的自动化程度。
|
||
|
||
3. **技术交织**:深度学习中的许多结构(如生成对抗网络 GANs)会同时包含监督和非监督的思想。此外,还衍生出了**半监督学习**(只有少量标注数据)等中间形态。
|
||
|
||
|
||
---
|
||
|
||
> **总结:**
|
||
>
|
||
> 如果你已经知道想要寻找的特定结果(比如预测是否违约),选**监督学习**;如果你只是拿到一堆混乱的数据,想看看里面有什么规律或族群,选**非监督学习**。
|
||
|
||
|
||
|
||
关联规则(Association Rules)是非监督学习中非常有意思的一个分支,它不像聚类那样为了“分类”,而是为了“找关系”。最经典的案例就是沃尔玛发现的“啤酒与尿布”的故事:通过分析购物篮数据,发现买尿布的人大概率也会买啤酒。
|
||
|
||
---
|
||
|
||
## 1. 核心概念:如何衡量“规则”?
|
||
|
||
假设我们有一堆交易数据,每条交易包含若干商品。要确定“如果买了 A,那么也会买 B”($A \rightarrow B$)这个规则是否有价值,通常看三个核心指标:
|
||
|
||
1. **支持度(Support)**:
|
||
|
||
- 定义:商品 A 和 B 同时出现在所有交易中的概率。
|
||
|
||
- 公式:$Support(A \rightarrow B) = P(A \cup B)$
|
||
|
||
- **意义**:衡量这个规则的普适性。如果支持度太低,说明这个组合很少见,没必要研究。
|
||
|
||
2. **置信度(Confidence)**:
|
||
|
||
- 定义:在已经买了 A 的前提下,买 B 的概率。
|
||
|
||
- 公式:$Confidence(A \rightarrow B) = P(B|A) = \frac{Support(A \cup B)}{Support(A)}$
|
||
|
||
- **意义**:衡量规则的可靠性。
|
||
|
||
3. **提升度(Lift)**:
|
||
|
||
- 定义:含有 A 条件下出现 B 的概率,与不考虑 A 时 B 出现概率的比值。
|
||
|
||
- 公式:$Lift(A \rightarrow B) = \frac{Confidence(A \rightarrow B)}{Support(B)}$
|
||
|
||
- **意义**:
|
||
|
||
- $Lift > 1$:A 对 B 有正向促进作用(强关联)。
|
||
|
||
- $Lift = 1$:A 和 B 相互独立。
|
||
|
||
- $Lift < 1$:A 甚至排斥 B。
|
||
|
||
|
||
---
|
||
|
||
## 2. Apriori 算法:寻找频繁项集的经典
|
||
|
||
Apriori 算法的名字源于它利用了“先验知识”(Prior knowledge)。它的核心任务是找到**频繁项集**(满足最小支持度阈值的商品组合)。
|
||
|
||
### 核心原理:Apriori 定理
|
||
|
||
- **性质 1**:如果一个项集是频繁的,那么它的所有子集也一定是频繁的。
|
||
|
||
- **性质 2(逆反)**:如果一个项集是非频繁的,那么它的所有超集(包含它的组合)也一定是非频繁的。
|
||
|
||
|
||
这个定理极大地减少了搜索空间。比如,如果我们发现“可乐”本身买的人就极少(不频繁),那我们根本不需要去计算“可乐+汉堡”或者“可乐+薯条”的频率了,直接**剪枝**。
|
||
|
||
### 算法步骤
|
||
|
||
1. **扫描数据**:计算单个物品的支持度,剔除不达标的,得到频繁 1-项集。
|
||
|
||
2. **连接与剪枝**:将上一步的频繁项集两两组合,生成候选集,并利用 Apriori 性质剔除不可能频繁的项。
|
||
|
||
3. **循环迭代**:重复上述过程,直到无法生成更高阶的频繁项集。
|
||
|
||
4. **产生规则**:从频繁项集中提取满足最小置信度的关联规则。
|
||
|
||
|
||
---
|
||
|
||
## 3. Apriori 的优缺点
|
||
|
||
- **优点**:
|
||
|
||
- 逻辑简单直观,易于理解。
|
||
|
||
- 利用剪枝技术,避免了对所有可能组合的盲目计算。
|
||
|
||
- **缺点**:
|
||
|
||
- **性能瓶颈**:每产生一次频繁项集都要全表扫描数据库。如果数据量巨大或商品种类极多,I/O 开销非常恐怖。
|
||
|
||
- **候选项过多**:当频繁项集很大时(比如包含 100 个物品),产生的子集数量是天文数字。
|
||
|
||
|
||
---
|
||
|
||
## 4. 算法演进:FP-Growth
|
||
|
||
为了解决 Apriori 频繁扫描数据库的问题,后来业界提出了 **FP-Growth (Frequent Pattern Growth)** 算法:
|
||
|
||
- **核心改进**:它只扫描两次数据库。
|
||
|
||
- **原理**:它将数据压缩成一棵 **FP 树(Frequent Pattern Tree)**,然后通过递归地在树上搜索来挖掘频繁项。它不需要生成候选集,速度通常比 Apriori 快两个数量级。
|
||
|
||
|
||
---
|
||
|
||
## 5. 应用场景
|
||
|
||
除了“超市购物篮分析”,关联规则还广泛用于:
|
||
|
||
- **个性化推荐**:在电商网站,“买了此商品的顾客还买了...”。
|
||
|
||
- **网络安全**:分析攻击行为的关联模式(比如登录失败后紧跟扫描行为)。
|
||
|
||
- **生物信息学**:寻找基因序列之间的关联关系。
|
||
|
||
- **软件工程**:分析哪些代码模块经常被同时修改,辅助重构。
|
||
|
||
|
||
---
|
||
|
||
聚类分析(Clustering Analysis)是非监督学习中最具代表性的技术。它的目标是将数据集划分为若干个组(簇),使得**同一簇内的数据点高度相似,而不同簇间的数据点尽可能不同**。
|
||
|
||
---
|
||
|
||
## 1. 基础:相似性度量与邻接矩阵
|
||
|
||
在聚类之前,我们必须量化“两个点有多像”。
|
||
|
||
- **相似性(Similarity)与不相似性(Dissimilarity)**:
|
||
|
||
- **不相似性**通常用**距离**表示。最常见的是 **欧氏距离(Euclidean Distance)**,公式为 $d(x, y) = \sqrt{\sum (x_i - y_i)^2}$。此外还有曼哈顿距离、切比雪夫距离等。
|
||
|
||
- **相似性**通常用**相关系数**或**余弦相似度**表示,取值范围通常在 $[0, 1]$ 或 $[-1, 1]$。
|
||
|
||
- **邻接矩阵 / 接近矩阵(Proximity Matrix)**:
|
||
|
||
- 这是一个 $n \times n$ 的对称矩阵,其中第 $i$ 行第 $j$ 列的元素表示第 $i$ 个样本与第 $j$ 个样本之间的距离或相似度。它是许多聚类算法(尤其是层次聚类)的输入基础。
|
||
|
||
|
||
---
|
||
|
||
## 2. 基于原型的聚类:K-means 与 K-medoids
|
||
|
||
这类算法假设每个簇都有一个“中心”。
|
||
|
||
### K-means(K-均值)
|
||
|
||
- **核心逻辑**:以均值(质心)作为簇中心。
|
||
|
||
- **流程**:随机选 $K$ 个中心 $\rightarrow$ 将每个点分配给最近的中心 $\rightarrow$ 重新计算每个簇的均值作为新中心 $\rightarrow$ 迭代直到中心不再变化。
|
||
|
||
- **优点**:速度极快,适合大规模数据。
|
||
|
||
- **缺点**:对**异常值**非常敏感(一个极值就能把均值拉跑);只能处理球形簇;需要预先指定 $K$。
|
||
|
||
|
||
### K-medoids(K-中心点)
|
||
|
||
- **核心逻辑**:强制要求簇中心必须是**原始数据集中的某个点**(称为 Medoid)。
|
||
|
||
- **优点**:对异常值更鲁棒(健壮),因为它不计算均值,而是寻找中值。
|
||
|
||
- **缺点**:计算复杂度比 K-means 高,适合中小型数据集。
|
||
|
||
|
||
---
|
||
|
||
## 3. 向量量化(Vector Quantization, VQ)
|
||
|
||
**向量量化**实际上是聚类在信号处理和数据压缩中的应用。
|
||
|
||
- **原理**:将高维连续向量映射到有限个“码向量”(Codevector)的过程。
|
||
|
||
- **联系**:K-means 实际上就是寻找最优码书(Codebook)的过程。通过用簇中心的索引代替原始数据,可以实现极高比例的**损耗压缩**。
|
||
|
||
|
||
---
|
||
|
||
## 4. 层次聚类(Hierarchical Clustering)
|
||
|
||
层次聚类通过构建一个树状结构(Dendrogram)来表示数据间的关系。
|
||
|
||
### 合并聚类(Agglomerative / 系统聚类)
|
||
|
||
这是最常用的“自底向上”方法:
|
||
|
||
1. **起步**:每个点自成一簇。
|
||
|
||
2. **合并**:计算两两簇之间的距离,合并最近的两个簇。
|
||
|
||
3. **循环**:重复直到达到预设簇数或所有点合为一簇。
|
||
|
||
|
||
**组合算法(Linkage Method)**:决定“簇与簇之间距离”的计算方式:
|
||
|
||
- **最短距离法(Single Linkage)**:取两个簇中最近两点的距离。易产生“链状效应”。
|
||
|
||
- **最长距离法(Complete Linkage)**:取两个簇中最远两点的距离。结果通常比较紧凑。
|
||
|
||
- **平均距离法(Average Linkage)**:取所有点对距离的平均值。
|
||
|
||
- **离差平方和法(Ward's Method)**:合并后使簇内方差增加最小,效果通常最好。
|
||
|
||
|
||
### 分裂聚类(Divisive)
|
||
|
||
- “自顶向下”:初始将所有点视为一簇,然后递归地将其分裂。计算量极大,实际应用较少。
|
||
|
||
|
||
---
|
||
|
||
## 5. 其他聚类方式概览
|
||
|
||
- **基于密度的聚类(DBSCAN)**:
|
||
|
||
- 通过寻找被低密度区域分隔的高密度区域来发现簇。
|
||
|
||
- **优点**:可以发现任意形状的簇(不限于球形),且能自动识别**噪声点(异常值)**。
|
||
|
||
- **基于网格的聚类(STING)**:
|
||
|
||
- 将空间划分为网格单元,在网格级别处理数据,速度极快。
|
||
|
||
- **基于模型的聚类(GMM - 高斯混合模型)**:
|
||
|
||
- 假设数据是由多个高斯分布混合生成的,通过 EM 算法估计参数。这属于**概率聚类**。
|
||
|
||
|
||
---
|
||
|
||
## 总结比较
|
||
|
||
|**算法**|**类型**|**优点**|**缺点**|
|
||
|---|---|---|---|
|
||
|**K-means**|划分式|简单、高效、适合大数据|需预设 $K$,对异常值敏感|
|
||
|**K-medoids**|划分式|鲁棒性强,处理异常值好|速度较慢|
|
||
|**合并聚类**|层次式|聚类关系一目了然,不需预设 $K$|复杂度高 $O(n^3)$,不可回溯|
|
||
|**DBSCAN**|密度式|可识别噪声,发现异形簇|对密度差异大的数据效果差|
|
||
|
||
在实际操作中,通常会先通过 **层次聚类** 观察谱系图来确定合适的 $K$ 值,然后再用 **K-means** 进行大规模运算。
|
||
|
||
---
|
||
|
||
在聚类分析的理论框架中,根据构建簇(Cluster)的数学逻辑和模型假设,我们通常将算法归纳为**组合算法**、**混合模型**和**模式寻找**三大类。这三者代表了从“经验主义”到“概率统计”再到“几何特征”的不同视角。
|
||
|
||
---
|
||
|
||
## 1. 组合算法 (Combinatorial Algorithms)
|
||
|
||
组合算法不假设数据背后存在任何概率分布,而是直接在离散的组合空间中寻找最优的数据划分。
|
||
|
||
- **核心逻辑**:将 $N$ 个观测值分配到 $K$ 个簇中,目标是最小化某种“损失函数”(通常是簇内不相似度之和)。
|
||
|
||
- **数学表达**:
|
||
|
||
目标通常是最小化如下平方误差:
|
||
|
||
$$W(C) = \frac{1}{2} \sum_{k=1}^{K} \sum_{i \in C_k} \sum_{j \in C_k} d(x_i, x_j)$$
|
||
|
||
- **代表算法**:
|
||
|
||
- **K-means**:最典型的组合优化,通过迭代将点分配给最近的质心。
|
||
|
||
- **层次聚类 (Hierarchical Clustering)**:通过合并或分裂的组合策略构建树状结构。
|
||
|
||
- **特点**:
|
||
|
||
- **优点**:计算直观,不依赖复杂的概率假设,工程实现简单。
|
||
|
||
- **缺点**:这是一个 NP-Hard 问题,算法(如 K-means)通常只能找到局部最优解,且对 $K$ 的选择和初始点非常敏感。
|
||
|
||
|
||
---
|
||
|
||
## 2. 混合模型 (Mixture Models)
|
||
|
||
混合模型属于**概率聚类**。它假设观测数据是由若干个潜在的概率分布(通常是高斯分布)混合生成的。
|
||
|
||
- **核心逻辑**:每个簇对应一个概率密度函数,一个样本点属于某个簇的概率由该分布决定。这是一种“软聚类”(Soft Clustering),即一个点可以以 0.7 的概率属于 A 簇,0.3 的概率属于 B 簇。
|
||
|
||
- **数学表达**:
|
||
|
||
数据的总概率密度表示为各成分的加权和:
|
||
|
||
$$f(x) = \sum_{k=1}^{K} \pi_k P(x|\theta_k)$$
|
||
|
||
其中 $\pi_k$ 是混合权重,$\theta_k$ 是第 $k$ 个分布的参数(如均值和方差)。
|
||
|
||
- **代表算法**:
|
||
|
||
- **高斯混合模型 (GMM)**:假设每个簇都服从高斯分布。
|
||
|
||
- **EM 算法 (Expectation-Maximization)**:用于求解模型参数的标准迭代程序。
|
||
|
||
- **特点**:
|
||
|
||
- **优点**:数学基础严谨,能够提供隶属概率,可以处理簇大小不一、形状重叠的情况。
|
||
|
||
- **缺点**:计算开销比 K-means 大;如果实际数据不符合预设的分布(如不是高斯分布),效果会大打折扣。
|
||
|
||
|
||
---
|
||
|
||
## 3. 模式寻找 (Mode Seeking / Density-based)
|
||
|
||
模式寻找算法(也称基于密度的聚类)从几何和拓扑的角度看待聚类。它认为簇是特征空间中**密度较高**的区域,而被**低密度区域**(噪声)所分隔。
|
||
|
||
- **核心逻辑**:聚类的中心被定义为概率密度函数的局部最大值(波峰/模式)。算法会沿着密度的梯度方向寻找这些波峰。
|
||
|
||
- **代表算法**:
|
||
|
||
- **Mean Shift (均值漂移)**:一种非参数估计方法,通过不断将中心点移向高密度区域来定位波峰。
|
||
|
||
- **DBSCAN**:虽然通常被归类为密度聚类,但其核心思想也是连接高密度模式区域。
|
||
|
||
- **特点**:
|
||
|
||
- **优点**:
|
||
|
||
1. **无需预设 K**:它能根据数据密度自动发现簇的数量。
|
||
|
||
2. **形状无关**:可以发现任何奇形怪状的簇(如环形、S型)。
|
||
|
||
3. **鲁棒性**:能天然地识别并剔除离群点(噪声)。
|
||
|
||
- **缺点**:在高维数据下由于“维度灾难”,密度估计会变得非常不准;对密度不均匀的数据集处理效果较差。
|
||
|
||
|
||
---
|
||
|
||
## 总结对比
|
||
|
||
|**类别**|**视角**|**划分性质**|**对 K 的依赖**|**典型场景**|
|
||
|---|---|---|---|---|
|
||
|**组合算法**|距离/能量最小化|硬划分 (0或1)|必须预设|大规模快速处理,球形簇|
|
||
|**混合模型**|概率统计生成|软划分 (概率)|需预设|需要确定置信度,数据重叠|
|
||
|**模式寻找**|几何密度/拓扑|硬划分/噪声识别|自动发现|形状复杂的数据,包含噪声|
|
||
|
||
这三种类别并不是互斥的。例如,如果你在处理底层的系统指标监控或者复杂的信号分析,可能会先用**模式寻找**来剔除异常,再用**混合模型**进行精细化刻画。
|
||
|
||
你目前是在做相关的算法实现,还是在准备课程考试呢?
|
||
|
||
---
|
||
|
||
|
||
聚类在现实生活中的应用非常广泛,它本质上是在**给混乱的信息找秩序**。
|
||
|
||
### 1. 常见的聚类例子
|
||
|
||
- **电商客户画像**:根据购买频次、消费金额、浏览偏好,将用户分为“高价值忠实客户”、“潜在流失客户”、“价格敏感型客户”等,从而进行精准营销。
|
||
|
||
- **新闻自动分组**:像 Google News 这样的平台,每天抓取数百万篇报道。它通过聚类将讨论“同一个事件”的稿件合在一起,形成一个新闻专题。
|
||
|
||
- **生物信息学**:在基因芯片实验中,将表达模式相似的基因聚在一起,从而推测未知基因的功能或参与的生物学过程。
|
||
|
||
- **图像分割**:在计算机视觉中,将像素点根据颜色、亮度或纹理聚类,从而把前景物体(如一张脸)从背景中分离出来。
|
||
|
||
- **城市规划**:根据人口密度、交通流量和商业设施分布,将城市划分为不同的功能区(居住区、商业区、工业区)。
|
||
|
||
|
||
---
|
||
|
||
### 2. 合并聚类(系统聚类)的树状图演示
|
||
|
||
合并聚类最直观的产物就是**聚类树(Dendrogram)**。我们来构造一个简单的例子。
|
||
|
||
#### 假设场景
|
||
|
||
我们要对 5 个城市(A, B, C, D, E)进行聚类,假设它们之间的距离矩阵如下(数值越小越近):
|
||
|
||
| |**A**|**B**|**C**|**D**|**E**|
|
||
|---|---|---|---|---|---|
|
||
|**A**|0|2|7|8|10|
|
||
|**B**|2|0|6|9|11|
|
||
|**C**|7|6|0|1|4|
|
||
|**D**|8|9|1|0|3|
|
||
|**E**|10|11|4|3|0|
|
||
|
||
#### 合并过程:
|
||
|
||
1. **第一步**:找距离最近的一对。**C 和 D** 距离仅为 **1**。合并它们,形成簇 **(CD)**。
|
||
|
||
2. **第二步**:剩下的点里,**A 和 B** 距离为 **2**。合并它们,形成簇 **(AB)**。
|
||
|
||
3. **第三步**:现在有三个簇:(AB), (CD), E。计算距离发现 (CD) 和 E 最近(假设 D 到 E 距离为 3)。合并它们,形成簇 **(CDE)**。
|
||
|
||
4. **最后一步**:将剩下的两个大簇 **(AB)** 和 **(CDE)** 合并。
|
||
|
||
|
||
#### 构造的聚类树:
|
||
|
||
Plaintext
|
||
|
||
```
|
||
距离 (Height)
|
||
^
|
||
10| +-----------------------+
|
||
| | |
|
||
| +------+-------+ |
|
||
5| | | | |
|
||
| | | +---+---+ |
|
||
| | | | | |
|
||
2| +---+---+ | | +---+---+ |
|
||
| | | | | | | | | |
|
||
1| | | | | | | | | |
|
||
+--A---B---+--+---E---C---D---+-------+
|
||
[ 簇 1 ] [ 簇 2 ]
|
||
```
|
||
|
||
### 怎么看这张图?
|
||
|
||
- **横轴**:代表原始的每一个数据点(城市)。
|
||
|
||
- **纵轴**:代表**合并时的距离(不相似度)**。
|
||
|
||
- **如何分类**:你可以通过在纵轴上“砍一刀”来决定分几类。
|
||
|
||
- 如果你在距离 **5** 的位置横着画一条线,树会被切成两半,你就得到了两个簇:**{A, B}** 和 **{C, D, E}**。
|
||
|
||
- 如果你在距离 **1.5** 的位置画线,你会得到四个簇:**{A}, {B}, {E}** 和已经合并的 **{C, D}**。
|
||
|
||
|
||
这种树状结构的魅力在于,它不需要你预先指定 $K$。你可以先画出整棵树,然后根据实际需求(比如经费只够做 3 组实验)来决定在哪里“切一刀”。
|
||
|
||
你目前是在尝试用代码(比如 Rust 或 Python)实现这种树状图的绘制,还是在推导它的数学逻辑?
|
||
|
||
---
|
||
|
||
**自组织映射图(Self-Organizing Map, SOM)**,也常被称为 **Kohonen 网络**,是一种非常独特的非监督学习人工神经网络。
|
||
|
||
如果说 K-means 是在做“分类”,那么 SOM 更像是在做“降维+可视化”**。它能够将高维度的复杂数据,映射到低维(通常是二维)的网格上,同时还能**保持数据原有的拓扑结构(即:在原始空间离得近的点,在映射后的地图上也离得近)。
|
||
|
||
---
|
||
|
||
## 1. 核心原理:它是如何工作的?
|
||
|
||
想象一张由很多神经元组成的“网”(通常是二维正方形或六边形网格),这张网覆盖在你的原始数据点上。
|
||
|
||
1. **竞争机制(Competition)**:
|
||
|
||
当输入一个数据样本时,网格上所有的神经元都会计算自己与这个样本的“距离”。距离最近的那个神经元被称为 **最佳匹配单元(Best Matching Unit, BMU)**。
|
||
|
||
2. **协作机制(Cooperation)**:
|
||
|
||
BMU 胜出后,它不仅自己会向这个样本靠近,还会带着它周围的“邻居”神经元一起向样本靠近。
|
||
|
||
3. **学习机制(Adaptation)**:
|
||
|
||
随着训练的进行,距离 BMU 越近的邻居挪动幅度越大,越远的越小。最终,整张网会像一层皮肤一样,根据数据的密度和形状分布开来。
|
||
|
||
|
||
---
|
||
|
||
## 2. SOM 的三大特点
|
||
|
||
- **拓扑保持(Topology Preserving)**:这是它最迷人的地方。如果你输入的是全球各地的气候数据,SOM 映射出来的二维图上,地理位置相近或气候特征相似的城市会自动靠在一起。
|
||
|
||
- **非监督性**:不需要任何标签,它完全通过自我竞争来发现数据内在的聚类模式。
|
||
|
||
- **降维与可视化**:它能把拥有成百上千个特征的数据,压缩成一张人类一眼就能看懂的“热力图”。
|
||
|
||
|
||
---
|
||
|
||
## 3. 常见的应用举例
|
||
|
||
### A. 颜色聚类(最直观的例子)
|
||
|
||
如果你给 SOM 输入成千上万种随机的 RGB 颜色(三维数据:R, G, B),经过训练,你会得到一张平滑渐变的彩色地图。你会发现所有的蓝色系被聚在了一角,红色系在另一角,中间是过渡色。
|
||
|
||
### B. 金融风险分析(银行客户评估)
|
||
|
||
银行有成千上万个客户,每个客户有年收入、信用评分、负债率、消费频率等几十个维度的指标。
|
||
|
||
- 通过 SOM,银行可以将这些客户映射到一张二维网格图上。
|
||
|
||
- 图中右上角的区域可能聚集了“高收入、低负债”的优质客户;左下角可能聚集了“频繁逾期”的高风险客户。
|
||
|
||
- 银行经理只需要看这张“风险地图”,就能直观地发现客户群体的分布和变化。
|
||
|
||
|
||
### C. 故障诊断
|
||
|
||
在大型工厂(如核电站或化工厂)中,传感器产生的监测数据维度极高。
|
||
|
||
- SOM 可以学习设备“正常运行”时的参数状态,并在地图上形成一个“正常区域”。
|
||
|
||
- 当新的监测数据落在了地图上的“异常边缘”或未知区域时,系统就能立刻发出预警,指示设备可能出现了某种特定类型的故障。
|
||
|
||
|
||
### D. 语意映射
|
||
|
||
在语言处理早期,研究者将单词根据其上下文特征输入 SOM,发现含义相近的词(如“苹果”、“香蕉”)在二维地图上会自动聚集在一起,甚至能区分出名词区域和动词区域。
|
||
|
||
---
|
||
|
||
## 4. SOM 与 K-means 的区别
|
||
|
||
虽然它们都用于聚类,但侧重点不同:
|
||
|
||
- **K-means**:追求的是“划分”,它给你 $K$ 个互不相干的组,组与组之间的逻辑关系(谁离谁更近)并不直观。
|
||
|
||
- **SOM**:追求的是“分布”,它不仅告诉你谁和谁一类,还通过地图展示了不同类别之间的**过渡和演变关系**。
|
||
|
||
|
||
你可以把 SOM 想象成一张“数据的航海图”,它不只是把岛屿分类,而是把整个海洋的深浅和岛屿的相对位置全部画了出来。
|
||
|
||
---
|
||
|
||
自组织映射(Self-Organizing Map, SOM)的核心在于“竞争学习”。它将高维输入空间中的模式,映射到低维(通常是二维)的离散图形上。
|
||
|
||
我们可以把这个过程想象成一块“具有弹性的橡皮网”,它试图根据数据点的分布不断拉伸、折叠,直到能够贴合这些点的形状。
|
||
|
||
---
|
||
|
||
## 1. 算法组成要素
|
||
|
||
- **输入向量**:$V \in \mathbb{R}^n$,即你的原始高维数据。
|
||
|
||
- **神经元网格**:通常是一个二维平面(如 $10 \times 10$),每个格点代表一个神经元。
|
||
|
||
- **权重向量**:每个神经元 $j$ 都有一个与输入维度相同的权重向量 $W_j \in \mathbb{R}^n$。
|
||
|
||
- _注意:算法的目标就是不断更新这些 $W_j$,使其代表数据的特征。_
|
||
|
||
|
||
---
|
||
|
||
## 2. 详细算法步骤
|
||
|
||
### 第一步:初始化
|
||
|
||
- 随机初始化所有神经元的权重向量 $W_j$。
|
||
|
||
- 设定初始**学习率** $\eta(0)$ 和**邻域半径** $\sigma(0)$。
|
||
|
||
|
||
### 第二步:竞争阶段 (Competition)
|
||
|
||
- 从训练集中随机取出一个样本 $x$。
|
||
|
||
- 计算该样本与网格中所有神经元权重 $W_j$ 的距离(通常使用欧氏距离)。
|
||
|
||
- 找到距离最近的那个神经元,称之为**最佳匹配单元(Best Matching Unit, BMU)**,记为 $c$:
|
||
|
||
$$c = \arg\min_j \| x - W_j \|$$
|
||
|
||
|
||
### 第三步:协作阶段 (Cooperation)
|
||
|
||
- BMU 确定后,它会影响其周围的邻居。
|
||
|
||
- 计算其他神经元 $j$ 与 BMU $c$ 在二维网格上的距离 $d_{cj}$。
|
||
|
||
- 计算**邻域函数** $h_{cj}(t)$。最常用的是高斯函数:
|
||
|
||
$$h_{cj}(t) = \exp\left( - \frac{d_{cj}^2}{2\sigma^2(t)} \right)$$
|
||
|
||
- 这意味着离 BMU 越近的神经元,受到的影响越大。
|
||
|
||
|
||
### 第四步:学习阶段 (Adaptation)
|
||
|
||
- 更新网格中所有(或邻域内)神经元的权重:
|
||
|
||
$$W_j(t+1) = W_j(t) + \eta(t) \cdot h_{cj}(t) \cdot [x - W_j(t)]$$
|
||
|
||
- **直观理解**:这个公式把神经元的权重 $W_j$ 向当前样本 $x$ 的方向“拉”了一把。
|
||
|
||
- $\eta(t)$ 是随时间衰减的学习率。
|
||
|
||
|
||
### 第五步:迭代与退火
|
||
|
||
- 随着迭代次数 $t$ 的增加,**学习率** $\eta(t)$ 和**邻域半径** $\sigma(t)$ 都会逐渐减小。
|
||
|
||
- **退火效应**:起初,整张网大范围移动(粗调);后期,只有 BMU 及其极少数邻居微调(精调)。
|
||
|
||
- 重复上述步骤,直到达到预设的迭代次数或权重收敛。
|
||
|
||
|
||
---
|
||
|
||
## 3. SOM 算法的精髓
|
||
|
||
### 1. 为什么它能保持拓扑结构?
|
||
|
||
因为在更新时,**邻居是带着一起动的**。
|
||
|
||
如果两个样本 $x_1$ 和 $x_2$ 在高维空间很接近,它们激活的 BMU 也会非常接近。由于邻域更新机制,这两个 BMU 及其周围的权重会趋于相似,最终在地图上形成相邻的区域。
|
||
|
||
### 2. 两个关键的递减过程
|
||
|
||
- **邻域半径递减**:开始时,“牵一发而动全身”,确保全局结构的形成;最后,半径缩到几乎只剩 BMU 自己,确保局部细节的准确。
|
||
|
||
- **学习率递减**:保证算法最终能稳定下来,不会因为最后几个样本的冲击而大幅波动。
|
||
|
||
|
||
---
|
||
|
||
## 4. 结果可视化:U-Matrix
|
||
|
||
训练完 SOM 后,我们怎么看结果?最常用的是 **U-Matrix (Unified Distance Matrix)**:
|
||
|
||
- 它计算每个神经元与其相邻神经元权重之间的距离。
|
||
|
||
- 在图中,颜色较深(距离小)的区域代表这里的神经元非常相似,形成了一个“簇”;
|
||
|
||
- 颜色较浅或有亮色线条(距离大)的区域代表“边界”,即不同类别之间的分水岭。
|
||
|
||
|
||
---
|
||
|
||
## 5. 总结
|
||
|
||
|**阶段**|**动作**|**目的**|
|
||
|---|---|---|
|
||
|**竞争**|找最近的神经元|确定样本在地图上的“归属点”|
|
||
|**协作**|确定受影响的范围|保持空间拓扑连接,不让神经元孤立|
|
||
|**学习**|拉近权重与样本的距离|让网格逐渐“长成”数据的样子|
|
||
|
||
|
||
这三个概念构成了非监督学习中**流形学习(Manifold Learning)**和**降维**的核心逻辑。它们的关系可以看作是从“直线”到“曲线”再到“曲面”的维度与复杂度演进。
|
||
|
||
---
|
||
|
||
## 1. 主成分 (Principal Components, PC)
|
||
|
||
**主成分**是主成分分析(PCA)的产物。它的核心思想是:寻找数据方差最大的方向。
|
||
|
||
- **几何本质**:在 $n$ 维空间中寻找一条**直线**,使得数据点投影到这条直线上的残差平方和最小。
|
||
|
||
- **线性特性**:它是原始变量的线性组合。第一主成分(PC1)解释了数据中最大的波动,第二主成分(PC2)与第一主成分正交,解释次大的波动。
|
||
|
||
- **局限性**:只能处理线性结构。如果数据像一个“S”形或环形分布,直线(主成分)就无法很好地描述它。
|
||
|
||
|
||
### 📌 使用场景:
|
||
|
||
- **高维数据降维**:例如在基因芯片数据中,将几万个基因维度降至 2-3 个主成分,以便在二维图上观察样本聚类情况。
|
||
|
||
- **数据去噪**:保留前几个主成分(代表信号),丢弃后面的主成分(代表随机噪声)。
|
||
|
||
- **图像压缩**:通过保留主要特征向量来重构图像。
|
||
|
||
|
||
---
|
||
|
||
## 2. 主曲线 (Principal Curves)
|
||
|
||
**主曲线**是主成分的非线性推广。
|
||
|
||
- **几何本质**:它是穿过数据分布“中间”的一条**光滑曲线**。数学上定义为:对于曲线上的每一个点,它都是所有投影到该点的数据点的**平均值(自相容性)**。
|
||
|
||
- **核心逻辑**:如果说主成分是一根刚性的钢丝,主曲线就是一根可以根据数据分布弯曲的橡皮筋。
|
||
|
||
- **意义**:它能够捕捉数据中的非线性趋势。
|
||
|
||
|
||
### 📌 使用场景:
|
||
|
||
- **轨迹分析**:在单细胞测序(scRNA-seq)中,细胞的状态转换通常是连续的。研究者使用主曲线来拟合“伪时间轨迹”,模拟细胞从干细胞分化到成熟细胞的路径。
|
||
|
||
- **地理路径重建**:根据大量杂乱的 GPS 坐标点(受误差影响),提取出道路的中心线。
|
||
|
||
- **特征提取**:在手写识别中,提取笔画的核心骨架曲线。
|
||
|
||
|
||
---
|
||
|
||
## 3. 主曲面 (Principal Surfaces)
|
||
|
||
**主曲面**是主曲线在二维或更高维度的扩展。
|
||
|
||
- **几何本质**:一个嵌入在高维空间中的低维**薄膜**。它同样满足自相容性:曲面上的点是投影到其上的所有观测点的质心。
|
||
|
||
- **算法联系**:自组织映射(SOM)在收敛后,本质上就可以看作是一个离散化的主曲面。
|
||
|
||
- **意义**:它认为高维数据实际上分布在一个卷曲的低维“流形”上。
|
||
|
||
|
||
### 📌 使用场景:
|
||
|
||
- **地质建模**:在石油勘探或矿业中,根据离散的采样点拟合地层矿脉的走向曲面。
|
||
|
||
- **复杂系统监控**:例如核电站的各种参数(压力、温度、流量等)虽然有几十个维度,但它们通常受少数几个物理规律制约,数据会分布在一个隐形的主曲面上。一旦数据偏离这个曲面,就预示着系统出现异常。
|
||
|
||
- **心理学/社会科学**:将复杂的调查问卷结果投影到二维主曲面上,观察不同人群的分布模式。
|
||
|
||
|
||
---
|
||
|
||
## 总结对比
|
||
|
||
|**概念**|**几何形式**|**线性/非线性**|**拟合目标**|
|
||
|---|---|---|---|
|
||
|**主成分**|直线 (Line)|**线性**|方差最大化 / 线性重构误差最小|
|
||
|**主曲线**|曲线 (Curve)|**非线性**|穿过数据中心的非线性骨架|
|
||
|**主曲面**|曲面 (Surface)|**非线性**|覆盖数据分布的非线性薄膜|
|
||
|
||
**通俗理解:**
|
||
|
||
想象一团像“香蕉”形状的散点图:
|
||
|
||
1. **主成分**会穿过香蕉中心画一根**直棍子**(拟合得很差)。
|
||
|
||
2. **主曲线**会画一根**弯曲的香蕉芯**(完美描述趋势)。
|
||
|
||
3. **主曲面**如果这是一堆分布在香蕉皮上的点,它会还原出整张**香蕉皮**。
|
||
|
||
|
||
|
||
**非负矩阵分解(Non-negative Matrix Factorization, NMF)** 是线性代数和机器学习中一种非常强大的分解技术。它的核心约束在于:**原始矩阵及分解后的所有矩阵中的元素都必须是非负的($\ge 0$)**。
|
||
|
||
这一约束看似简单,却产生了一个神奇的特性:**“部分构成整体” (Parts-based representation)**。
|
||
|
||
---
|
||
|
||
## 1. 数学定义与公式
|
||
|
||
假设我们有一个原始数据矩阵 $V$,维度为 $m \times n$(例如 $m$ 个特征,$n$ 个样本)。NMF 的目标是找到两个非负矩阵 $W$ 和 $H$,使得它们的乘积近似等于 $V$:
|
||
|
||
$$V \approx W \times H$$
|
||
|
||
- **$V_{m \times n}$**:原始观测矩阵。
|
||
|
||
- **$W_{m \times k}$**:**基矩阵(Basis Matrix)**。它包含了数据的“特征”或“基石”。
|
||
|
||
- **$H_{k \times n}$**:**系数矩阵(Coefficient Matrix)**,也叫权重矩阵。它表示每个样本由哪些基石组合而成。
|
||
|
||
- **$k$**:分解的秩(Rank),通常由用户指定,满足 $k \ll \min(m, n)$,从而达到降维的目的。
|
||
|
||
|
||
### 核心约束:
|
||
|
||
$$W_{ik} \ge 0, \quad H_{kj} \ge 0$$
|
||
|
||
### 求解目标(损失函数):
|
||
|
||
通常通过最小化 **欧氏距离** 或 **KL 散度** 来寻找最优的 $W$ 和 $H$:
|
||
|
||
$$\min_{W,H} \|V - WH\|^2 \quad \text{s.t. } W,H \ge 0$$
|
||
|
||
---
|
||
|
||
## 2. 为什么一定要“非负”?(NMF 的哲学)
|
||
|
||
在 PCA(主成分分析)中,特征向量里存在正负号,这意味着模型通过“相加”和“相减”来重构数据。但在物理世界中,很多东西只有“加”的意义。
|
||
|
||
**NMF 强制只许相加,不许相减**。这意味着:
|
||
|
||
1. **无法抵消**:你不能用一个负的特征去抵消另一个特征。
|
||
|
||
2. **局部特性**:为了组合成整体,基矩阵 $W$ 必须学习到数据的局部特征。
|
||
|
||
|
||
---
|
||
|
||
## 3. 详细举例说明
|
||
|
||
### A. 图像处理:人脸识别(最经典的例子)
|
||
|
||
想象 $V$ 矩阵的每一列是一张人脸照片的像素数据。
|
||
|
||
- **PCA 分解**:得到的基向量看起来像是一张张完整的、模糊的、甚至带有负影的“鬼脸”(特征脸)。
|
||
|
||
- **NMF 分解**:
|
||
|
||
- **基矩阵 $W$**:学习到的是人脸的**局部器官**。第一列可能是一只鼻子,第二列是一对眼睛,第三列是嘴巴。
|
||
|
||
- **系数矩阵 $H$**:记录了某张特定脸是如何由这些器官“拼装”出来的(比如:1份鼻子 + 1份眼睛 + 0.5份嘴巴)。
|
||
|
||
- **结果**:这种分解更符合人类直觉——脸是由器官组成的。
|
||
|
||
|
||
### B. 文本挖掘:主题模型(Topic Modeling)
|
||
|
||
假设 $V$ 矩阵的行是单词,列是文档。$V_{ij}$ 代表单词 $i$ 在文档 $j$ 中出现的频率。
|
||
|
||
- **基矩阵 $W$**:每一列代表一个**主题**。例如,主题 1 包含“芯片、算法、算力”等高权重词;主题 2 包含“法律、诉讼、条款”。
|
||
|
||
- **系数矩阵 $H$**:每一列代表一篇文档。如果文档 A 的第一行数值很高,说明文档 A 主要是关于“技术主题”的。
|
||
|
||
- **优点**:因为非负,所以结果非常容易解释(文档是多个主题的加权和)。
|
||
|
||
|
||
### C. 语音处理:音源分离
|
||
|
||
一段包含吉他、鼓声和人声的混合音频信号。
|
||
|
||
- **$V$**:音频的频谱图。
|
||
|
||
- **$W$**:可以学习到不同乐器的特征频谱模式。
|
||
|
||
- **$H$**:代表这些乐器在不同时间点出现的强度。
|
||
|
||
- 通过 NMF,我们可以把混合在一起的声音拆解成独立的声轨。
|
||
|
||
|
||
---
|
||
|
||
## 4. NMF 的算法实现过程
|
||
|
||
NMF 是一个非凸优化问题,通常使用 **乘性更新规则 (Multiplicative Update Rules)**:
|
||
|
||
1. **随机初始化** $W$ 和 $H$ 为非负值。
|
||
|
||
2. **固定 $W$ 更新 $H$**:通过 $H \leftarrow H \cdot \frac{W^T V}{W^T W H}$(点乘和点除)。
|
||
|
||
3. **固定 $H$ 更新 $W$**:通过 $W \leftarrow W \cdot \frac{V H^T}{W H H^T}$。
|
||
|
||
4. **重复迭代**,直到结果收敛。
|
||
|
||
|
||
---
|
||
|
||
## 总结
|
||
|
||
|**特性**|**描述**|
|
||
|---|---|
|
||
|**核心约束**|所有元素 $\ge 0$|
|
||
|**物理意义**|部分构成整体(无抵消效应)|
|
||
|**主要功能**|降维、特征提取、聚类($H$ 矩阵可视为软聚类结果)|
|
||
|**弱点**|只有局部最优解;对 $k$ 的选择敏感|
|
||
|
||
|
||
别担心,这部分内容确实是机器学习中最“玄学”也最数学化的领域,因为它们都在试图解决一个终极问题:**如何从一堆乱七八糟的高维数据中,把最本质、最干净的信息“抠”出来。**
|
||
|
||
我们不需要钻进复杂的公式,先用直观的逻辑把它们梳理通。
|
||
|
||
---
|
||
|
||
## 1. 独立成分分析 (ICA, Independent Component Analysis)
|
||
|
||
**直观理解:鸡尾酒会效应。**
|
||
|
||
想象你在一个嘈杂的酒会上,有三个人同时说话,现场放了三个麦克风录音。每个麦克风录到的都是三个声音的混合。ICA 的目标就是通过这三段混合音频,把三个独立的声源完全还原出来。
|
||
|
||
- **核心逻辑**:它寻找的是比“正交”(PCA 的要求)更强的条件——**统计独立**。它假设原始信号是非高斯的,通过最大化非高斯性来分离信号。
|
||
|
||
- **应用**:脑电图(EEG)信号去噪(分离脑电和眼动伪迹)、金融市场独立因素挖掘。
|
||
|
||
|
||
---
|
||
|
||
## 2. 探索投影寻踪 (EPP, Exploratory Projection Pursuit)
|
||
|
||
**直观理解:寻找“最有意思”的观察视角。**
|
||
|
||
如果你从正面看一个球,它是个圆;从侧面看一个圆柱,它是个矩形。有些视角看到的数据分布很平庸(像正态分布),有些视角能看到明显的聚类或结构。
|
||
|
||
- **核心逻辑**:它不是盲目降维,而是定义一个“投影指数”(Index),用来衡量某种分布有多“有趣”。算法会自动旋转坐标系,直到找到那个能让你一眼看出数据内部结构的“神仙视角”。
|
||
|
||
- **应用**:高维数据的探索性空间分析。
|
||
|
||
|
||
---
|
||
|
||
## 3. 多维缩放 (MDS, Multidimensional Scaling)
|
||
|
||
**直观理解:根据“距离表”还原“地图”。**
|
||
|
||
假设我只给你一张表格,上面写着中国各个城市之间的**飞行距离**(比如北京到上海 1000km),但我没给你地图。MDS 的任务就是根据这些距离,在二维平面上把这些点画出来,使得点与点之间的图面距离尽可能等于你给我的实际距离。
|
||
|
||
- **核心逻辑**:**保持距离不变**。它认为只要点与点之间的相对距离保住了,数据的整体结构就保住了。
|
||
|
||
- **应用**:市场调研(分析消费者心中不同品牌的相似度)、社交网络分析。
|
||
|
||
|
||
## 4. 非线性降维 (Nonlinear Dimensionality Reduction)
|
||
|
||
这是一个大类,主要解决“瑞士卷”(Swiss Roll)问题。
|
||
|
||
想象一张卷起来的草席,在三维空间看,卷心和卷皮离得很近;但如果你把草席铺平,它们其实离得很远。
|
||
- **核心逻辑**:传统的 PCA 是直来直去的线性投影,会把卷在一起的数据“压扁”。非线性降维(如 **Isomap** 或 **LLE**)会顺着草席的纹理去测量距离(测地线距离),然后把它平展开。
|
||
- **应用**:图像流形学习、复杂物理系统建模。
|
||
|
||
## 5. 局部多维缩放 (Local MDS)
|
||
|
||
**直观理解:只管邻居,不管远亲。**
|
||
|
||
它是对普通 MDS 的优化。传统的 MDS 试图让**所有**点对之间的距离都精确,这在处理弯曲的数据(流形)时很痛苦。
|
||
- **核心逻辑**:它只要求**局部距离**(离得近的点)保持一致。只要每个小局部都对齐了,整体的非线性形状(比如那个“卷儿”)就能在降维后被拉平,而不会发生严重的畸变。
|
||
- **关系**:它其实是连接 MDS 与非线性降维(如 Isomap)的桥梁。
|
||
|
||
### 💡 快速总结对比表
|
||
|
||
|**算法**|**核心目标**|**绝活**|
|
||
|---|---|---|
|
||
|**ICA**|独立性|盲源分离(把混合的声音拆开)|
|
||
|**EPP**|有趣性|自动找最能看出规律的投影角度|
|
||
|**MDS**|距离保持|只有距离数据也能画出分布图|
|
||
|**非线性降维**|拓扑保持|把卷曲的数据“拉平”而不损坏结构|
|
||
|**Local MDS**|局部距离|专注于保持近邻关系,应对弯曲分布|
|