我正在尝试使用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。
`
答案 0 :(得分:1)
我认为原因已经在ErrorInformation中提出,这是“因为某些组件具有不确定的经验协方差(例如,由单例或折叠的样本引起)”。由于将组件数设置为2,因此不能减少,因此建议您将参数“ reg_covar”增加为1e-5(默认为1e-6)。
有关GMM参数的更多信息,请参见:https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html