Spec-Zone.ru › scikit-learn

Примечание

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

Методы инициализации GMM

Примеры различных методов инициализации в гауссовых смешанных моделях

См. Гауссовые смешанные модели для получения дополнительной информации об оценщике.

Здесь мы генерируем некоторые примерные данные с четырьмя легко идентифицируемыми кластерами. Цель этого примера — продемонстрировать четыре различных метода для параметра инициализации init_param.

Четыре инициализации — kmeans (по умолчанию), random, random_from_data и k-means++.

Оранжевые ромбы представляют центры инициализации для gmm, сгенерированные параметром init_param. Остальные данные представлены крестиками, а окраска отражает конечную связанную классификацию после завершения GMM.

Числа в правом верхнем углу каждого подграфика представляют количество итераций, необходимых для сходимости GaussianMixture, и относительное время, затраченное на часть алгоритма инициализации. Более короткие времена инициализации, как правило, приводят к большему количеству итераций для сходимости.

Время инициализации — это отношение времени, затраченного данным методом, к времени, затраченному на метод по умолчанию kmeans. Как вы можете видеть, все три альтернативных метода требуют меньше времени для инициализации по сравнению с kmeans.

В этом примере, когда инициализация выполняется с помощью random_from_data или random, модели требуется больше итераций для сходимости. Здесь k-means++ хорошо справляется с низким временем инициализации и низким количеством итераций GaussianMixture для сходимости.

GMM iterations and relative time taken to initialize, kmeans, Iter 8 | Init Time 1.00x, random_from_data, Iter 137 | Init Time 0.55x, k-means++, Iter 11 | Init Time 0.55x, random, Iter 47 | Init Time 0.57x
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

from timeit import default_timer as timer

import matplotlib.pyplot as plt
import numpy as np

from sklearn.datasets._samples_generator import make_blobs
from sklearn.mixture import GaussianMixture
from sklearn.utils.extmath import row_norms

print(__doc__)

# Generate some data

X, y_true = make_blobs(n_samples=4000, centers=4, cluster_std=0.60, random_state=0)
X = X[:, ::-1]

n_samples = 4000
n_components = 4
x_squared_norms = row_norms(X, squared=True)


def get_initial_means(X, init_params, r):
    # Run a GaussianMixture with max_iter=0 to output the initialization means
    gmm = GaussianMixture(
        n_components=4, init_params=init_params, tol=1e-9, max_iter=0, random_state=r
    ).fit(X)
    return gmm.means_


methods = ["kmeans", "random_from_data", "k-means++", "random"]
colors = ["navy", "turquoise", "cornflowerblue", "darkorange"]
times_init = {}
relative_times = {}

plt.figure(figsize=(4 * len(methods) // 2, 6))
plt.subplots_adjust(
    bottom=0.1, top=0.9, hspace=0.15, wspace=0.05, left=0.05, right=0.95
)

for n, method in enumerate(methods):
    r = np.random.RandomState(seed=1234)
    plt.subplot(2, len(methods) // 2, n + 1)

    start = timer()
    ini = get_initial_means(X, method, r)
    end = timer()
    init_time = end - start

    gmm = GaussianMixture(
        n_components=4, means_init=ini, tol=1e-9, max_iter=2000, random_state=r
    ).fit(X)

    times_init[method] = init_time
    for i, color in enumerate(colors):
        data = X[gmm.predict(X) == i]
        plt.scatter(data[:, 0], data[:, 1], color=color, marker="x")

    plt.scatter(
        ini[:, 0], ini[:, 1], s=75, marker="D", c="orange", lw=1.5, edgecolors="black"
    )
    relative_times[method] = times_init[method] / times_init[methods[0]]

    plt.xticks(())
    plt.yticks(())
    plt.title(method, loc="left", fontsize=12)
    plt.title(
        "Iter %i | Init Time %.2fx" % (gmm.n_iter_, relative_times[method]),
        loc="right",
        fontsize=10,
    )
plt.suptitle("GMM iterations and relative time taken to initialize")
plt.show()

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_gmm_init.ipynb

Download Python source code: plot_gmm_init.py

Download zipped: plot_gmm_init.zip

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

Ковариации GMM

Пример инициализации K-Means++

Демонстрация кластеризации K-Means на данных рукописных цифр

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

© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/auto_examples/mixture/plot_gmm_init.html

Spec-Zone.ru

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