代码之家  ›  专栏  ›  技术社区  ›  abdo Salm a l i e n w a r e

高斯混合模型使用sklearn库的结果不一致

  •  1
  • abdo Salm a l i e n w a r e  · 技术社区  · 3 年前

    所以我试图用高斯混合模型从图像中分割出一只手,所以阅读 this paper (Hand Gesture Based Recognition And Voice Conversion System For Physically Disabled People) 它指出肤色在YCbCr颜色空间中遵循高斯分布,所以我写了下面一行:

    gmm_model = GMM.GaussianMixture(n_components=3, covariance_type='full', warm_start=True, init_params='k-means++').fit(img2)
    

    来自sklearn库,但我的问题是,每次运行程序的结果都完全不同。

    这是原始图像:

    enter image description here

    这是第一次运行的分割图像:

    enter image description here

    这是第二次运行的分割图像:

    enter image description here

    等等,为什么这是可能的?

    1 回复  |  直到 3 年前
        1
  •  1
  •   Kenny Wong    3 年前

    Sklearn对高斯混合的实现是不确定的。所以如果你打电话 .fit(...) 两次,你 预料 得到两个不同的结果。

    让我详细介绍一下。在Sklearn中,高斯混合模型是通过一个称为经验最大化的过程来训练的。非常粗略地(冒着过于简单化的风险),期望最大化是一种迭代算法,你从对聚类中心/大小的初始猜测开始,然后迭代改进你的猜测。给定初始猜测的选择,迭代改进的过程是完全确定的。然而,sklearn最初生成初始猜测的方式是不确定的。

    查看您的代码,您的初始猜测似乎是由 k-means++ 方法现在看看 docs ,其中规定 k均值++ 用于生成初始猜测的方法具有随机性元素。

    为了摆脱随机性,我建议你设置 random_state 等于某个固定的数字。看见 these docs