Независимый компонентный анализ в машинном обучении
Независимый компонентный анализ (ICA) – одна из альтернатив PCA, которая используется для поиска основных факторов или компонентов из многомерного статистического набора данных. Он отличается от стандартного PCA, потому что ищет статистически независимые и некоррелированные компоненты. Если вы не знаете, что такое ICA в машинном обучении, эта статья для вас. В этой статье я познакомлю вас с независимым анализом компонентов в машинном обучении и его реализацией с помощью Python.
Что такое независимый компонентный анализ?
Иногда очень полезно обработать набор данных чтобы извлечь из него независимые и некоррелированные компоненты. Выполнение такой задачи с использованием стандартного PCA проблематично, потому что в стандартном PCA нет ограничений на независимость компонентов.
Здесь на помощь приходит ICA, который используется для извлечения независимых компонентов из набора данных. Он основан на двух основных допущениях:
- Независимые компоненты должны иметь негауссовское распределение.
- Матрица смешивания невидима.
Первое предположение очень важно, потому что существует очень сильная связь между гауссованностью и независимостью. Если набор данных удовлетворяет этим предположениям, то можно оценить независимые компоненты с помощью ICA.
Независимый анализ компонентов с использованием Python
Чтобы реализовать независимый компонентный анализ с использованием Python, нам сначала понадобится набор данных, значения которого центрированы на нуле. Это означает, что среднее значение в наборе данных должно быть нулевым. Итак, давайте начнем с импорта набора данных и центрирования его значений до нуля:
from sklearn.datasets import load_digits import numpy as np def zero_center(X): return X - np.mean(X, axis=0) digits_data = digits = load_digits() x = zero_center(digits_data["data"].astype(np.float64)) np.random.shuffle(x) print(x.shape)
Результат:
(1797, 64)
Теперь следующий шаг – использовать алгоритм ICA для этих данных, чтобы найти независимые компоненты. Мы можем использовать класс FastICA, предоставляемый библиотекой scikit-learn, для реализации ICA с использованием Python:
from sklearn.decomposition import FastICA ica = FastICA(n_components=256, max_iter=500, random_state=1000) ica.fit(x) print(x)
Результат:
[[ 0. -0.30383973 -2.20478575 ... 0.2359488 -2.06789093
-0.36449638]
[ 0. 4.69616027 10.79521425 ... -6.7640512 -2.06789093
-0.36449638]
[ 0. -0.30383973 2.79521425 ... 0.2359488 -2.06789093
-0.36449638]
...
[ 0. -0.30383973 5.79521425 ... -5.7640512 -2.06789093
-0.36449638]
[ 0. 0.69616027 2.79521425 ... 0.2359488 -2.06789093
-0.36449638]
[ 0. -0.30383973 4.79521425 ... -0.7640512 -2.06789093
-0.36449638]]
Результирующие компоненты всегда независимы, и вы также можете восстановить образец набора данных из этих значений как их взвешенную сумму.
Резюме
Вот как мы можем реализовать ICA в машинном обучении с помощью языка программирования Python. ICA отличается от стандартного PCA, потому что он ищет статистически независимые и некоррелированные компоненты. Надеюсь, вам понравилась эта статья о том, что такое независимый анализ компонентов в машинном обучении и его реализация с использованием Python.