scikit-learn GMM 产生正对数概率
Posted
技术标签:
【中文标题】scikit-learn GMM 产生正对数概率【英文标题】:scikit-learn GMM produce positive log probability 【发布时间】:2012-08-23 21:56:08 【问题描述】:我正在使用 python scikit-learn 包中的高斯混合模型来训练我的数据集,但是,我在编码时发现
-- G=mixture.GMM(...)
-- G.fit(...)
-- G.score(求和特征)
得到的对数概率是正实数...这是为什么呢? 对数概率不保证为负吗?
我明白了。高斯混合模型返回给我们的是对数概率“密度”而不是概率“质量”,因此正值是完全合理的。
如果协方差矩阵接近奇异,则 GMM 将不会表现良好,通常意味着数据不适用于此类生成任务
【问题讨论】:
听起来是个bug,能给个极简的复制脚本吗?顺便说一句:您可以直接在github.com/scikit-learn/scikit-learn/issues 上报告错误 【参考方案1】:正对数概率是可以的。
请记住,GMM 计算的概率是一个概率密度函数 (PDF),因此在任何单个点都可以大于一。
限制是 PDF 必须集成到数据域中的一个。
如果对数概率增长得非常大,则推理算法可能已达到退化解(如果您的数据集较小,则通常与最大似然估计一起使用)。
要检查 GMM 算法是否没有达到退化解,您应该查看每个分量的方差。如果任何方差接近于零,那么这很糟糕。作为替代方案,您应该使用贝叶斯模型而不是最大似然估计(如果您还没有这样做的话)。
【讨论】:
你好,谢谢你的回复,你能解释一下退化协方差矩阵吗?怎么会这样?。这是否意味着我的数据主要位于 R^n 的某个子空间上,因此沿某个轴的方差接近于零? 是的 - 您的数据可以跨越较低维度的子空间,或者其中一个混合组件可以以单个数据点为中心。检查协方差矩阵的特征值是否接近于零。以上是关于scikit-learn GMM 产生正对数概率的主要内容,如果未能解决你的问题,请参考以下文章
使用 scikit-learn 为 NER 训练 NLP 对数线性模型