#python #scikit-learn #probability #bayesian
#python #машинное обучение #scikit-learn #вероятность #байесовский
Вопрос:
В scikit-learn
GaussianMixture
объекте есть метод bic(X)
, который реализует байесовский информационный критерий для выбора количества компонентов, которые лучше соответствуют данным. Это пример использования:
from sklearn import mixture
for n in range(0,10):
gmm = mixture.GaussianMixture(n_components=n, max_iter=1000, covariance_type='diag', n_init=50)
gmm.fit(data)
bic_n = gmm.bic(data)
Я устанавливаю GMM на набор данных с 600 тыс. строк и 7 столбцов. Значения BIC всегда отрицательны, например [-2000, -3000, -3300, ..]
.
В документации к методу bic()
написано «Чем ниже, тем лучше». В случае отрицательных значений, как в моем примере, это -3300
наилучшее значение или оно относится к наименьшему значению в абсолютном выражении?
Ответ №1:
Как правило, цель состоит в том, чтобы минимизировать BIC, поэтому, если вы находитесь на отрицательной территории, отрицательное число с наибольшим модулем (самое глубокое на отрицательной территории) указывает на предпочтительную модель.
Посмотрите на исходный код: https://github.com/scikit-learn/scikit-learn/blob/0fb307bf3/sklearn/mixture/_gaussian_mixture.py#L727
def bic(self, X):
"""Bayesian information criterion for the current model on the input X.
Parameters
----------
X : array of shape (n_samples, n_dimensions)
Returns
-------
bic : float
The lower the better.
"""
return (-2 * self.score(X) * X.shape[0]
self._n_parameters() * np.log(X.shape[0]))