Python 中的半监督高斯混合模型聚类

Semi-supervised Gaussian mixture model clustering in Python

我有使用 scikit-learn 中的高斯混合模型分割的图像。一些图像被标记了,所以我有很多我想使用的先验信息。我想 运行 通过提前提供一些集群分配来对混合模型进行半监督训练。

从Matlab 文档中,我可以看到Matlab 允许设置初始值。是否有任何 python 库,尤其是 scikit-learn 允许这样做的方法?

标准 GMM 不能以半监督方式工作。您提到的初始值可能是将由 EM 算法更新的高斯均值向量和协方差矩阵的初始值。

一个简单的 hack 是根据标签对标记的数据进行分组,并分别估计它们的均值向量和协方差矩阵,并将它们作为初始值传递给您的 MATLAB 函数(scikit-learn 目前不允许这样做据我所知)。希望这会将您的高斯定位在 "correct locations"。然后 EM 算法将从那里获取它来调整这些参数。

这个 hack 的缺点是它不能保证它会尊重你真正的标签分配,因此即使一个数据点被分配了一个特定的集群标签,它也有可能被重新分配给另一个集群。此外,特征向量或标签中的噪声也可能导致初始高斯覆盖比预期更大的区域,从而破坏 EM 算法。此外,如果您没有足够的数据点用于特定集群,您估计的协方差矩阵可能是奇异的,因此完全打破了这个技巧。

除非您必须使用 GMM 对您的数据进行聚类(例如,您确定高斯模型可以很好地建模您的数据),那么也许您可以尝试 semi-supervised methods in scikit-learn 。这些将根据与您的其他数据点的特征相似性传播标签。但是,我怀疑这是否可以处理大型数据集,因为它需要从样本对构建图拉普拉斯矩阵,除非在 scikit-learn 中有一些特殊的实现技巧来处理这个问题。