问题标签 [gmm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 在 sklearn python 中拟合 GaussianMixture 时如何处理内存错误?
我正在尝试使用 sklearn 将 GaussianMixture 拟合到一堆猫和狗的图片中。我提供了一个大小为 (50,30000) 的 numpy 数组,其中 50 个数据点(25 张猫和 25 张狗图片),30000 是将每张图片转换为 numpy 数组并将大小调整为 (100,100,3) 后的特征数。它抛出内存错误。在运行此代码之前,我有 4GB 的 RAM 和 70% 的使用。谁能建议我如何调试 sklearn 中的 GaussianMixture 拟合方法使用了多少内存。或者任何人都可以提供一些代码来批量适应它。
以下是代码
结果:
以下是我得到的错误。
任何帮助深表感谢。
audio - 为什么使用 MFCC 和 Delta 系数时对数似然奇怪
我正在做一个需要从音频流中提取 MFCC 特征的项目。该项目主要包括分类,尽管为了扩展我们的数据集,我正在研究一种检测算法来隔离我们有兴趣分类的声音部分。
我正在测试不同的表示,并且由于数据的性质(我希望我可以提供更多细节,但我正在与之合作的教授更愿意将其保密,我相当确定),我会想象 delta 系数在顶部MFCC 系数会有所帮助。
我正在提取 40 个 MFCC 系数和 40 个 Delta 系数,并将其用于检测。我有一组训练数据,其中包含一个 40 毫秒的窗口,该窗口以我感兴趣的音频流部分为中心。然后我正在使用该数据训练 GMM。
为了测试(及其实际用例),我将较长的音频流(2 秒左右)拆分为一系列 MFCC 帧。我提取每一帧的对数似然,并根据对数似然分数内的百分位数对检测进行阈值化,当使用 delta 系数时,我得到了奇怪的结果。
您可以忽略底部的 4 个数字,它们只是用于可视化我的阈值方案。
我想知道的是,为什么与不使用 delta 时相比,使用 delta 系数时对数似然的行为如此奇怪?
提前谢谢您,如果您需要澄清,请询问。
scikit-learn - 如何获得 GMM 集群的代表点?
我使用 sklearn 高斯混合模型算法 (GMM) 对我的数据 (75000, 3) 进行了聚类。我有 4 个集群。我的数据的每个点都代表一个分子结构。现在我想得到每个簇最具代表性的分子结构,我理解的是簇的质心。到目前为止,我已经尝试使用 gmm.means_ 属性定位位于集群中心的点(结构),但是该确切点不对应于任何结构(我使用了 numpy.where)。我需要获取离质心最近的结构的坐标,但我在模块的文档中没有找到执行此操作的函数(http://scikit-learn.org/stable/modules/generated/sklearn.xml)。混合物.GaussianMixture.html)。如何获得每个集群的代表性结构?
非常感谢您的帮助,任何建议将不胜感激。
((由于这是一个通用问题,我认为没有必要添加用于聚类或任何数据的代码,如有必要请告诉我))
scikit-learn - 高斯混合模型对维度的不同重要性
是否有任何策略或技巧可以对数据的不同维度赋予不同的重要性?
这意味着,当在多维数据上拟合 GMM 时,一个方向的距离比其他方向的距离更容易受到惩罚。我考虑的选项:
- 预处理:尺寸的简单缩放不起作用,因为 GMM 只会学习类似缩放的方差。
- 操纵 EM 算法:我尝试在每个 M 步之后将协方差矩阵缩放到不太重要的维度的方向。中度成功。
我有点惊讶,我找不到关于这个非常明显的用例的信息。
python-3.x - 来自指定集群python的高斯混合模型采样
我在下面给出了一段代码,它生成高斯分布并从中采样数据:
当我检查 original_label 和 generated_label 时,每个集群中的样本数是不同的。
我想从具有相同原始输入分布的 gmm 中采样数据。在这里,采样数据和原始数据的集群之间存在很大差异。你能帮我修一下吗?
opencv - How to use GMMs returned by opencv grabcut to calculate possibilities of a pixel belonging to foreground or background
I have been scratching my head try to understand how to use the GMM model returned by the opencv grabcut function(python API), the GMM models returned are 2* 64 elements tuple which I assume contains both the mean and variance information but I don't know how to apply it to a pixel that contains 3 color channel to predict how likely it belongs to the foreground or the background. I didn't manage to find any example code that does anything with the GMM models returned by the grabcut function.
Alternatively, I understand that I can use EM.predict to obtain the possibilities if I build the graph and train background/foreground using EM. But I want to be able to use grabcut the way it's written.
Any help will be greatly appreciated!
r - 正态分布的多模态概率高于单模态分布
我正在尝试使用 mixtool 包分析混合模型,换句话说,我想分析我的数据是单峰分布、双峰分布还是多峰分布。
为简单起见,这里举个例子:
现在作为'comp'的结果,我得到:
在我对这种处决的非常有限的理解中,我希望将 1 视为“赢家”(因为我产生了一个单一的正态分布)。但是,如您所见,我得到 1 的无限值,而 BIC、ICL 和 Loglik 的 2 和 3 具有相同的值。这违背了正态分布和更高(或相同)的概率来处理双或多模式分布。由于我一开始使用的是正态分布,因此我希望看到 1 的概率最高,并且至少在 2 和 3 之间存在一些差异。最让我困惑的是在某些测试中 2 和 3 的相同值。
所以我的问题是为什么我的方法无法将分布识别为高斯分布,而是将其分类为双峰/多峰?
python - Tensorflow:高斯混合的 KL 散度
我知道使用 python 和scikit learn,如何计算高斯混合的KL散度,因为它的权重、均值和协方差等参数为np.array,如下所示。
GaussianMixture 使用组件参数初始化 - sklearn
但我想知道,使用Tensorflow,有没有办法计算两个高斯混合之间的KL散度,因为它的参数为 Tensor,
1)我在Tensorflow中尝试了上面的scikit,但它没有工作,因为Tensorflow在执行会话之前不会给它一个实际值。
2) 有一些 TF 包,但不完全是高斯混合的 KL。 https://www.tensorflow.org/api_docs/python/tf/contrib/distributions/Mixture
https://www.tensorflow.org/api_docs/python/tf/distributions/kl_divergence
任何帮助是极大的赞赏。
后来,我尝试了一个最新的 TF 库,如下所示。
然后我得到了这个错误...... NotImplementedError: No KL(distribution_a || distribution_b) 为distribution_a type Mixture和distribution_b type Mixture注册
我现在很伤心。:(
python-3.x - 如何在使用 sklearn.mixture.GaussianMixture 拟合 GMM 时修复 ValueError?
我正在尝试使用 GaussianMixture 模型进行图像分割,所以我使用了 2 个组件,协方差矩阵 type="full" 并尝试使用 anaconda 附带的 Spyder3.6 运行。这是代码:
但它显示 ValueError 和肯定的异常,我不知道为什么?这是错误的痕迹。
`
回溯(最近一次通话最后):
文件“/home/madhur/anaconda3/lib/python3.6/site-packages/sklearn/mixture/gaussian_mixture.py”,第 318 行,_compute_precision_cholesky cov_chol = linalg.cholesky(covariance, lower=True)
文件“/home/ madhur/anaconda3/lib/python3.6/site-packages/scipy/linalg/decomp_cholesky.py”,第 81 行,在 cholesky check_finite=check_finite)
文件“/home/madhur/anaconda3/lib/python3.6/site-packages /scipy/linalg/decomp_cholesky.py", line 30, in _cholesky
raise LinAlgError("%d-thleading minor not positive definite" % info)
numpy.linalg.linalg.LinAlgError: 2-th leading minor not positive在处理上述异常的过程中,又出现了一个异常:
Traceback(最近一次调用最后):
文件“/home/madhur/Desktop/Project/graphcutmaterials/test.py”,第 19 行,在 gmm.fit(X)
文件“/home/madhur/anaconda3/lib/python3.6 /site-packages/sklearn/mixture/base.py”,第 207 行,适合 self._initialize_parameters(X, random_state)
文件“/home/madhur/anaconda3/lib/python3.6/site-packages/sklearn/mixture/ base.py”,第 157 行,在 _initialize_parameters self._initialize(X, resp)
文件“/home/madhur/anaconda3/lib/python3.6/site-packages/sklearn/mixture/gaussian_mixture.py”,第 643 行,在_initialize covariances, self.covariance_type)
文件“/home/madhur/anaconda3/lib/python3.6/site-packages/sklearn/mixture/gaussian_mixture.py”,第 320 行,在 _compute_precision_cholesky
引发 ValueError(estimate_precision_error_message)ValueError:拟合混合模型失败,因为某些组件具有不明确的经验协方差(例如由单例或折叠样本引起)。尝试减少组件的数量,或增加 reg_covar。
`