python 用高斯混合模型(GMM)拟合加权数据,协方差最小

Jan*_*neD 5 python opencv cluster-analysis scikit-learn expectation-maximization

我想使用 python 将高斯混合模型拟合到一组加权数据点。

我尝试了 sklearn.mixture.GMM() ,它工作得很好,除了它对所有数据点的权重相等。有谁知道如何在此方法中为数据点分配权重?我多次尝试使用数据点来“增加其权重”,但这对于大型数据集似乎无效。

我也考虑过自己实现 EM 算法,但这似乎比上面的 GMM 方法慢得多,并且会极大地增加大型数据集的计算时间。

我刚刚发现了 EM 算法 cv2.EM() 的 opencv 方法。这再次工作正常,但与 sklearn.mixture.GMM 存在相同的问题,此外,似乎没有办法更改协方差允许的最小值。或者有没有办法将协方差最小值更改为 0.001?我希望可以使用探针参数来为数据分配权重,但这似乎只是一个输出参数,对拟合过程没有影响,不是吗?使用 probs0 并使用 trainM 以 M 步骤启动算法也没有帮助。对于 probs0,我使用了(数据点数量)x(GMM 分量数量)矩阵,其列相同,而数据点的加权参数写入与数据点对应的行。这也没有解决问题。它只是产生了一个混合模型,其中所有的值都为 0。

有谁知道如何操作上述方法,或者有没有人知道另一种方法,以便 GMM 可以拟合加权数据?

小智 3

如果您仍在寻找解决方案,pomegranate 现在支持基于加权数据训练 GMM。您需要做的就是在训练时传入一个权重向量,它会为您处理它。这是关于石榴 GMM 的简短教程!

父 github 在这里:

https://github.com/jmschrei/pomegranate

具体教程在这里:

https://github.com/jmschrei/pomegranate/blob/master/tutorials/B_Model_Tutorial_2_General_Mixture_Models.ipynb