如何使用sklearn.mixture.GaussianMixture修复ValueM以适合GMM?

时间:2018-01-21 18:09:13

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

我正在尝试使用GaussianMixture模型进行图像分割,因此我使用了2个分量,协方差矩阵类型="完全"并尝试使用随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和肯定的异常,我无法弄清楚为什么?这是错误的痕迹。

`

  

追踪(最近一次呼叫最后一次):

     

文件" /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中           提出LinAlgError("%d-th领先的未成年人不是肯定的"%信息)
  numpy.linalg.linalg.LinAlgError:第2个领先的未成年人未确定

     

在处理上述异常期间,发生了另一个异常:

     

追踪(最近的呼叫最后):
    文件" /home/madhur/Desktop/Project/graphcutmaterials/test.py" ;,第19行,in       gmm.fit(X)
  文件" /home/madhur/anaconda3/lib/python3.6/site-packages/sklearn/mixture/base.py" ;,第207行,适合       self._initialize_parameters(X,random_state)
  文件" /home/madhur/anaconda3/lib/python3.6/site-packages/sklearn/mixture/base.py" ;,第157行,在_initialize_parameters中       self._initialize(X,resp)
    文件" /home/madhur/anaconda3/lib/python3.6/site-packages/sklearn/mixture/gaussian_mixture.py" ;,第643行,在_initialize中       协方差,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。

`

1 个答案:

答案 0 :(得分:1)

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

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