【问题标题】:How to fix ValueError in fitting GMM using sklearn.mixture.GaussianMixture?如何在使用 sklearn.mixture.GaussianMixture 拟合 GMM 时修复 ValueError?
【发布时间】:2018-06-30 09:42:24
【问题描述】:

我正在尝试使用 GaussianMixture 模型进行图像分割,因此我使用了 2 个组件,协方差矩阵 type="full" 并尝试使用 anaconda 附带的 Spyder3.6 运行。代码如下:

from scipy.misc import imread, imshow
from sklearn.mixture import GaussianMixture as GMM
import graph_tool.all as gt
from graph_tool.all import *

X=imread('2.jpg')
old=X.shape
X=X.reshape(-1,3)
gmm=GMM(covariance_type='full', n_components=2)
gmm.fit(X)
clusters=gmm.predict(X)
clusters=clusters.reshape(old[0],old[1])

但它显示 ValueError 和肯定的异常,我不知道为什么?这是错误的痕迹。

`

Traceback(最近一次调用最后一次):

文件“/home/madhur/anaconda3/lib/python3.6/site-packages/sklearn/mixture/gaussian_mixture.py”,第 318 行,在 _compute_precision_cholesky cov_chol = linalg.cholesky(协方差,较低=真)
文件“/home/madhur/anaconda3/lib/python3.6/site-packages/scipy/linalg/decomp_cholesky.py”,第 81 行,在 cholesky check_finite=check_finite)
文件“/home/madhur/anaconda3/lib/python3.6/site-packages/scipy/linalg/decomp_cholesky.py”,第 30 行,在 _cholesky
raise LinAlgError("%d-th 前导次要不是正定的"% info)
numpy.linalg.linalg.LinAlgError: 2-thleading minor not positive 确定

在处理上述异常的过程中,又发生了一个异常:

回溯(最近一次通话最后一次):
文件“/home/madhur/Desktop/Project/graphcutmaterials/test.py”,第 19 行,在 gmm.fit(X)
文件“/home/madhur/anaconda3/lib/python3.6/site-packages/sklearn/mixture/base.py”,第 207 行,适合 self._initialize_parameters(X, random_state)
_initialize_parameters 中的文件“/home/madhur/anaconda3/lib/python3.6/site-packages/sklearn/mixture/base.py”,第 157 行 self._initialize(X, resp)
_initialize 中的文件“/home/madhur/anaconda3/lib/python3.6/site-packages/sklearn/mixture/gaussian_mixture.py”,第 643 行 协方差,self.covariance_type)
文件“/home/madhur/anaconda3/lib/python3.6/site-packages/sklearn/mixture/gaussian_mixture.py”,第 320 行,在 _compute_precision_cholesky
引发 ValueError(estimate_precision_error_message)

ValueError:拟合混合模型失败,因为某些组件具有不明确的经验协方差(例如由单例或折叠样本引起)。尝试减少组件的数量,或者增加 reg_covar。

`

【问题讨论】:

标签: python-3.x numpy image-processing scikit-learn gmm


【解决方案1】:

我认为原因已经在 ErrorInformation 中提出,即“因为某些组件具有不明确的经验协方差(例如由单例或折叠样本引起)”。由于您将组件数设置为2,因此无法减少,因此建议您将参数“reg_covar”增加到1e-5(默认为1e-6)。

有关 GMM 参数的更多信息,请参见:https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html

【讨论】:

    猜你喜欢
    • 2021-01-20
    • 2021-11-02
    • 2021-01-29
    • 2020-04-01
    • 1970-01-01
    • 2022-10-12
    • 2014-08-02
    • 1970-01-01
    • 2019-07-11
    相关资源
    最近更新 更多