使用 scikit-learn.mixture.GMM 寻找条件高斯混合模型

Posted

技术标签:

【中文标题】使用 scikit-learn.mixture.GMM 寻找条件高斯混合模型【英文标题】:Finding conditional Gaussian Mixture Model using scikit-learn.mixture.GMM 【发布时间】:2015-03-27 20:43:54 【问题描述】:

我正在使用scikit-learn 将多元高斯混合模型拟合到一些数据(效果很好)。但是我需要能够以 some 变量为条件获得一个新的 GMM,而 scikit 工具包似乎无法做到这一点,这让我感到惊讶,因为它看起来很基本想做的事。

Wikipedia has a good explanation 我正在尝试做的事情(对于单个高斯,而不是 GMM),我有可能自己实现它,但是我的矩阵数学不是很好,我可以看到它需要很长时间。

有人已经这样做了吗?有没有使用 NumPy/SciPy/Scikit-learn 的简单方法?

【问题讨论】:

沿相关轴切分你的数据张量。 @SlaterTyranus 我认为您建议我将 GMM 拟合到我的数据集的切片版本。我想从我已经适合完整数据集的 GMM 中获取条件 GMM。 @TomG 嗨,汤姆,您找到问题的解决方案了吗?接受的答案对我不起作用。 【参考方案1】:

尝试查看pypr。从文档中,您可以找到以一个或多个变量为条件的 GMM:

# Now we will find the conditional distribution of x given y
(con_cen, con_cov, new_p_k) = gmm.cond_dist(np.array([np.nan, y]), \
    cen_lst, cov_lst, p_k)

据我记得,有一些示例随包一起提供。

【讨论】:

我对使用被描述为“处于早期阶段”并且已经 4 年没有更新的代码感到紧张,但我试了一下。遗憾的是 em_gm.py 示例(带有条件 GMM)不起作用——作者似乎在 gmm.em_gm 的定义中使用了关键字“iter”作为变量名,导致它崩溃。 在文档中给出的示例中,设置“max_iter = 400”而不是“iter = 400”和“iter_call = None”。如果你想跟踪你的 EM 算法的进度,你可以修改 plot 函数。 谢谢!这和其他一些问题(例如,一些记录在案的功能仅在 SVN 中,而不是在最新下载中),我已经让它工作了! 如果您觉得有帮助,请采纳答案。 :) 对不起,我在这里是个菜鸟 - 我不得不查找如何接受答案。

以上是关于使用 scikit-learn.mixture.GMM 寻找条件高斯混合模型的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)