# 第十四章 机器学习(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**|局部距离|专注于保持近邻关系,应对弯曲分布|