如何定义EM算法参数以实现12小时制时间的AM/PM分类任务
问题场景下的EM参数定义与实现逻辑
1. 核心定义
- 隐变量:每个样本i对应的隐变量
z_i ∈ {0, 1},z_i=0代表AM,z_i=1代表PM,是待推断的未知属性 - 观测变量:每个样本的两个观测项,分别是时间表述
e_i(如morning、night,共K种离散取值)、12小时制小时数h_i ∈ {1,2,...,12} - 数据集:
Y = {<e_i, h_i>}_{i=1,...,N},N为样本总数
2. 待估参数定义
你可以根据数据量选择两种参数配置方案,优先推荐数据量足够时的带时间表述约束版本:
方案A:带时间表述约束(更贴合业务逻辑)
- 先验参数:对每种时间表述e,定义
π_e = P(z=1 | e),代表观测到时间表述e时,样本为PM的先验概率,约束为0 ≤ π_e ≤ 1 - 观测分布参数:对每种时间表述e、隐变量取值z,定义
θ_{e,z,h} = P(h | e, z),代表已知时间表述为e、时段为z时,观测到小时h的概率,约束为对任意e、z,有∑_{h=1}^{12} θ_{e,z,h} = 1
方案B:简化版(小数据量适用)
如果不同时间表述的小时分布差异不大,可以简化参数减少过拟合风险:
- 先验参数:同方案A的
π_e - 观测分布参数:全局共享时段分布,定义
θ_{z,h} = P(h | z),代表时段为z时观测到小时h的概率,约束为对任意z,∑_{h=1}^{12} θ_{z,h} = 1
3. EM迭代逻辑(以简化版方案B为例)
E步(期望步)
对每个样本i,计算当前参数下隐变量的后验概率:
γ_i = P(z_i=1 | e_i, h_i) = (π_{e_i} * θ_{1,h_i}) / [π_{e_i} * θ_{1,h_i} + (1-π_{e_i}) * θ_{0,h_i}]
γ_i就是当前迭代下,样本i属于PM的概率。
M步(最大化步)
用E步得到的后验概率更新所有参数:
- 先验参数更新:对每种时间表述e,统计所有
e_i = e的样本
即该类时间表述下所有样本的PM后验概率的均值。π_e = (∑_{i: e_i=e} γ_i) / (∑_{i: e_i=e} 1) - 观测分布参数更新:对每个时段z、小时h
即对应时段下,小时h的后验权重占该时段总权重的比例。θ_{z,h} = (∑_{i: h_i=h} (z=1 ? γ_i : 1-γ_i)) / (∑_{i=1}^N (z=1 ? γ_i : 1-γ_i))
4. 落地注意事项
- 初始化可以基于常识设置,比如
π_morning初始设为0.1,π_night初始设为0.9,避免局部最优;也可以随机初始化多次取最优收敛结果 - 迭代终止条件可以设为参数更新量小于1e-6,或者达到预设的最大迭代次数(如100次)
- 最终分类时,
γ_i > 0.5即可判定为PM,否则为AM,γ_i本身也可以作为分类置信度使用
内容的提问来源于stack exchange,提问作者Vered
相关产品推荐
相关产品推荐

