Анализ независимых компонент с использованием FastICA и PCA

Machine LearningMachine LearningBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном задании демонстрируется использование алгоритмов FastICA и PCA, двух популярных методов анализа независимых компонентов. Анализ независимых компонентов (ICA) — это метод разделения многомерных сигналов на аддитивные подкомпоненты, которые максимально независимы. Этот метод находит направления в пространстве признаков, соответствующие проекциям с высокой негауссовостью.

Советы по использованию ВМ

После запуска ВМ перейдите в левый верхний угол и переключитесь на вкладку Notebook, чтобы приступить к практике с использованием Jupyter Notebook.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы столкнетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup(["Advanced Data Analysis and Dimensionality Reduction"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/AdvancedDataAnalysisandDimensionalityReductionGroup -.-> sklearn/decomposition("Matrix Decomposition") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/decomposition -.-> lab-49162{{"Анализ независимых компонент с использованием FastICA и PCA"}} ml/sklearn -.-> lab-49162{{"Анализ независимых компонент с использованием FastICA и PCA"}} end

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

В этом шаге мы генерируем выборочные данные с использованием высоко негауссового процесса, 2-мерного распределения Стьюдента с малым числом степеней свободы.

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 для нахождения ортогональных направлений в исходном пространстве признаков, которые соответствуют направлениям, обусловливающим максимальную дисперсию.

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

Использование алгоритма FastICA

В этом шаге мы используем алгоритм FastICA, который находит направления в пространстве признаков, соответствующие проекциям с высокой негауссовостью.

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

S_ica_ /= S_ica_.std(axis=0)

Построение графиков результатов

В этом шаге мы строим графики результатов с использованием matplotlib.

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:
            axis /= axis.std()
            x_axis, y_axis = axis
            plt.quiver(
                (0, 0),
                (0, 0),
                x_axis,
                y_axis,
                zorder=11,
                width=0.01,
                scale=6,
                color=color,
                label=label,
            )

    plt.hlines(0, -3, 3)
    plt.vlines(0, -3, 3)
    plt.xlim(-3, 3)
    plt.ylim(-3, 3)
    plt.xlabel("x")
    plt.ylabel("y")


plt.figure()
plt.subplot(2, 2, 1)
plot_samples(S / S.std())
plt.title("Истинные независимые источники")

axis_list = [(pca.components_.T, "оранжевый", "PCA"), (ica.mixing_, "красный", "ICA")]
plt.subplot(2, 2, 2)
plot_samples(X / np.std(X), axis_list=axis_list)
legend = plt.legend(loc="нижний правый")
legend.set_zorder(100)

plt.title("Наблюдения")

plt.subplot(2, 2, 3)
plot_samples(S_pca_ / np.std(S_pca_, axis=0))
plt.title("Восстановленные сигналы PCA")

plt.subplot(2, 2, 4)
plot_samples(S_ica_ / np.std(S_ica_))
plt.title("Восстановленные сигналы ICA")

plt.subplots_adjust(0.09, 0.04, 0.94, 0.94, 0.26, 0.36)
plt.show()

Резюме

В этом практическом занятии мы узнали, как использовать алгоритмы FastICA и PCA в Python для выполнения анализа независимых компонент и как визуализировать результаты с использованием matplotlib.