Собственные значения и идея PCA
Собственный вектор — направление, которое матрица только растягивает, не поворачивая; это ключ к PCA и снижению размерности.
Собственный вектор матрицы A — ненулевой вектор v, который A лишь масштабирует:
A·v = λ·v. Число λ — собственное значение (во сколько раз растягивается).
Особые направления преобразования
Обычно матрица и поворачивает, и растягивает вектор. Но у каждого преобразования есть выделенные направления, которые оно не поворачивает — только удлиняет или укорачивает. Это собственные векторы, а коэффициент растяжения — собственное значение. Если λ = 3, вектор вдоль этого направления станет в 3 раза длиннее, но смотреть будет туда же. Эти направления — «скелет» преобразования.
Находим главное собственное направление степенным методом
Есть простой итеративный приём — степенной метод: берём случайный вектор и много раз умножаем на матрицу, каждый раз нормируя. Вектор «притягивается» к направлению с наибольшим собственным значением. Реализуем руками для симметричной матрицы.
import math
def matvec(M, v):
return [sum(M[i][j] * v[j] for j in range(len(v))) for i in range(len(M))]
def norm(v):
return math.sqrt(sum(x * x for x in v))
# Симметричная матрица: собственные значения 3 и 1
A = [[2, 1],
[1, 2]]
v = [1.0, 0.0] # стартовый вектор
for _ in range(50):
w = matvec(A, v) # применяем преобразование
v = [x / norm(w) for x in w] # нормируем
# Собственное значение через отношение Рэлея: λ = v·(A v)
Av = matvec(A, v)
lam = sum(Av[i] * v[i] for i in range(len(v)))
print("Главный собственный вектор:", [round(x, 4) for x in v])
print("Собственное значение λ:", round(lam, 4))
# Проверка: A·v должно равняться λ·v
print("A·v =", [round(x, 4) for x in Av])
print("λ·v =", [round(lam * x, 4) for x in v])
Вывод:
Главный собственный вектор: [0.7071, 0.7071] Собственное значение λ: 3.0 A·v = [2.1213, 2.1213] λ·v = [2.1213, 2.1213]
Вектор сошёлся к направлению (0.71, 0.71) — это диагональ (1, 1), нормированная до длины 1. Матрица растягивает его ровно в 3 раза: A·v = 3·v. Проверка совпала.
Связь с PCA
PCA (метод главных компонент) — самый частый способ снизить размерность данных. Идея: построить по данным ковариационную матрицу (она описывает, как признаки разбросаны и связаны), найти её собственные векторы — это и есть главные компоненты, направления наибольшего разброса данных. Собственное значение показывает, сколько «дисперсии» (информации) лежит вдоль направления. Оставив пару направлений с самыми большими собственными значениями, мы сжимаем данные с минимальной потерей. Так 784-мерные картинки ужимают до десятков чисел.
| Объект | Смысл в PCA |
| Ковариационная матрица | как признаки разбросаны и связаны |
| Собственный вектор | направление главной компоненты (оси разброса) |
| Собственное значение | сколько дисперсии лежит вдоль этой оси |
На практике собственные значения многомерных матриц считают библиотекой (например numpy.linalg.eig), но идея — ровно та, что мы проверили руками степенным методом.
# В numpy собственные значения и векторы — одной строкой (тут не запустится)
import numpy as np
A = np.array([[2.0, 1.0], [1.0, 2.0]])
values, vectors = np.linalg.eig(A)
print(values) # [3. 1.]
Итог
- Собственный вектор — направление, которое матрица только растягивает: A·v = λ·v.
- Собственное значение λ — коэффициент растяжения вдоль этого направления.
- Степенной метод находит главное собственное направление повторным умножением и нормировкой.
- PCA = собственные векторы ковариационной матрицы; они задают оси наибольшего разброса для сжатия данных.