问题标签 [mixture-model]
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.
matlab - 使用经过训练的高斯混合模型标记新数据
我不确定如何使用经过训练的高斯混合模型 (GMM) 对一些新数据进行预测。例如,我从 3 个不同的类(集群)中提取了一些标记数据。对于每一类数据点,我拟合了一个 GMM(gm1、gm2 和 gm3)。假设我们知道每个类别的高斯混合数(例如,k1=2、k2=1 和 k3=3),或者可以使用 Akaike 信息准则 (AIC) 对其进行估计(优化)。那么当我有一些新的数据集时,我怎么知道它是否更有可能属于 1、2 或 3 类?
一些 Matlab 脚本显示了我的意思:
我们可以得到图:
然后我们得到了一些新的测试数据,例如:
我故意使测试数据类似于Cluster 2 数据。在我们使用 GMM 进行训练之后,我们能否以某种方式预测新测试数据的标签?是否有可能为每个类别的预测得出一些概率,例如 (p1 = 18%, p2 = 80% 和 p3 = 2%)。因为我们得到了 p2=80%,所以我们可以有一个硬分类,新的测试数据被标记为集群 2。
ps:我找到了这篇文章,但对我来说似乎是理论上的(A similar post)。如果可以,请在您的回复中添加一些简单的 Matlab 脚本。
非常感谢。一个。
编辑:
当 Amro 回答问题的解决方案时,我有更多问题。
Amro 使用整个数据集创建了一个新的 GMM,并进行了一些初始化:
Amro 得到的如下所示
这可能不适合我的数据,因为它将我标记的 cluster1 和 cluster2 与 cluster1 的一部分混合在一起。这是我试图避免的。
这里我提出的是一个人为的数值例子;但是,在我的实际应用程序中,它处理图像分割问题(例如,cluster1 是我的背景图像,cluster2 是我要分离的对象)。然后我尝试以某种方式“强制”单独的 GMM 以适应单独的类。如果两个聚类相距较远(例如本例中的cluster1和cluster 3),使用Amro的方法将所有数据合并,然后进行GMM拟合是没有问题的。但是,当我们对图像数据进行训练时,由于分辨率的限制(造成局部体积效应),将背景与物体分离永远不会完美;因此,很可能我们有 cluster1 与 cluster2 重叠的情况,如图所示。
然而,经过一点思考,我现在想做的是:
你们有什么感想?还是相当于Amro的方法?如果是这样,有没有办法强制我训练有素的 GMM 分离?
posterior
另外,我对使用该功能的基本原理有疑问。本质上,我想在 GMM 拟合的情况下估计我的测试数据的可能性。那为什么我们现在计算后验概率呢?或者这只是一个命名问题(换句话说,'后验概率'='可能性')?据我所知,GMM 一直被用作一种无监督的方法。甚至有人向我提到 GMM 是 k-means 聚类的概率版本。是否有资格以这种“监督”的方式使用它?有推荐的论文或参考资料吗?
再次非常感谢您的回复!一个。
matlab - 如何从 GMM 迭代中为集群提供标签?
我从了解高斯混合模型的概念中阅读了 GMM 的概念。这对我很有帮助。我也为 fisheriris 实现了 GMM,但我没有使用 fitgmdist 函数,因为我没有它。所以我使用了来自http://chrisjmccormick.wordpress.com/2014/08/04/gaussian-mixture-models-tutorial-and-matlab-code/的代码。
当我阅读理解高斯混合模型的概念时,Amro 可以使用其标签(即 setosa、virginica 和 versicolor)绘制结果。他是怎么做到的呢?经过一些迭代,我只得到了 mu、Sigma 和 weight。根本没有标签。我想将标签(setosa、virginica 和 versicolor)放入 GMM 迭代中的混合模型。
python - 从高斯混合模型中采样向量的一部分
我只想从由它们的均值和协方差矩阵给出的高斯和中抽取向量的一些元素。
具体来说:
我正在使用高斯混合模型(GMM)输入数据。我正在使用以下程序和 sklearn:
- 用平均值估算
- 使用 GMM 获取均值和协方差(例如 5 个分量)
- 取其中一个样本并仅对缺失值进行采样。其他值保持不变。
- 重复几次
我看到了两个问题。(A)如何从高斯总和中进行采样,(B)如何仅对向量的一部分进行采样。我认为两者都可以同时解决。对于(A),我可以使用拒绝采样或逆变换采样,但我觉得在 numpy 中使用多元正态分布生成器有更好的方法。或者,其他一些有效的方法。对于 (B),我只需要将采样变量乘以具有来自样本的已知值作为参数的高斯。正确的?
我更喜欢python中的解决方案,但算法或伪代码就足够了。
normalization - 特征缩放对准确性的影响
我正在使用高斯混合模型进行图像分类。我有大约 34,000 个特征,属于三个类别,都位于 23 维空间中。我使用不同的方法对训练和测试数据进行了特征缩放,我观察到执行缩放后准确度实际上会降低。我执行了特征缩放,因为许多特征之间存在许多阶数的差异。我很想知道为什么会这样,我认为特征缩放会提高准确性,特别是考虑到特征的巨大差异。
matlab - 用高斯混合模型估计颜色分布
我有一个图像,我想通过高斯混合模型估计输入图像的颜色分布,我怎么能用 Matlab 做到这一点?
gmdistribution.fit(X,k)
对我不起作用,因为 X 必须是 2D 矩阵而 myImage 是 3D 矩阵,使用时出现此错误gmdistribution.fit(myImage,10)
:X 必须是数字 2-D 矩阵。
当我使用gmdistribution.fit(myImage(:,:,1),10)
图像的红色时,我收到此错误:
当我使用时: gmdistribution.fit(single(myImage(:,:,1)),10)
我给出了这个错误:
我想将其用于使用高斯混合模型的图像分割。如果您有任何想法,请帮助我。
matlab - 在 EM 实现中处理空组件以进行 GMM 学习
我正在尝试在 MATLAB 中使用 EM 从头开始学习高斯混合模型。该项目需要对标准 GMM 模型进行一些后期修改,这就是为什么我不使用现成的实现,例如 VLFeat 或 Stats Toolbox。推出实施将是一种学习体验,并且以后可以轻松定制。
具体来说,为具有球面协方差的 GMM 编码 EM 。
处理空集群。当 GMM 的某些组件没有分配任何数据时,我无法处理这种情况——它们的后验概率质量为零或可忽略不计。当定义了大量的集群时,就会出现这种情况。处理这种情况的标准方法是什么?
直观地说,我会选择具有最高协方差的组件并将其一半的数据分配给空组件。
我的问题是:在 EM 实现中是否有一种标准且有原则的处理方式(我无法通过 Google 找到)?
cluster-analysis - 聚类与拟合混合模型
我有一个关于使用聚类方法与使用分布拟合相同数据的问题。
假设我有一个具有 2 个特征(feat_A 和feat_B)的数据集,并且假设我使用聚类算法将数据划分为最佳数量的集群......比如 3。
我的目标是为每个输入数据 [feat_Ai,feat_Bi] 分配该点属于集群 1 2 3 的概率(或类似的东西)。
一个。第一种聚类方法:
我将数据聚类在 3 个聚类中,并根据与聚类中心的距离为每个点分配属于聚类的概率。
湾。使用混合模型的第二种方法:
我将混合模型或混合分布拟合到数据中。使用期望最大化 (EM) 算法将数据拟合到分布,该算法将后验概率分配给每个观察值的每个分量密度。通过选择最大化后验概率的组件来分配集群。
在我的问题中,我找到了带有数据子样本的聚类中心(或者如果使用方法b. ,我会拟合模型)。然后我必须为许多其他数据分配一个概率......我想知道在存在新数据的情况下哪种方法更适合用于仍然有意义的分配。
我会选择一种聚类方法,例如kmean,因为:
如果新数据来自与用于创建混合模型的分布不同的分布,则分配可能不正确。
有了新数据,后验概率会发生变化。
聚类方法使聚类的方差最小化以找到一种最优的分离边界,混合模型考虑数据的方差来创建模型(不确定将形成的聚类是否以最优的方式分离)方法)。
有关数据的更多信息:
不应假定功能是依赖的。Feat_A 表示体育活动的持续时间 Feat_B 步数 原则上,我们可以说随着活动持续时间的延长,步数会增加,但并非总是如此。
请帮助我思考,如果您有任何其他观点,请告诉我..
r - 如何从适合我在 R 中的数据中的多个高斯中提取信息?
我有从 .ab1 文件中提取的测序运行信息(4 个核苷酸)。我希望能够将四个多峰高斯分布拟合到数据中(对应于 4 个不同的核苷酸) 数据是一个 csv 文件,有五列 - 索引列和其他四列对应于来自四个核苷酸的读取 -A,T, G和C。
为了进一步定位峰,我使用了以下
某些点有多个峰值,我需要编写一个代码来找到这样的位置,这些位置具有多个高斯分布的峰值(对应于来自多个核苷酸的信号)。有没有办法在 R 中做到这一点?
scala - 高斯混合模型 (GMM) mllib Apache Spark Scala
我认为 mllib 中还没有高斯混合模型。我想知道在其他地方是否有任何好的 GMM(适用于大数据)的 Scala/Java 实现。请告诉我。
谢谢并恭祝安康,