Как исправить ошибку ValueError при настройке GMM с помощью sklearn.mixture.GaussianMixture?

Я пытаюсь использовать модель GaussianMixture для сегментации изображения, поэтому я использовал 2 компонента, ковариационную матрицу type = "full", и попытался запустить с помощью 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 (covariance, lower = True)
File " /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, соответствует self._initialize_parameters (X, random_state)
Файл" /home/madhur/anaconda3/lib/python3.6 /site-packages/sklearn/mixture/base.py ", строка 157, в _initialize_parameters self._initialize (X, соответственно)
Файл" /home/madhur/anaconda3/lib/python3.6/site-packages/sklearn /mixture/gaussian_mixture.py ", строка 643, в _initialize covariances, self.covariance_type)
Файл" /home/madhur/anaconda3/lib/python3.6/site-packages/sklearn/mixture/gaussian_mixture.py ", строка 320, в _compute_precision_cholesky
вызвать ValueError (valu_precision_error_message)

ValueError: Подбор модели смеси не удалось, потому что некоторые компоненты имеют плохо определенную эмпирическую ковариацию (например, вызванную одиночными или свернутыми выборками). Попробуйте уменьшить количество компонентов или увеличить reg_covar.

`


person madhur4127    schedule 21.01.2018    source источник
comment
Какая здесь форма X?   -  person Vivek Kumar    schedule 22.01.2018
comment
80 * 120 * 3 - это форма X, так как GMM требует ‹= 2 dim, поэтому я изменил ее   -  person madhur4127    schedule 22.01.2018
comment
Ok. Не могли бы вы добавить несколько примеров данных, вызывающих эту проблему?   -  person Vivek Kumar    schedule 22.01.2018
comment
Я использовал это изображение как iput к коду: www2.eecs.berkeley.edu/Research/Projects/CS/vision/bsds/BSDS300/   -  person madhur4127    schedule 22.01.2018
comment
Привет, ты понял это?   -  person Mohsin    schedule 13.11.2018


Ответы (1)


Я думаю, что причина уже была представлена ​​в ErrorInformation, а именно: «потому что некоторые компоненты имеют плохо определенную эмпирическую ковариацию (например, вызванную одиночными или свернутыми выборками)». Поскольку вы устанавливаете количество компонентов равным 2, его нельзя уменьшить, поэтому я предлагаю вам увеличить параметр reg_covar до 1e-5 (по умолчанию 1e-6).

дополнительную информацию о параметрах GMM можно найти по адресу: https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html

person cicimeng    schedule 18.02.2020