目录
[🧠1、 生活化比喻](#🧠1、 生活化比喻)
[🚗 2、对应到驾驶](#🚗 2、对应到驾驶)
[🧠1、 生活化比喻](#🧠1、 生活化比喻)
[🚗 2、对应到驾驶](#🚗 2、对应到驾驶)
[🟩 1、DP(Dirichlet Process)是什么?](#🟩 1、DP(Dirichlet Process)是什么?)
[通俗解释 DP](#通俗解释 DP)
[🟩 3、HDP 是什么?(生活化解释)](#🟩 3、HDP 是什么?(生活化解释))
[① 全局菜单 G₀(所有人共享)](#① 全局菜单 G₀(所有人共享))
[② 每个人自己的菜单 Gᵢ(每位驾驶员的风格)](#② 每个人自己的菜单 Gᵢ(每位驾驶员的风格))
一、隐马尔可夫模型(HMM)
系统在不同"隐藏状态"之间转换,每个状态产生可观察数据。
🧠1、 生活化比喻
假设你隔着门听一个人在屋里运动,你只能听到声音,但看不到动作。
屋里可能有三种"动作状态":
-
跑步
-
走路
-
静止
这些动作看不见 → 隐藏状态(Hidden State)
你能听到什么?
-
跑步 = "哒哒哒"
-
走路 = "踏...踏..."
-
静止 = "无声"
这些声音就是 观测值(Observation)。
并且:
-
如果他现在在跑,很可能下一秒仍然在跑(状态会延续)
-
但也可能切换到走路状态
所以 HMM 就是:
"一个你看不到的状态序列,在背后支配你能观察到的数据。"
🚗 2、对应到驾驶
隐藏状态 = 驾驶 primitive(比如 closing-in、keeping、falling-behind)
可观测数据 = 车距、相对速度、加速度
你看不到驾驶员的"心理状态",但能看到车的行为。
HMM 就是把"行为序列"分解成若干隐藏的"动作块"。
二、隐半马尔可夫模型(HSMM)
👉 核心:每个隐藏状态有"持续时间"。
HMM 有个很不现实的问题:
默认每一帧都有可能切状态。也就是说"一个动作只能持续一帧"。
这非常不符合驾驶、人类行为等现实情况。
🧠1、 生活化比喻
HMM 认为:
- 跑步 → 下秒可能马上走路 → 再下一秒马上静止
但真实情况是:
-
跑步至少要持续几秒
-
走路也不会 0.1 秒就换一次状态
所以 HSMM 做了一个改进:
每个状态不仅有"状态名",还有"持续时间"。
比如:跑步持续 8 秒 → 走路持续 5 秒 → 静止 12 秒。
🚗 2、对应到驾驶
驾驶中一个 primitive(例如 closing in)通常持续 3~10 秒。HSMM 能真正刻画这种"阶段性行为"。
三、层次狄利克雷过程(HDP)
当你有多个序列(多个驾驶员、多段数据)要共享模式,又不想提前设定"有几个模式",HDP 就是完美方案。
🟩 1、DP(Dirichlet Process)是什么?
🔍 场景:你要做"模式发现"
比如你想发现:
-
某驾驶员有多少个 driving primitives?
-
每个 primitive 的位置/速度/加速度特征是什么?
-
primitive 数量未知且理论上可能无限
常规聚类(K-means、GMM)有个缺陷:
必须提前指定 K(类别数)。
但你不知道驾驶员到底有 5 种、10 种,还是 18 种 primitive。
于是 DP 出场了。
通俗解释 DP
想象:
-
有一家餐厅,桌子无限多(= 模式数量无限)。
-
第一个客人坐第一桌。
-
第二个客人选择:
-
坐已有桌子(概率 ∝ 已有人的数量)
-
开一张新桌子(概率 ∝ 超参数 α)
-
结果就是:
-
你不需要设定桌子数量(模式数量)
-
由数据自动决定到底用了多少桌子(primitive 数)
也就是说:
DP 可以从"无限多模式"中自动选择实际需要的模式数量。

DP 的本质是一个"生成式过程(generative process)"。
它规定:
数据是这样产生的:
先从一个"类别分布 G"中抽取一个类别,再生成数据。而 G 自己来自一个 DP。
G ~ DP(α, H)
θ_n ~ G
x_n ~ F(θ_n)
-
G 是一个无限类别的菜单(由 DP 生成)
-
θₙ 是该数据点选了哪道菜(类别)
-
xₙ 是该类别生成的数据
DP 就是一个让"类别数量可以自动生长"的聚类机制。
当旧类别够用,就继续用旧的;当旧类别不能解释新数据,就新开一个。
🟩 3、HDP 是什么?(生活化解释)
把 HDP 想象成一个"两层结构的无限菜单系统"。
① 全局菜单 G₀(所有人共享)
G₀ 是一个"无限的菜品列表",比如:
菜1:炒饭
菜2:烤串
菜3:拉面
菜4:寿司
菜5:披萨
... 无限多
你不需要决定"这个菜单里有多少个菜",
HDP 会自己决定实际上用到哪些菜。
这就是"Dirichlet Process(DP)"的作用。
② 每个人自己的菜单 Gᵢ(每位驾驶员的风格)
虽然大家共享同一个"无限菜库",
但每个人的"点菜偏好"不同。
比如:
-
驾驶员 A 喜欢"保持车距 + 温和加速"
-
驾驶员 B 喜欢"激进接近 + 急刹"
-
驾驶员 C 喜欢"巡航 + 偶尔跟车"
HDP 让每个人的 Gᵢ:
-
从全局 G₀ 中抽取
-
但抽到的权重不同(体现不同驾驶风格)
🟧 所以 HDP =(全体共享 + 个体偏好) + 无限可能类别
你可以理解成:
全体驾驶员共享同一套 primitive(驾驶模式),
但每位驾驶员使用这些 primitive 的频率不同。
这就是 HDP 的本质。
🟥 HDP 为什么如此重要?(特别在驾驶行为分析里)
驾驶行为模式本身具有三个特征:
✔(1)模式数量未知
我们不知道有几种 primitive:
-
是 3 个?(closing / keeping / falling)
-
是 10 个?(不同程度的加速/刹车)
-
是 20 个?(微观变化更多)
✔(2)不同驾驶员使用的模式不同
激进驾驶员 vs 温和驾驶员
→ 使用 primitive 的比例不同
✔(3)多个驾驶员应该共享同一套 primitive
否则你没法比较风格、没法聚类驾驶员。
| HDP 结构 | 驾驶行为意义 |
|---|---|
| G₀ = 全局 primitive 集合 | 所有驾驶员共享的行为模式 |
| Gᵢ = 个体 primitive 分布 | 该驾驶员偏好的行为风格 |
| 模式数量无限但前几个最重要 | primitive 实际不会太多 |
| 可能创建新模式 | 数据中出现新行为时自动建模 |
|----------------|------------------|
| DP(狄利克雷过程) | 只处理"一个序列"的无限类别问题 |
|----------------|---------------------|
| HDP(层次 DP) | 处理"多个序列共享类别"的无限类别问题 |
------小狗照亮每一天
20251209