【问题标题】:Semi-supervised Gaussian mixture model clustering in PythonPython中的半监督高斯混合模型聚类
【发布时间】:2016-09-17 10:44:17
【问题描述】:

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

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

【问题讨论】:

    标签: python matlab scikit-learn scikit-image


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的分析,我同意这似乎支持这样的想法,即这不会有太大帮助。我基本上预计它会做你描述的事情,这对于我的应用程序来说可能已经足够了。也感谢您对可能出错的地方提出警告,并指出 scikit-learn 中已经存在的有趣的半监督方法。我打算在 MATLAB 中看看这个,因为你说的很对,在 scikit-learn 中似乎不存在这个。
    猜你喜欢
    • 2019-05-09
    • 2019-10-14
    • 2019-08-05
    • 2021-09-30
    • 2015-05-09
    • 2023-03-24
    • 2014-01-09
    • 2012-05-08
    • 2016-08-08
    相关资源
    最近更新 更多