我试图使用GaussianMixture模型进行图像分割,所以我使用了两个组件,协方差矩阵type=“满”,并尝试运行使用Spyder3.6,这是附带的anaconda。下面是代码:
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(协方差,lower=True)中 文件"/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-引导未成年人不确定”% info) numpy.linalg.linalg.LinAlgError:第2代导语小调未正定 在处理上述异常的过程中,发生了另一个异常: 回溯(最近一次调用): 文件"/home/madhur/Desktop/Project/graphcutmaterials/test.py",第19行,在gmm.fit(X)中 文件"/home/madhur/anaconda3/lib/python3.6/site-packages/sklearn/mixture/base.py",第207行,在fit 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中 raise (Estimate_precision_error_message) ValueError:拟合混合模型失败是因为某些组件的经验协方差定义不明确(例如,由单例或塌陷样本引起)。尝试减少组件的数量,或增加reg_covar。
`
发布于 2020-02-18 04:28:07
我认为原因已经在ErrorInformation中提出了,这是因为“因为某些组件的经验协方差定义不明确(例如,由单例或塌陷样本引起的)”。因为您将组件的数量设置为2,所以不能减少它,所以我建议您将参数"reg_covar“增加到1e-5 (默认为1e-6)。
有关GMM参数的更多信息,请参见:https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html
https://stackoverflow.com/questions/48370066
复制相似问题