Files
Notes/【笔记origin】ESL/13 origin.md
2026-05-16 17:16:51 +08:00

176 lines
8.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第十三章
在统计学习和机器学习中,**原型方法Prototype Methods** 是一类基于“代表性样本”进行分类或回归的算法。
简单来说,它的核心思想是:**与其记住所有的训练数据,不如选出(或计算出)一组具有代表性的“原型”来概括数据的特征。** 当新样本出现时,通过比较它与这些原型的相似度来进行决策。
---
### 1. 原型方法的核心逻辑
在传统的 $k$-最近邻($k$-NN算法中我们需要存储所有训练样本这被称为“基于记忆的学习”。而原型方法是对其的优化它试图找到一组数量更少的点原型并满足
- **压缩性:** 原型的数量远小于原始数据集的大小。
- **代表性:** 原型能够刻画数据在空间中的分布和边界。
当判定一个新样本 $x$ 的类别时,系统会计算 $x$ 到各个原型的距离(通常是欧氏距离),将其归类为距离最近的原型所属的类别。
---
### 2. 常见的具体算法
原型方法并不是一个单一的算法,而是一类方法的统称:
#### K-均值聚类 (K-Means Clustering)
- **原理:** 虽然通常被视为无监督学习,但 K-Means 是典型的原型方法。每个簇的质心Centroid就是该簇的原型。
- **作用:** 用 $K$ 个点来代表成千上万个数据点。
#### 学习向量量化 (Learning Vector Quantization, LVQ)
- **原理:** 这是一种有监督的原型方法。它在空间中初始化一组原型点,并根据分类标签不断调整这些点的位置。
- **逻辑:** 如果一个原型正确预测了样本,就让它向样本靠近;如果预测错误,就让它远离样本。最终,原型点会停留在各类别最理想的中心位置。
#### 质心分类器 (Nearest Centroid Classifier)
- **原理:** 计算每个类别的平均值作为该类的唯一原型。
- **应用:** 常用于文本分类或基因表达谱分析,虽然简单,但在高维稀疏数据中表现出奇地好。
#### 原型聚类 (Prototype-based Clustering)
-**K-Medoids**,它要求原型必须是原始数据集中的某一个真实样本点,而不是像 K-Means 那样计算出的虚拟平均值。
---
### 3. 原型方法是干什么的?(主要用途)
1. **数据压缩:** 减少存储需求。对于嵌入式设备或实时系统,存储几百万个点不现实,但存储 100 个原型非常轻松。
2. **降噪:** 原始数据可能包含异常值。通过计算原型(如取平均),可以抵消掉个别噪声点的干扰。
3. **提高预测速度:** 相比 $k$-NN 需要扫描整个数据库,原型方法只需对比极少数的原型,推理延迟极低。
4. **可解释性:** 我们可以直接观察原型。例如,“这个病人被诊断为感冒,是因为他的症状原型与典型的感冒病例最接近。”
---
### 4. 具体应用场景
- **计算机视觉OCR** 在手写数字识别中,可以为数字 "0-9" 每一个数字提取出几个“标准字体”作为原型。
- **异常检测:** 在工业监控中,建立“正常运行状态”的原型。如果新数据与这些原型的距离超过阈值,则触发报警。
- **生物信息学:** 用于蛋白质序列分类或基因功能预测,通过寻找同一家族序列的“共性原型”来简化计算。
- **自然语言处理:** 在词向量Word Embeddings空间中通过原型来表示某种语义中心如“水果”类的中心
---
### 总结
**原型方法**就像是给数据找“典型代表”。它在**计算效率**和**模型复杂性**之间做了一个很好的平衡。如果你追求极致的预测速度,或者设备内存受限,原型方法(尤其是 LVQ通常是比全量 $k$-NN 更好的选择。
在原型方法Prototype Methods的框架下这些算法的核心差异在于**原型是如何生成的**以及**如何利用这些原型进行决策**。
以下是针对这几种方法的详细解析:
---
### 1. K-最邻近分类器 (k-Nearest Neighbors, k-NN)
虽然 k-NN 常被视为原型方法的对立面(它是“基于记忆”的),但从广义上讲,它将**每一个训练样本都视为一个原型**。
- **使用方式:**
- **存储阶段:** 几乎不做任何计算,直接将所有训练样本(特征向量和标签)存入内存。
- **预测阶段:** 计算待测样本与库中所有样本的距离。选取距离最近的 $k$ 个点,通过“投票法”(分类)或“平均值法”(回归)得出结果。
- **优缺点:** 逻辑极简,不需要假设数据分布;但当数据量巨大时,查询速度极慢(即“维度灾难”),且对噪声非常敏感。
### 2. K-均值聚类 (K-Means Clustering)
这是无监督学习中最著名的原型方法,它的原型是**质心Centroids**。
- **使用方式:**
1. **初始化:** 随机选择 $K$ 个点作为初始质心。
2. **分配:** 将每个数据点分配给距离其最近的质心,形成 $K$ 个簇。
3. **更新:** 重新计算每个簇内所有点的平均值,将该平均值设为新的质心(即新的原型)。
4. **迭代:** 重复上述步骤直到质心不再变化。
- **原型意义:** 最终的 $K$ 个质心就是该数据集的“压缩版”。在很多工程应用中,我们会用这 $K$ 个质心来代替原始的成千上万个点进行后续处理。
### 3. 学习向量量化 (Learning Vector Quantization, LVQ)
这是一种**自适应**的有监督原型方法,通常被认为是在有标签数据下改进 K-Means 的手段。
- **使用方式:**
1. **预设原型:** 在每一类数据中预设若干个原型点(位置可以是随机的或用 K-Means 初始化的)。
2. **在线学习(自适应):** 每次输入一个带标签的样本 $x$。
3. **竞争:** 找到离 $x$ 最近的原型 $W$。
4. **调整:**
- 如果 $W$ 的标签与 $x$ 一致:$W$ 向 $x$ 方向移动(学习特征)。
- 如果 $W$ 的标签与 $x$ 不一致:$W$ 向远离 $x$ 的方向推开(强化边界)。
- **特点:** 它通过不断“微调”原型的位置,使得原型能够精准地捕捉类别的判定边界。
### 4. 其他常见的原型方法
#### A. K-中心点 (K-Medoids)
- **差异:** K-Means 的原型是计算出来的“平均值”(可能在现实中不存在),而 K-Medoids 要求原型**必须是原始数据中的某个真实样本**。
- **使用方式:** 寻找一个样本点使得簇内其他点到它的总距离最小。这在处理非数值型数据如地理位置、社交关系时非常有效且对异常点Outliers的鲁棒性比 K-Means 强。
#### B. 缩减最近邻法 (Reduced Nearest Neighbor, RNN)
- **使用方式:** 这是一种对 k-NN 的“瘦身”方案。它从原始训练集中不断删除那些“删掉也不影响分类准确率”的样本。
- **目的:** 最终留下的样本就是支撑分类边界的关键原型。这大大降低了 k-NN 的存储和计算开销。
#### C. 高斯混合模型 (Gaussian Mixture Models, GMM)
- **使用方式:** 它可以看作是 K-Means 的概率版。它的原型不再是一个孤立的点,而是一个**概率分布(均值和方差)**。
- **逻辑:** 它假设数据是由多个高斯分布组合而成的,通过 EM 算法学习每个分布的参数。
---
### 总结对比
|**方法**|**原型性质**|**是否有监督**|**核心用途**|
|---|---|---|---|
|**k-NN**|每一个原始样本点|有监督|基准分类、回归|
|**K-Means**|簇的质心(虚拟点)|无监督|数据压缩、聚类分析|
|**LVQ**|调整后的分类代表点|有监督|高效分类、边界学习|
|**K-Medoids**|簇中最具代表的真实样本|无监督|鲁棒聚类、非欧几里得空间|
在你的 C++ 或 Rust 开发实践中,如果你需要处理高性能的实时判别(比如你提到的 HIS 系统或健康监测),**LVQ** 或 **经过压缩的 k-NN** 通常比纯 k-NN 更有优势,因为它们能极大地减少 CPU 在推理时的计算负担。