机器学习与模式识别第一阶段笔记
人工智能是目的 机器学习是方法
遍历是人工智能 但不是机器学习
机器学习的方法有回归
Engineeringproblem有确切答案的
MLProblems用于解决用演示而非匹配的问题(没有确切的答案,只有概率)
Humanproblem 哲学伦理问题
学习的类别:
监督学习(需要例子,(X,Y)) 非监督学习(不需要例子(X)) 强化学习(需要奖励X,reward())
监督学习包括 分类(离散) 回归 输入是过去历史,输出是未来预测(连续)
无监督学习包括 聚类和密度估计() 降维(图片压缩)
强化学习 见本人其他文章 输出连续过程
四个核心问题:
什么时候要用机器学习
如何建模一个机器学习问题
如何设计、训练模型
如何评价一个模型
Greater Focus on ML Engineering
Tools for ML:
-
pandas (https://pandas.pydata.org/)
→ For data manipulation and analysis. -
Plotly (https://plotly.com/) and Matplotlib (https://matplotlib.org/)
→ For data visualization. -
Scikit-learn (https://scikit-learn.org/stable/)
→ For classic machine learning tasks (e.g., classification, regression, clustering). -
PyTorch (https://pytorch.org/) and Hugging Face (https://huggingface.co/)
→ For neural network development and NLP model deployment. -
Weights and Biases (W&B) (https://wandb.ai/site)
→ For experiment tracking, visualization, and model management.

出勤10% 实验报告30%(32课时 每周周二) 期末考试60%
归纳偏置
归纳偏置(Inductive Bias)是机器学习中的一个核心概念,指的是学习算法在面对有限训练数据时,为了能够对未见过的输入做出合理预测而引入的一组先验假设或偏好。这些假设并非来自训练数据本身,而是由模型结构、优化方式或人为设计所隐含地嵌入到学习过程中。
简单来说,如果没有归纳偏置,那么在给定有限训练样本的情况下,存在无限多个函数都能完美拟合这些数据,但它们在新数据上的表现可能截然不同。因此,归纳偏置的作用就是从这无限多的可能性中“挑选”出一个更合理的解,从而实现有效的泛化。
1.我们想预测什么?
2.我们有哪些数据?
3.我们如何判断成功?
特征处理:选择特征,编码特征(将我们的特征转换为机器能理解的)

数值特征


词袋模型编码(Bag-of-Words, BoW)和字向量编码
词袋模型编码(Bag-of-Words, BoW)和字向量编码(Word Embedding,如 Word2Vec、GloVe 等)是自然语言处理(NLP)中两种典型的文本表示方法。它们的目标都是将人类语言转换为计算机可处理的数值形式,但原理、表达能力和适用场景有显著差异。
一、词袋模型编码(Bag-of-Words, BoW)
✅ 是什么?
词袋模型是一种基于词频统计的文本向量化方法。其核心思想是:
- 忽略词语的顺序、语法和上下文;
- 将文本视为一个“词的集合”(即“袋子”);
- 用每个词在文本中出现的次数(或是否出现)构成一个高维向量。
示例:
语料库:
- 文档1: "I love AI"
- 文档2: "AI is great"
词汇表(按字母排序):["AI", "I", "great", "is", "love"]
向量表示:
- 文档1 → [1, 1, 0, 0, 1]
- 文档2 → [1, 0, 1, 1, 0]
可进一步使用 TF-IDF 加权替代原始词频。
❌ 主要缺点:
| 缺点 | 说明 |
|---|---|
| 忽略词序与语法 | “狗咬人” 和 “人咬狗” 被表示为相同向量,语义完全颠倒却无法区分。 |
| 无法捕捉语义相似性 | “汽车” 和 “轿车” 在向量空间中毫无关联;“喜欢” 和 “喜爱” 被视为不同词。 |
| 维度灾难 | 词汇表可能包含数万甚至百万词,导致向量极度稀疏(大部分为0),计算和存储开销大。 |
| 数据稀疏性 | 大多数文档只包含词汇表的一小部分,造成大量零值,影响模型性能。 |
| 对同义/多义词无能为力 | 无法处理“苹果”(水果 vs 品牌)等多义现象。 |
📌 适用于简单任务(如垃圾邮件分类、关键词提取),但难以胜任需要语义理解的任务(如问答、机器翻译)。
二、字向量编码(Word Embedding)
✅ 是什么?
字向量编码是一种将词语映射到低维稠密实数向量空间的技术。每个词被表示为一个固定长度的向量(如 100~300 维),向量之间的几何关系反映语义或语法相似性。
常见方法:
- Word2Vec(Google, 2013):通过预测上下文(Skip-gram)或根据上下文预测中心词(CBOW)学习向量。
- GloVe(Stanford, 2014):基于全局词共现矩阵进行矩阵分解。
- FastText:考虑子词(subword)信息,可处理未登录词。
示例(理想情况):
vec("king") - vec("man") + vec("woman") ≈ vec("queen")cosine_similarity(vec("car"), vec("automobile"))很高
向量是稠密(dense)、低维、语义丰富的。
❌ 字向量编码的局限性:
| 局限 | 说明 |
|---|---|
| 静态表示(Static Embedding) | 每个词只有一个固定向量,无法处理多义词(如“bank”在“river bank”和“investment bank”中含义不同)。 |
| 依赖大规模语料训练 | 小领域或专业术语若未出现在训练语料中,效果差。 |
| 无法直接表示句子/文档 | 需额外方法(如平均、加权、LSTM)组合词向量得到句向量。 |
| 训练成本较高 | 虽然推理快,但预训练需大量计算资源。 |
⚠️ 注:这些问题在上下文感知的动态嵌入(如 BERT、RoBERTa)中已大幅改善,但 Word2Vec/GloVe 仍属“静态嵌入”。
三、对比总结
| 特性 | 词袋模型(BoW) | 字向量编码(Word Embedding) |
|---|---|---|
| 是否保留词序 | ❌ 否 | ❌(静态) / ✅(动态如 BERT) |
| 向量维度 | 高维(=词汇表大小) | 低维(50–300) |
| 向量稀疏性 | 极度稀疏 | 稠密 |
| 语义捕捉能力 | 无 | 强(可反映类比、相似性) |
| 多义词处理 | 不能 | 静态:不能;动态:可以 |
| 计算效率 | 训练快,但特征多 | 训练慢,推理快 |
| 典型应用 | 文本分类基线、TF-IDF | 语义搜索、推荐系统、迁移学习 |
✅ 结论
- 词袋模型:简单、直观、高效,适合入门和轻量级任务,但缺乏语义理解能力。
- 字向量编码:能捕捉词语间的语义和语法关系,是现代 NLP 的基石,但需注意其静态性局限。
在实际项目中,常以词袋或 TF-IDF 作为基线模型,再用 Word2Vec/BERT 等提升性能。随着技术发展,上下文动态嵌入(如 BERT) 已成为主流,但理解 BoW 和 Word Embedding 仍是掌握 NLP 基础的关键。
图像的编码

从特征到输出的映射

机器学习的本质是“函数近似”:
我们选择一个模型族(如神经网络),它定义了一类函数 gw2gw2 ;
这个模型族通过其归纳偏置限制了搜索空间(即假设空间),并决定了能表示的函数复杂度;
然后通过训练算法,在这个假设空间中寻找最优的函数 gw2gw2 ,使其尽可能准确地将输入特征映射到输出。

经过两个点有若干种拟合方式,不同的拟合方式有不同的预测值,也决定了不同的复杂度。
选择不同的分割线/拟合线就是决定使用什么样的归纳偏置!
Featurlization的时候也会引入归纳偏置,比如用词袋编码的时候,偏置就是词序无关!以及单词词义独立。
复杂性
太高复杂性会过拟合
怎么办?
正则化

逻辑回归族
优化
找最好参数的过程
迭代式的优化算法——【却公式】

Reg是正则化惩罚,防止参数过多
超参数
普通参数可以被学习
超参数不可以学习,冻结
过拟合的时候,训练集的效果很好,但是在验证集上很差,泛化性垃圾。
预测
训练好后预测结果


聚类
超参选择:肘部法则
聚类可以知道是哪一类,但是不能知道这一类是什么
密度估计和高斯混合模型
目的:根据样本拟合出一个分布,要确定一个分布,就要确定其超参数,比如μ。
如何求,就需要先建模,再优化
期望和方差
MLE MAP 极大似然估计
选用ln的好处:
稳定:多个0.01在ln后不会趋于零,可以将乘法化为假发,和原函数同方向,求导的极值点和原函数一致
建模 —— 写出对数似然式子

这一步的目标是根据我们的模型假设和数据,写出“似然函数”(Likelihood Function)。这个函数量化了在给定参数 μ 的情况下,我们观测到当前这组数据的可能性有多大。
选择一个归纳偏置:比如选择伯努利分布
E[x]=u
var[x]=u(1-u)


优化 —— 求导得到极值点
这一步的目标是找到一个 μ 值,使得我们在 Part 1 中得到的对数似然函数的值最大。这个 μ 就是我们的 MLE 估计值,记作 μML 。






衡量——期望下的值和真实下的值
- 问题:我们的估计值 θMLθML 在期望意义上离真实参数 θθ 有多近?
- 关键点:在观测数据之前,估计量 θMLθML 是一个随机变量(因为它依赖于随机抽样的数据)。
- 偏差公式:
Bias(θML)=E[θML]−θ
- 如果 E[θML]=θ,则称该估计量是无偏的(Unbiased)。
- 否则就是有偏的(Biased)。


高斯混合模型
解决重叠部分的分类,输出所属概率,还可以输出高斯分布的特征值


- GMM 成功识别出数据中的 4 个自然簇。
- 每个簇由一个高斯分布建模,形状可以是任意方向和大小的椭圆(因为用了完整的协方差矩阵)。
- 这比 K-Means 更灵活 —— K-Means 只能发现球形簇,而 GMM 可以适应拉伸、旋转的簇。
| 特性 | K-Means | GMM |
|---|---|---|
| 聚类类型 | 硬聚类(每个点属一个簇) | 软聚类(每个点有多个归属概率) |
| 距离度量 | 欧氏距离 | 基于概率密度 |
| 簇形状 | 球形 | 任意椭圆(可拉伸、旋转) |
| 输出 | 标签 | 标签 + 归属概率 |
| 优化目标 | 最小化簇内平方误差 | 最大化似然函数 |
| 算法 | EM 或 Lloyd’s algorithm | EM 算法 |
| 特性 | K-Means (K-均值) | GMM (高斯混合模型) |
|---|---|---|
| 输出类别 | 硬分配 (Hard Assignment) 每个点只能属于一个类别。 输出: 标签 = 2 |
软分配 (Soft Assignment) 每个点属于所有类别的概率。 输出: [P(类1)=0.1, P(类2)=0.85, P(类3)=0.05] |
| 最终判定 | 直接告诉你:“你是第 2 类。” | 你可以选概率最大的作为类别(“你最可能是第 2 类”),但你同时也知道了不确定性。 |
| 类别形状 | 球形 (Spherical) 假设簇是圆形的,基于距离质心的远近。 |
椭圆形 (Elliptical) 每个类别有自己的形状、大小和方向(协方差矩阵)。 |
| 数学本质 | 几何距离最小化 | 概率密度最大化 |
-
情况 A:它能否告诉我不确定性?
- K-Means:不能。它不给任何置信度。
- GMM:能!这就是它的杀手锏。它能告诉你“这个点属于某类的可能性有多大”。这对于处理重叠区域的数据非常重要。
-
情况 B:它能否描述类别的特征(形状)?
- K-Means:只能告诉你类别的中心点(质心)。它假设所有类别都是大小一样的圆球。
- GMM:能告诉你类别的完整分布特征!
- 中心在哪里 ( μμ )
- 有多散/多大 ( σ2σ2 或 协方差矩阵)
- 是什么形状/方向 (椭圆是扁的还是长的?是斜着的还是正的?)
- 占比多少 ( πkπk )
🍬 核心故事:神秘糖果工厂
想象有一个神秘的糖果工厂,它每天生产成千上万颗混合口味的糖果。
1. 什么是 xx ?(观测变量 / Observed Variable)
xx 就是你手里拿到的那一颗具体的糖果。
- 你能直接看到、尝到它的特征。
- 比如:它的重量是 5.2 克,甜度是 8.5,颜色是红色。
- 在数学上, xx 就是数据点(比如图表上的一个点)。
- 关键点: xx 是已知的,是你眼睛能看到的。
2. 什么是 zz ?(隐含变量 / Latent Variable)
zz 是这颗糖果在生产线上的“真实身份标签”,但这个标签在包装时被撕掉了!
- 工厂里有三条不同的生产线(对应 3 个高斯成分):
- 生产线 1 ( z=1z=1 ):专门生产“草莓味”糖果(又红又甜)。
- 生产线 2 ( z=2z=2 ):专门生产“柠檬味”糖果(又黄又酸)。
- 生产线 3 ( z=3z=3 ):专门生产“巧克力味”糖果(又黑又苦)。
- 当一颗糖果被生产出来时,它一定是来自某一条特定的生产线。这个“来自哪条线”的事实,就是 zz 。
- 关键点: zz 是未知的(隐含的),因为你拿到糖果时,看不到它的生产记录。你只能通过它的味道和颜色( xx )去猜它来自哪条线。
🏭 “两阶段生成过程”是什么意思?
这句话描述的是工厂生产糖果的流程(也就是数据是怎么来的):
第一阶段:掷骰子决定身份 ( zz )
- 厂长先掷一个特制的骰子(混合权重 ππ ):
- 50% 的概率掷出“草莓线” ( z=1z=1 )
- 30% 的概率掷出“柠檬线” ( z=2z=2 )
- 20% 的概率掷出“巧克力线” ( z=3z=3 )
- 假设这次掷出了 z=1z=1 (草莓线)。
- 此时, zz 确定了,但你还没看到糖果。
第二阶段:根据身份生产糖果 ( xx )
- 机器接到指令“启动草莓线”,于是按照草莓线的标准(高斯分布参数 μ1,Σ1μ1,Σ1 )生产了一颗糖果。
- 草莓线的标准是:平均重量 5g,甜度 8,颜色偏红。但机器会有误差,所以生产出来的糖果具体是:重量 5.2g,甜度 8.5,颜色红。
- 这颗具体的糖果就是 xx 。
结果:你得到了一颗糖果 xx ,但你不知道刚才骰子掷出的是 z=1z=1 。那个 zz 就变成了隐含变量。
🕵️ GMM 是干嘛的?(侦探游戏)
现在,你面前有一大堆没有标签的糖果(只有 xx ,没有 zz )。
GMM 就是一个侦探,它的任务是:
- 观察:看这一大堆糖果的重量、甜度分布(观测数据 xx )。
- 推测:
- “嗯,这堆糖果里明显有两群:一群又红又甜,一群又黄又酸。”
- “我猜背后一定有两条生产线( K=2K=2 )。”
- “对于手里这颗重量 5.2、甜度 8.5 的糖果,它85% 可能来自草莓线 ( z=1z=1 ),15% 可能来自柠檬线 ( z=2z=2 )。”
- 还原:
- 估算出每条生产线的特征(均值 μμ 、方差 ΣΣ )。
- 估算出厂长掷骰子的概率(权重 ππ )。
- 给每颗糖果补发一个最可能的身份标签(推断 zz )。
EM算法
🎯 总结这三张幻灯片的逻辑链:
| 步骤 | 问题 | 解决方案 |
|---|---|---|
| 1️⃣ | 我们想知道每颗糖属于哪条线( zz ) | 用贝叶斯公式算后验 $ p(z |
| 2️⃣ | 我们想学参数 (π,μ,Σ)(π,μ,Σ) | 直接优化太难(log-sum 耦合)→ 引入 zz 简化 |
| 3️⃣ | 但我们不知道 zz ! | 形成循环依赖 → 用 EM 算法迭代求解 |
核心矛盾:
1如果你知道参数 → 你能算出 cluster assignments (z)
2如果你知道 cluster assignments (z) → 你能估算参数
解决思路:迭代法(EM 算法)
既然不能同时解决,那就交替进行:
-
E-step(Expectation):
假设当前参数已知 → 计算每个点属于每个簇的后验概率 p(zn=k∣xn)p(zn=k∣xn)
(相当于给每颗糖果分配一个“软标签”) -
M-step(Maximization):
假设当前“软标签”已知 → 用加权最大似然更新参数 (πk,μk,Σk)(πk,μk,Σk)
(相当于根据“谁更像草莓”,重新调整草莓线的配方) -
重复直到收敛
| 对比维度 | GPL(GNU General Public License) | 传统商业软件授权协议 |
|---|---|---|
| 版权归属 | 软件源代码属于开源社区,允许自由使用、修改和分发 | 版权归公司所有,禁止随意复制、修改或再分发 |
| 是否开放源码 | ✅ 必须公开源代码 | ❌ 源码通常不公开(闭源) |
| 使用限制 | 可免费使用,但衍生作品也必须采用 GPL 发布 | 使用需付费,且常有限制(如不能商用、不能反编译等) |
| 分发方式 | 允许自由传播,只要遵守 GPL 条款 | 通常通过购买许可证获得使用权 |
| 修改权限 | 允许修改并重新发布,但新版本也必须开源 | 一般不允许修改,除非获得特别许可 |
有监督学习
线性回归
不同的基函数代表不同的归纳偏置
基函数
向量化计算
正则化最小二乘
更多推荐




所有评论(0)