Spec-Zone.ru › scikit-learn

Примечание

Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере с помощью JupyterLite или Binder.

Выбор модели гауссовой смеси

В этом примере показано, что выбор модели можно выполнять с помощью моделей гауссовых смесей (GMM), используя критерии теории информации. Выбор модели касается как типа ковариации, так и количества компонентов в модели.

В данном случае и информационный критерий Акаике (AIC), и байесовский информационный критерий (BIC) дают правильный результат, но мы демонстрируем только последний, поскольку BIC лучше подходит для определения истинной модели среди набора кандидатов. В отличие от байесовских процедур, такие выводы не зависят от априорных предположений.

# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

Генерация данных

Мы генерируем два компонента (каждый из которых содержит n_samples), случайным образом выбирая значения из стандартного нормального распределения, возвращаемого numpy.random.randn. Один компонент сохраняет сферическую форму, но сдвигается и масштабируется. Другой деформируется, чтобы получить более общую ковариационную матрицу.

import numpy as np

n_samples = 500
np.random.seed(0)
C = np.array([[0.0, -0.1], [1.7, 0.4]])
component_1 = np.dot(np.random.randn(n_samples, 2), C)  # general
component_2 = 0.7 * np.random.randn(n_samples, 2) + np.array([-4, 1])  # spherical

X = np.concatenate([component_1, component_2])

Мы можем визуализировать различные компоненты:

import matplotlib.pyplot as plt

plt.scatter(component_1[:, 0], component_1[:, 1], s=0.8)
plt.scatter(component_2[:, 0], component_2[:, 1], s=0.8)
plt.title("Gaussian Mixture components")
plt.axis("equal")
plt.show()
Gaussian Mixture components

Обучение и выбор модели

Мы изменяем количество компонентов от 1 до 6 и тип используемых параметров ковариации:

  • "full": каждый компонент имеет собственную общую ковариационную матрицу.
  • "tied": все компоненты используют одну и ту же общую ковариационную матрицу.
  • "diag": каждый компонент имеет собственную диагональную ковариационную матрицу.
  • "spherical": каждый компонент имеет собственную единственную дисперсию.

Мы оцениваем различные модели и оставляем лучшую (с наименьшим BIC). Для этого используются GridSearchCV и пользовательская функция оценки, возвращающая отрицательное значение BIC, поскольку GridSearchCV предназначен для максимизации оценки (максимизация отрицательного BIC эквивалентна минимизации BIC).

Лучший набор параметров и оцениватель сохраняются соответственно в best_parameters_ и best_estimator_.

from sklearn.mixture import GaussianMixture
from sklearn.model_selection import GridSearchCV


def gmm_bic_score(estimator, X):
    """Callable to pass to GridSearchCV that will use the BIC score."""
    # Make it negative since GridSearchCV expects a score to maximize
    return -estimator.bic(X)


param_grid = {
    "n_components": range(1, 7),
    "covariance_type": ["spherical", "tied", "diag", "full"],
}
grid_search = GridSearchCV(
    GaussianMixture(), param_grid=param_grid, scoring=gmm_bic_score
)
grid_search.fit(X)
GridSearchCV(estimator=GaussianMixture(),
             param_grid={'covariance_type': ['spherical', 'tied', 'diag',
                                             'full'],
                         'n_components': range(1, 7)},
             scoring=<function gmm_bic_score at 0x784129f52610>)
В среде Jupyter повторно выполните эту ячейку, чтобы отобразить HTML-представление, или доверьте эту записную книжку.
На GitHub невозможно отобразить HTML-представление; попробуйте открыть эту страницу на nbviewer.org.
Параметры
estimator estimator: объект оценивателя

Предполагается, что он реализует интерфейс оценивателя scikit-learn.
Оцениватель должен либо предоставлять функцию ``score``,
либо необходимо передать ``scoring``.
GaussianMixture()
param_grid param_grid: словарь или список словарей

Словарь, в котором имена параметров (`str`) являются ключами, а списки
значений параметров для проверки — значениями; либо список таких
словарей. В последнем случае проверяются сетки, заданные каждым словарём
в списке. Это позволяет выполнять поиск по любой последовательности
значений параметров.
{'covariance_type': ['spherical', 'tied', ...], 'n_components': range(1, 7)}
scoring scoring: строка, вызываемый объект, список, кортеж или словарь, по умолчанию=None

Способ оценки качества модели, проверенной перекрёстно, на
тестовой выборке.

Если `scoring` задаёт одну метрику, можно использовать:

- одну строку (см. :ref:`scoring_string_names`);
- вызываемый объект (см. :ref:`scoring_callable`), возвращающий одно значение;
- `None`, в этом случае используется
:ref:`критерий оценки по умолчанию для оценивателя <scoring_api_overview>`.

Если `scoring` задаёт несколько метрик, можно использовать:

- список или кортеж уникальных строк;
- вызываемый объект, возвращающий словарь, в котором ключи — имена метрик,
а значения — их оценки;
- словарь, в котором ключи — имена метрик, а значения — вызываемые объекты.

Пример см. в разделе :ref:`multimetric_grid_search`.
<function gmm...x784129f52610>
n_jobs n_jobs: int, по умолчанию=None

Количество параллельно выполняемых задач.
``None`` означает 1, если только не используется контекст :obj:`joblib.parallel_backend`.
``-1`` означает использовать все процессоры. Подробнее см. в :term:`Глоссарии <n_jobs>`.

.. versionchanged:: v0.20
Значение `n_jobs` по умолчанию изменено с 1 на None
None
refit refit: bool, str или вызываемый объект, по умолчанию=True

Повторно обучить оцениватель на всём наборе данных, используя
наилучшие найденные параметры.

При оценке нескольких метрик здесь должна быть указана строка `str`, обозначающая
метрику, по которой будут выбраны наилучшие параметры для повторного обучения
оценивателя в конце.

Если при выборе лучшего оценивателя учитываются не только максимальные оценки,
для ``refit`` можно задать функцию, которая
возвращает выбранный ``best_index_`` на основе ``cv_results_``. В этом
случае ``best_estimator_`` и ``best_params_`` будут заданы
в соответствии с возвращённым ``best_index_``, а атрибут ``best_score_``
будет недоступен.

Повторно обученный оцениватель доступен через атрибут ``best_estimator_``
и позволяет напрямую использовать ``predict`` для этого экземпляра
``GridSearchCV``.

Также при оценке нескольких метрик атрибуты ``best_index_``,
``best_score_`` и ``best_params_`` будут доступны только в том случае, если
задан ``refit``, и все они будут определяться относительно этой конкретной
метрики.

Подробнее об оценке по нескольким метрикам см. параметр ``scoring``.

Чтобы узнать, как разработать пользовательскую стратегию выбора с помощью вызываемого объекта
через `refit`, см. :ref:`sphx_glr_auto_examples_model_selection_plot_grid_search_digits.py`.

Пример использования ``refit=callable`` для балансировки сложности модели
и оценки при перекрёстной проверке см. в :ref:`этом примере
<sphx_glr_auto_examples_model_selection_plot_grid_search_refit_callable.py>`.

.. versionchanged:: 0.20
Добавлена поддержка вызываемых объектов.
True
cv cv: int, генератор перекрёстной проверки или итерируемый объект, по умолчанию=None

Определяет стратегию разбиения для перекрёстной проверки.
Возможные значения cv:

- None — использовать перекрёстную проверку по умолчанию с 5 блоками,
- целое число — задать количество блоков в `(Stratified)KFold`,
- :term:`разделитель CV`,
- итерируемый объект, выдающий разбиения (train, test) в виде массивов индексов.

Для целочисленных значений и None, если оцениватель является классификатором, а ``y`` —
бинарным или многоклассовым, используется :class:`StratifiedKFold`. Во всех
остальных случаях используется :class:`KFold`. Эти разделители создаются
с параметром `shuffle=False`, поэтому при каждом вызове разбиения будут одинаковыми.

Описание различных стратегий перекрёстной проверки, которые можно использовать здесь,
см. в :ref:`Руководстве пользователя <cross_validation>`.

.. versionchanged:: 0.22
Значение ``cv`` по умолчанию при None изменено с 3 блоков на 5.
None
verbose verbose: int, по умолчанию=0

Управляет подробностью выводимой во время обучения информации: чем выше
значение, тем подробнее журнал.

- 0 : сообщения не выводятся;
- >=1 : сводка общего количества обучений;
- >=2 : время вычислений для каждого блока и кандидата параметров;
- >=3 : индексы блоков и оценки;
- >=10 : индексы кандидатов параметров и сообщения START перед каждым обучением.
0
pre_dispatch pre_dispatch: int или str, по умолчанию='2*n_jobs'

Управляет количеством задач, запускаемых при параллельном
выполнении. Уменьшение этого количества может помочь избежать
чрезмерного расхода памяти, если запускается больше задач,
чем процессоры могут обработать. Этот параметр может принимать следующие значения:

- None — все задачи сразу создаются и запускаются. Используйте
это значение для лёгких и быстро выполняющихся задач, чтобы избежать задержек при запуске задач по требованию
- int — точное общее количество запускаемых задач
- str — выражение, задающее значение как функцию от n_jobs, например '2*n_jobs'
'2*n_jobs'
error_score error_score: 'raise' или числовое значение, по умолчанию=np.nan

Значение оценки, присваиваемое в случае ошибки при обучении оценивателя.
Если задано 'raise', ошибка будет вызвана. Если указано числовое значение,
выдаётся предупреждение FitFailedWarning. Этот параметр не влияет на этап повторного обучения,
при котором ошибка всегда будет вызвана.
nan
return_train_score return_train_score: bool, по умолчанию=False

Если задано ``False``, атрибут ``cv_results_`` не будет включать оценки
на обучающих данных.
Вычисление оценок на обучающих данных позволяет понять, как различные
значения параметров влияют на компромисс между переобучением и недообучением.
Однако вычисление оценок на обучающей выборке может быть затратным с вычислительной точки зрения
и не является строго необходимым для выбора параметров, обеспечивающих
наилучшую обобщающую способность.

.. versionadded:: 0.19

.. versionchanged:: 0.21
Значение по умолчанию изменено с ``True`` на ``False``
False
Обученные атрибуты
Имя Тип Значение
best_estimator_ best_estimator_: оцениватель

Оцениватель, выбранный поиском, то есть оцениватель,
который показал наивысшую оценку (или наименьшую потерю, если она задана)
на отложенных данных. Недоступен, если ``refit=False``.

Подробнее о допустимых значениях см. параметр ``refit``.
GaussianMixture GaussianMixtu..._components=2)
best_index_ best_index_: int

Индекс (в массивах ``cv_results_``), соответствующий наилучшему
кандидату — набору значений параметров.

Словарь ``search.cv_results_['params'][search.best_index_]`` содержит
значения параметров лучшей модели, которая обеспечивает наивысшую
среднюю оценку (``search.best_score_``).

При оценке нескольких метрик этот атрибут существует только в том случае, если задан ``refit``.
int64 np.int64(19)
best_params_ best_params_: dict

Значения параметров, обеспечившие наилучший результат на отложенных данных.

При оценке нескольких метрик этот атрибут существует только в том случае, если задан ``refit``.
dict {'co...pe': 'full', 'n_...ts': 2}
best_score_ best_score_: float

Средняя оценка лучшего оценивателя при перекрёстной проверке.

При оценке нескольких метрик этот атрибут существует только в том случае, если задан ``refit``.

Этот атрибут недоступен, если ``refit`` является функцией.
float64 -1047
cv_results_ cv_results_: словарь маскированных или обычных массивов numpy

Словарь, в котором ключи соответствуют заголовкам столбцов, а значения — столбцам; его можно
импортировать в ``DataFrame`` pandas.

Например, приведённая ниже таблица

+------------+-----------+------------+-----------------+---+---------+
|param_kernel|param_gamma|param_degree|split0_test_score|...|rank_t...|
+============+===========+============+=================+===+=========+
| 'poly' | -- | 2 | 0.80 |...| 2 |
+------------+-----------+------------+-----------------+---+---------+
| 'poly' | -- | 3 | 0.70 |...| 4 |
+------------+-----------+------------+-----------------+---+---------+
| 'rbf' | 0.1 | -- | 0.80 |...| 3 |
+------------+-----------+------------+-----------------+---+---------+
| 'rbf' | 0.2 | -- | 0.93 |...| 1 |
+------------+-----------+------------+-----------------+---+---------+

будет представлена словарём ``cv_results_`` следующего вида::

{
'param_kernel': masked_array(data = ['poly', 'poly', 'rbf', 'rbf'],
mask = [False False False False]...)
'param_gamma': masked_array(data = [-- -- 0.1 0.2],
mask = [ True True False False]...),
'param_degree': masked_array(data = [2.0 3.0 -- --],
mask = [False False True True]...),
'split0_test_score' : [0.80, 0.70, 0.80, 0.93],
'split1_test_score' : [0.82, 0.50, 0.70, 0.78],
'mean_test_score' : [0.81, 0.60, 0.75, 0.85],
'std_test_score' : [0.01, 0.10, 0.05, 0.08],
'rank_test_score' : [2, 4, 3, 1],
'split0_train_score' : [0.80, 0.92, 0.70, 0.93],
'split1_train_score' : [0.82, 0.55, 0.70, 0.87],
'mean_train_score' : [0.81, 0.74, 0.70, 0.90],
'std_train_score' : [0.01, 0.19, 0.00, 0.03],
'mean_fit_time' : [0.73, 0.63, 0.43, 0.49],
'std_fit_time' : [0.01, 0.02, 0.01, 0.01],
'mean_score_time' : [0.01, 0.06, 0.04, 0.04],
'std_score_time' : [0.00, 0.00, 0.00, 0.01],
'params' : [{'kernel': 'poly', 'degree': 2}, ...],
}

Пример визуализации и интерпретации результатов GridSearch см. в :ref:`sphx_glr_auto_examples_model_selection_plot_grid_search_stats.py`.

ПРИМЕЧАНИЕ

Ключ ``'params'`` используется для хранения списка словарей
со значениями параметров для всех кандидатов.

Значения ``mean_fit_time``, ``std_fit_time``, ``mean_score_time`` и
``std_score_time`` измеряются в секундах.

При оценке нескольких метрик оценки всех метрик доступны в словаре ``cv_results_``
по ключам, заканчивающимся именем соответствующей метрики (``'_<scorer_name>'``), а не ``'_score'``, как показано
выше. ('split0_test_precision', 'mean_train_precision' и т. д.)
dict {'me...me': array([0.0022..., 0.01910238]), 'me...me': array([0.0003..., 0.00057511]), 'me...re': array([-1728....179.97789043]), 'pa...pe': masked_array(... dtype=object), ...}
multimetric_ multimetric_: bool

Вычисляют ли метрики несколько оценок.
bool False
n_features_in_ n_features_in_: int

Количество признаков, полученных во время :term:`обучения`. Определяется только в том случае,
если задан `best_estimator_` (подробнее см. документацию по параметру `refit`)
и этот `best_estimator_` предоставляет `n_features_in_` после обучения.

.. versionadded:: 0.24
int 2
n_splits_ n_splits_: int

Количество разбиений (блоков/итераций) при перекрёстной проверке.
int 5
refit_time_ refit_time_: float

Время в секундах, затраченное на повторное обучение лучшей модели на всём наборе данных.

Этот атрибут присутствует только в том случае, если ``refit`` не равен False.

.. versionadded:: 0.20
float 0.006094
scorer_ scorer_: функция или словарь

Функция оценки, применённая к отложенным данным для выбора наилучших
параметров модели.

При оценке нескольких метрик этот атрибут содержит проверенный
словарь ``scoring``, сопоставляющий ключи оценивателей вызываемым объектам-оценивателям.
function <function gmm...x784129f52610>
GaussianMixture(n_components=2)
Параметры
n_components n_components: int, по умолчанию=1

Количество компонентов смеси.
2
covariance_type covariance_type: {'full', 'tied', 'diag', 'spherical'}, по умолчанию='full'

Строка, описывающая тип параметров ковариации.
Должно быть одно из значений:

- 'full': каждый компонент имеет собственную общую матрицу ковариации.
- 'tied': все компоненты используют одну и ту же общую матрицу ковариации.
- 'diag': каждый компонент имеет собственную диагональную матрицу ковариации.
- 'spherical': каждый компонент имеет собственную единственную дисперсию.

Пример использования `covariance_type` см. в
:ref:`sphx_glr_auto_examples_mixture_plot_gmm_selection.py`.
'full'
tol tol: float, по умолчанию=1e-3

Порог сходимости. Итерации EM прекращаются, когда
средний прирост нижней границы становится меньше этого порога.
0.001
reg_covar reg_covar: float, по умолчанию=1e-6

Неотрицательный коэффициент регуляризации, добавляемый к диагонали матрицы ковариации.
Позволяет гарантировать, что все матрицы ковариации положительны.
1e-06
max_iter max_iter: int, по умолчанию=100

Количество итераций EM.
100
n_init n_init: int, по умолчанию=1

Количество запусков с разными начальными значениями. Сохраняется лучший результат.
1
init_params init_params: {'kmeans', 'k-means++', 'random', 'random_from_data'}, по умолчанию='kmeans'

Метод инициализации весов, средних и
матриц точности.
Строка должна иметь одно из значений:

- 'kmeans' : апостериорные вероятности инициализируются с помощью k-средних.
- 'k-means++' : используется метод k-means++ для инициализации.
- 'random' : апостериорные вероятности инициализируются случайным образом.
- 'random_from_data' : начальные средние выбираются случайным образом из точек данных.

.. versionchanged:: v1.1
`init_params` теперь принимает 'random_from_data' и 'k-means++' в качестве
методов инициализации.
'kmeans'
weights_init weights_init: array-like формы (n_components, ), по умолчанию=None

Начальные веса, заданные пользователем.
Если значение равно None, веса инициализируются методом `init_params`.
None
means_init means_init: array-like формы (n_components, n_features), по умолчанию=None

Начальные средние, заданные пользователем.
Если значение равно None, средние инициализируются методом `init_params`.
None
precisions_init precisions_init: array-like, по умолчанию=None

Начальные матрицы точности (обратные матрицам ковариации),
заданные пользователем.
Если значение равно None, матрицы точности инициализируются методом 'init_params'.
Форма зависит от 'covariance_type'::

(n_components,) для 'spherical',
(n_features, n_features) для 'tied',
(n_components, n_features) для 'diag',
(n_components, n_features, n_features) для 'full'
None
random_state random_state: int, экземпляр RandomState или None, по умолчанию=None

Управляет начальным значением генератора случайных чисел, передаваемым методу инициализации
параметров (см. `init_params`).
Кроме того, управляет генерацией случайных выборок из
обученного распределения (см. метод `sample`).
Передайте int, чтобы получать воспроизводимые результаты при нескольких вызовах функции.
См. :term:`глоссарий <random_state>`.
None
warm_start warm_start: bool, по умолчанию=False

Если 'warm_start' равно True, результат последнего обучения используется как
начальное значение для следующего вызова fit(). Это может ускорить
сходимость, если fit вызывается несколько раз для похожих задач.
В этом случае 'n_init' игнорируется, а при первом вызове выполняется
только одна инициализация.
См. :term:`глоссарий <warm_start>`.
False
verbose verbose: int, по умолчанию=0

Включает подробный вывод. Если значение равно 1, выводятся текущая
инициализация и каждый шаг итерации. Если значение больше 1,
также выводятся логарифм вероятности и время,
затраченное на каждый шаг.
0
verbose_interval verbose_interval: int, по умолчанию=10

Количество итераций до следующего вывода.
10
Обученные атрибуты
Имя Тип Значение
converged_ converged_: bool

True, если достигнута сходимость лучшего результата EM, иначе False.
bool True
covariances_ covariances_: array-like

Ковариация каждого компонента смеси.
Форма зависит от `covariance_type`::

(n_components,) для 'spherical',
(n_features, n_features) для 'tied',
(n_components, n_features) для 'diag',
(n_components, n_features, n_features) для 'full'

Пример использования ковариаций см. в
:ref:`sphx_glr_auto_examples_mixture_plot_gmm_covariances.py`.
ndarray[float64](2, 2, 2) [[[ 2.89, 0.68], [ 0.68, 0.17]], [[ 0.47,-0.01], [-0.01, 0.46]]]
lower_bound_ lower_bound_: float

Значение нижней границы логарифма правдоподобия (обучающих данных
относительно модели) для лучшего результата EM.
float64 -2.233
lower_bounds_ lower_bounds_: array-like формы (`n_iter_`,)

Список значений нижней границы логарифма правдоподобия для каждой
итерации лучшего результата EM.
list [np.float64(-2...0495624935283), np.float64(-2...4448492771387), np.float64(-2...5645944775564), np.float64(-2...8322149565912), ...]
means_ means_: array-like формы (n_components, n_features)

Среднее значение каждого компонента смеси.
ndarray[float64](2, 2) [[-0.04,-0. ], [-3.99, 1. ]]
n_features_in_ n_features_in_: int

Количество признаков, обнаруженных при вызове :term:`fit`.

.. versionadded:: 0.24
int 2
n_iter_ n_iter_: int

Количество шагов, потребовавшихся лучшему результату EM для достижения сходимости.
int 5
precisions_ precisions_: array-like

Матрицы точности для каждого компонента смеси. Матрица точности
является обратной к матрице ковариации. Матрица ковариации
симметрична и положительно определена, поэтому смесь гауссовых распределений
можно эквивалентно параметризовать матрицами точности. Хранение
матриц точности вместо матриц ковариации повышает эффективность вычисления
логарифма правдоподобия новых выборок во время тестирования.
Форма зависит от `covariance_type`::

(n_components,) для 'spherical',
(n_features, n_features) для 'tied',
(n_components, n_features) для 'diag',
(n_components, n_features, n_features) для 'full'
ndarray[float64](2, 2, 2) [[[ 6.18,-24.84], [-24.84,105.76]], [[ 2.15, 0.04], [ 0.04, 2.19]]]
precisions_cholesky_ precisions_cholesky_: array-like

Разложение Холецкого матриц точности каждого компонента смеси.
Матрица точности является обратной к матрице ковариации.
Матрица ковариации симметрична и положительно определена, поэтому смесь
гауссовых распределений можно эквивалентно параметризовать матрицами точности.
Хранение матриц точности вместо матриц ковариации повышает
эффективность вычисления логарифма правдоподобия новых выборок во время
тестирования. Форма зависит от `covariance_type`::

(n_components,) для 'spherical',
(n_features, n_features) для 'tied',
(n_components, n_features) для 'diag',
(n_components, n_features, n_features) для 'full'
ndarray[float64](2, 2, 2) [[[ 0.59,-2.42], [ 0. ,10.28]], [[ 1.46, 0.02], [ 0. , 1.48]]]
weights_ weights_: array-like формы (n_components,)

Веса каждого компонента смеси.
ndarray[float64](2,) [0.5,0.5]


Построение графика оценок BIC

Чтобы упростить построение графика, можно создать pandas.DataFrame на основе результатов перекрёстной проверки, выполненной поиском по сетке. Мы меняем знак оценки BIC на противоположный, чтобы показать эффект её минимизации.

import pandas as pd

df = pd.DataFrame(grid_search.cv_results_)[
    ["param_n_components", "param_covariance_type", "mean_test_score"]
]
df["mean_test_score"] = -df["mean_test_score"]
df = df.rename(
    columns={
        "param_n_components": "Number of components",
        "param_covariance_type": "Type of covariance",
        "mean_test_score": "BIC score",
    }
)
df.sort_values(by="BIC score").head()
Количество компонентов Тип ковариации Оценка BIC
19 2 full 1046.829429
20 3 full 1084.038689
21 4 full 1114.517272
22 5 full 1148.512281
23 6 full 1179.977890


import seaborn as sns

sns.catplot(
    data=df,
    kind="bar",
    x="Number of components",
    y="BIC score",
    hue="Type of covariance",
)
plt.show()
plot gmm selection

В данном случае модель с 2 компонентами и полной ковариацией (соответствующая истинной генеративной модели) имеет наименьшую оценку BIC, поэтому поиск по сетке выбирает именно её.

Построение графика лучшей модели

Для отображения каждого гауссовского компонента выбранной модели построим эллипс. Для этого необходимо найти собственные значения матриц ковариации, возвращаемых атрибутом covariances_. Форма этих матриц зависит от covariance_type:

  • "full": (n_components, n_features, n_features)
  • "tied": (n_features, n_features)
  • "diag": (n_components, n_features)
  • "spherical": (n_components,)
from matplotlib.patches import Ellipse
from scipy import linalg

color_iter = sns.color_palette("tab10", 2)[::-1]
Y_ = grid_search.predict(X)

fig, ax = plt.subplots()

for i, (mean, cov, color) in enumerate(
    zip(
        grid_search.best_estimator_.means_,
        grid_search.best_estimator_.covariances_,
        color_iter,
    )
):
    v, w = linalg.eigh(cov)
    if not np.any(Y_ == i):
        continue
    plt.scatter(X[Y_ == i, 0], X[Y_ == i, 1], 0.8, color=color)

    angle = np.arctan2(w[0][1], w[0][0])
    angle = 180.0 * angle / np.pi  # convert to degrees
    v = 2.0 * np.sqrt(2.0) * np.sqrt(v)
    ellipse = Ellipse(mean, v[0], v[1], angle=180.0 + angle, color=color)
    ellipse.set_clip_box(fig.bbox)
    ellipse.set_alpha(0.5)
    ax.add_artist(ellipse)

plt.title(
    f"Selected GMM: {grid_search.best_params_['covariance_type']} model, "
    f"{grid_search.best_params_['n_components']} components"
)
plt.axis("equal")
plt.show()
Selected GMM: full model, 2 components

Общее время выполнения скрипта: (0 минут 1.569 секунды)

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_gmm_selection.ipynb

Download Python source code: plot_gmm_selection.py

Download zipped: plot_gmm_selection.zip

Связанные примеры

Эллипсоиды модели гауссовой смеси

Выбор модели Lasso с помощью информационных критериев

Линейный и квадратичный дискриминантный анализ с эллипсоидом ковариации

Синусоида и модель гауссовой смеси

© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/auto_examples/mixture/plot_gmm_selection.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API