Spec-Zone.ru › scikit-learn

Примечание

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

FastICA на 2D облаках точек

Этот пример визуально иллюстрирует сравнение результатов с использованием двух различных методов анализа компонентов.

Анализ независимых компонент (ICA) против Главного компонента анализа (PCA).

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

С другой стороны, PCA находит ортогональные направления в исходном пространстве признаков, которые соответствуют направлениям, отвечающим за максимальную дисперсию.

Здесь мы моделируем независимые источники с помощью сильно ненормального процесса, 2-х студентов Т с малым числом степеней свободы (рисунок в левом верхнем углу). Мы смешиваем их, чтобы создать наблюдения (рисунок в правом верхнем углу). В этом исходном пространстве наблюдений направления, определенные PCA, представлены оранжевыми векторами. Мы представляем сигнал в пространстве PCA после отбеливания дисперсией, соответствующей векторам PCA (внизу слева). Запуск ICA соответствует поиску поворота в этом пространстве для определения направлений максимальной ненормальности (внизу справа).

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

Генерация образцовых данных

import numpy as np

from sklearn.decomposition import PCA, FastICA

rng = np.random.RandomState(42)
S = rng.standard_t(1.5, size=(20000, 2))
S[:, 0] *= 2.0

# Mix data
A = np.array([[1, 1], [0, 2]])  # Mixing matrix

X = np.dot(S, A.T)  # Generate observations

pca = PCA()
S_pca_ = pca.fit(X).transform(X)

ica = FastICA(random_state=rng, whiten="arbitrary-variance")
S_ica_ = ica.fit(X).transform(X)  # Estimate the sources

Вывод результатов

import matplotlib.pyplot as plt


def plot_samples(S, axis_list=None):
    plt.scatter(
        S[:, 0], S[:, 1], s=2, marker="o", zorder=10, color="steelblue", alpha=0.5
    )
    if axis_list is not None:
        for axis, color, label in axis_list:
            x_axis, y_axis = axis / axis.std()
            plt.quiver(
                (0, 0),
                (0, 0),
                x_axis,
                y_axis,
                zorder=11,
                width=0.01,
                scale=6,
                color=color,
                label=label,
            )

    plt.hlines(0, -5, 5, color="black", linewidth=0.5)
    plt.vlines(0, -3, 3, color="black", linewidth=0.5)
    plt.xlim(-5, 5)
    plt.ylim(-3, 3)
    plt.gca().set_aspect("equal")
    plt.xlabel("x")
    plt.ylabel("y")


plt.figure()
plt.subplot(2, 2, 1)
plot_samples(S / S.std())
plt.title("True Independent Sources")

axis_list = [(pca.components_.T, "orange", "PCA"), (ica.mixing_, "red", "ICA")]
plt.subplot(2, 2, 2)
plot_samples(X / np.std(X), axis_list=axis_list)
legend = plt.legend(loc="upper left")
legend.set_zorder(100)

plt.title("Observations")

plt.subplot(2, 2, 3)
plot_samples(S_pca_ / np.std(S_pca_))
plt.title("PCA recovered signals")

plt.subplot(2, 2, 4)
plot_samples(S_ica_ / np.std(S_ica_))
plt.title("ICA recovered signals")

plt.subplots_adjust(0.09, 0.04, 0.94, 0.94, 0.26, 0.36)
plt.tight_layout()
plt.show()
True Independent Sources, Observations, PCA recovered signals, ICA recovered signals

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_ica_vs_pca.ipynb

Download Python source code: plot_ica_vs_pca.py

Download zipped: plot_ica_vs_pca.zip

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

Выделение независимых источников с использованием FastICA

Дисперсия обычного метода наименьших квадратов и регрессии с гребнем

Сравнение LDA и PCA 2D проекция набора данных Ирис

Один оценочный метод против бэггинга: разложение смещения-дисперсии

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

Spec-Zone.ru

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