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

时间:2016-05-20 08:46:55

标签: python matlab scikit-learn scikit-image

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

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

1 个答案:

答案 0 :(得分:2)

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

一个简单的黑客就是根据标签对标记数据进行分组,并为它们单独估算平均向量和协方差矩阵,并将这些作为初始值传递给MATLAB函数(scikit-learn不允许这样做,直到我和#39; m知道)。希望这会将你的高斯人定位在正确的位置"。然后,EM算法将从那里获取它以调整这些参数。

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

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