scikit-learn
Уменьшение размерности (выбор функции)
Поиск…
Сокращение размера с помощью анализа основных компонентов
Анализ основных компонентов находит последовательности линейных комбинаций признаков. Первая линейная комбинация максимизирует дисперсию признаков (при условии ограничения единицы). Каждая из следующих линейных комбинаций максимизирует дисперсию признаков в подпространстве, ортогональном к тому, что натянуто на предыдущие линейные комбинации.
Общий метод понижения размерности является использование только K первых таких линейных комбинаций. Предположим, что функции представляют собой матрицу X из n строк и m столбцов. Первые k линейных комбинаций образуют матрицу β k из m строк и k столбцов. Продукт X β имеет n строк и k столбцов. Таким образом, полученную матрицу β k можно рассматривать как уменьшение от m до k размерностей, сохраняя части с высокой дисперсией исходной матрицы X.
В scikit-learn
, PCA выполняется с помощью sklearn.decomposition.PCA
. Например, предположим, что мы начинаем с матрицы 100 X 7, построенной так, чтобы дисперсия содержалась только в первых двух столбцах (путем уменьшения числа последних 5 столбцов):
import numpy as np
np.random.seed(123) # we'll set a random seed so that our results are reproducible
X = np.hstack((np.random.randn(100, 2) + (10, 10), 0.001 * np.random.randn(100, 5)))
Давайте сделаем сокращение до 2-х измерений:
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca.fit(X)
Теперь давайте проверим результаты. Во-первых, вот линейные комбинации:
pca.components_
# array([[ -2.84271217e-01, -9.58743893e-01, -8.25412629e-05,
# 1.96237855e-05, -1.25862328e-05, 8.27127496e-05,
# -9.46906600e-05],
# [ -9.58743890e-01, 2.84271223e-01, -7.33055823e-05,
# -1.23188872e-04, -1.82458739e-05, 5.50383246e-05,
# 1.96503690e-05]])
Обратите внимание, что первые два компонента в каждом векторе на несколько порядков больше других, что показывает, что СПС признал, что дисперсия содержится главным образом в первых двух столбцах.
Чтобы проверить соотношение дисперсии, объясненную этим СПС, мы можем рассмотреть pca.explained_variance_ratio_
:
pca.explained_variance_ratio_
# array([ 0.57039059, 0.42960728])