Alterna · учебный материал
06.6 Какие направления данных важны для рисунка
Выберем направление, вдоль которого центрированные точки разбросаны сильнее всего. Оно полезно для сжатия, но не обязано быть смысловым признаком.
Что в этом материале
- Сначала центр, затем направление
Содержание и основные понятия
На предыдущей странице: группы без готовых правильных ответов.
Выберем направление, вдоль которого центрированные точки разбросаны сильнее всего. Оно полезно для сжатия, но не обязано быть смысловым признаком.
Подбор прямой и разделение точек позволяют увидеть процесс обучения на простых данных. Проверочные ответы не участвуют в исправлениях.
Координаты и расчёт геометрического примера приведены в тексте. Для изменения пространственного рисунка включитеJavaScript.
Сначала центр, затем направление
Для X[N,d] вычитаем среднее каждого признака и получаем Xc. В лаборатории covariance C=XcᵀXc/N. Деление наN−1 даёт другой масштаб eigenvalues, но теже eigenvectors приN>1. Первое PCA-направление v₁ максимизирует vᵀCv при||v||₂=1 и является eigenvector крупнейшего eigenvalue. Опора: M01 §2.12.
z
i
=
v
1
T
(
x
i
−
x
ˉ
)
,
x
^
i
=
x
ˉ
+
z
i
v
1
.
z_i=v_1^T(x_i-\bar x),\qquad
\hat x_i=\bar x+z_iv_1.
z
i
=
v
1
T
(
x
i
−
x
ˉ
)
,
x
^
i
=
x
ˉ
+
z
i
v
1
.
Для точек(t,.5t),t=−2,−1,0,1,2 среднее0. C=[[2,1],[1,.5]], eigenvalues2.5и0. Главная ось пропорциональна[2,1], нормированный вектор[2,1]/√5. Все точки восстанавливаются по однойкоординате безошибки: dataset лежит на прямой.
Эксперимент.
Добавьте всем y одинаковыйoffset. Центрирование должно убрать его изcovariance, а восстановленные точки сохранить новыйцентр. Добавьте поперечное возмущение: появится второе eigenvalue и ненулеваяошибка rank1. ЗнакPC может обратиться без изменения проекции; при равных eigenvalues направление не уникально.
Граница.
PCA ищет дисперсию, не важность дляtarget и не «истинный смысл». Большой шумовой признак может стать первойкомпонентой. Fit mean/basis на test создаёт leakage. Следующий шаг — научиться строить нелинейные признаки внутри модели:
искусственный нейрон
.
points=[[t,.5*t] for t in [-2,-1,0,1,2]]
C=[[sum(row[i]*row[j] for row in points)/5 for j in range(2)] for i in range(2)]
assert C==[[2,1],[1,.5]]
Код повторяет только что разобранные операции.
Полный проверяемыйPython-пример главы
доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.
PCA не использует target и не обещает семантическую важность.
Как выглядит один элемент, из которого строится более сложная модель?
Python-примеры главы 06
Академическая база →