Изменения

Перейти к: навигация, поиск

Метод главных компонент (PCA)

727 байт убрано, 02:57, 23 января 2020
PCA v0.0.2
'''Метод главных компонент''' (англ. ''Principal Components Analysis, PCA'') — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ. Karl Pearson) <ref>[https://zenodo.org/record/1430636 Pearson, K. (1901). "On Lines and Planes of Closest Fit to Systems of Points in Space"]</ref> в 1901 г. Применяется во многих областях, таких как распознавание образов, компьютерное зрение, сжатие данных и т.п. Вычисление главных компонент сводится к вычислению собственных векторов и собственных значений ковариационной матрицы исходных данных или к [[Сингулярное разложение|сингулярному разложению]] матрицы данных. Иногда метод главных компонент называют преобразованием КархуненаКарунена-Лоэва (англ. ''Karhunen-Loeve'') <ref>[http://fourier.eng.hmc.edu/e161/lectures/klt/node3.html Karhunen-Loeve Transform (KLT)]</ref> или преобразованием Хотеллинга (англ. ''Hotelling transform'').
==Формальная постановка задачи==
Функционал $\Delta^2(G, U)$ зависит только от произведения матриц $G U^T$, поэтому решение задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ определено с точностью до произвольного невырожденного преобразования $R: G U^T = (G R) (R^{-1} U^T)$. Распорядимся свободой выбора $R$ так, чтобы матрицы $U^T U$ и $G^T G$ оказались диагональными. Покажем, что это всегда возможно.
Пусть $\tilde{G} \tilde{U}^T$ {{- --}} произвольное решение задачи.
Матрица $\tilde{U}^T \tilde{U}$ симметричная, невырожденная, положительно определенная, поэтому существует невырожденная матрица $S_{m \times m}$ такая, что $S^{-1} \tilde{U}^T \tilde{U} (S^{-1})^T = I_m$.
Матрица $S^T \tilde{G}^T \tilde{G} S$ симметричная и невырожденная, поэтому существует ортогональная матрица $T_{m \times m}$ такая, что $T^T (S^T \tilde{G}^T \tilde{G} S) T = diag(\lambda_1, ..., \lambda_m) \equiv \Lambda$ {{- --}} диагональная матрица. По определению ортогональности $T^T T = I_m$.
Преобразование $R = S T$ невырождено. Положим $G = \tilde{G} R$, $U^T = R^{-1} \tilde{U}^T$. Тогда
</tex>
где $\lambda_1 , ..., \lambda_n$ - все собственные значения матрицы $F^T F$. Минимум $\Delta^2$ достигается, когда $\lambda_1, ..., \lambda_m$ {{- --}} наибольшие $m$ из $n$ собственных значений.
Собственные векторы $u_1, ..., u_m$, отвечающие максимальным собственным значениям, называют ''главными компонентами''.
Если $m = n$, то $\Delta^2(G, U) = 0$. В этом случае представление $F = G U^T$ является точным и совпадает с сингулярным разложением: $F = G U^T = V D U^T$, если положить $G = V D$ и $\Lambda = D^2$. При этом матрица $V$ ортогональна: $V^T V = I_m$.
Если $m < n$, то то представление $F \approx G U^T$ является приближённым. Сингулярное разложение матрицы $G U^T$ получается из сингулярного разложения матрицы $F$ путём отбрасывания (обнуления) $n - m$ минимальных собственных значений.
===Преобразование Карунена–Лоэва===
Диагональность матрицы $G^T G = \Lambda$ означает, что новые признаки $g_1, ..., g_m$ не коррелируют на обучающих объектахиз обучающей выборки. Ортогональное преобразование $U$ называют ''декоррелирующим'' или преобразованием ''Карунена–ЛоэваКарунена–Лоэва''. Если $m = n$, то о прямое и обратное преобразование вычисляются с помощью одной и той же матрицы $U: F = G U^T$ и $G = F U$.
===Эффективная размерность===
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import decomposition
from sklearn import datasets
y = iris.target
<span style="color[[File:#3D9970># Инициализация графика</span> fig = pltPca iris example.figure(1, figsize=(4, 3)) plt.clf() ax = Axes3D(fig, rect=[0, 0, .95, 1png|275px|thumb|right|Применения PCA к датасету Iris]], elev=48, azim=134) plt.cla()  <span style="color:#3D9970># Преобразование данных датасета Iris, уменьшающее размерность до 32</span>
pca = decomposition.PCA(n_components=3)
pca.fit(X)
X = pca.transform(X)
 
[[File:Sklearn pca plot.png|300px|thumb|right|Применения PCA к датасету Iris]]
<span style="color:#3D9970># Отображение меток и преобразованных данных на графике</span>
for name, label in [('Setosa', 0), ('Versicolour', 1), ('Virginica', 2)]:
ax.text3D(X[y == label, 0].mean(),
X[y == label, 1].mean() + 1.5,
X[y == label, 2].mean(), name,
horizontalalignment='center',
bbox=dict(alpha=.5, edgecolor='w', facecolor='w'))
y = np.choose(y, [1, 2, 0]).astype(np.float)
axplt.clf() plt.cla() plt.scatter(X[:, 0], X[:, 1], X[:, 2], c=y, cmap=plt.cm.nipy_spectral, edgecolor='k') axplt.w_xaxis.set_ticklabelsxlabel([]"PC1") ax.w_yaxis.set_ticklabels([]) ax.w_zaxisplt.set_ticklabelsylabel([]"PC2")
plt.show()
==См. также==
 
*[[Уменьшение размерности]]
*[[Сингулярное разложение]]
 
==Примечания==
<references/>
 
==Источники информации==
 
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82 machinelearning.ru — Метод главных компонент]
#[https://www.youtube.com/watch?v=wcJ0nSUr7ws Лекция "Регрессионный анализ и метод главных компонентов"] {{---}} К.В. Воронцов, курс "Машинное обучение" 2014
15
правок

Навигация