Геометрическая интуиция для Data science · Модуль 1: Пространственная линейная алгебра

1.3. Меняем точку зрения

Шаг 1 · Теория

Данные с которыми мы обычно работаем не зависят от того, как мы на них посмотрим.
Если есть какое-то скопление точек, от того, что мы поменяем точку зрения, это скопление не должно распадаться.
Пришло время разобраться с заменой координат.
Сначала разберём алгебраическую часть, в конце урока будет пример использования в данных.

Замена координат это просто другой взгляд на уже имеющиеся вектора.
Стрелки в пространстве как были, так и остались, но мы начинаем их измерять с другой точки зрения (более длинной/короткой линейкой, под другим углом и тд).

Сначала нужно понять, что вообще такое координаты вектора.
Алгебраически координаты это коэффициенты, которые появляются при выражении вектора через базис, то есть:
x=(3,4)=e1x1+e2x2x = (3, 4) = e_1x^1 + e_2x^2

(x1,x2)(x^1, x^2) - как раз числа, являющиеся координатами.

Но мы здесь за геометрией пришли, как это можно представить нагляднее?

Возьмём любой базис и любой вектор, который мы хотим выразить.
Попробуем выражать его последовательно.
Вычтем из нужного вектора какой-нибудь базисный вектор столько раз, сколько нужно, чтобы оставшуюся часть можно было выразить без этого базисного вектора.

Посмотрим на картинку:

Если вычесть из вектора vv вектор e1e_1 чуть больше одного раза, то vv совпадёт по направлению с e2e_2
То, сколько раз нужно вычесть e1e_1- первая координата вектора vv

Аналогично это можно представить как проекцию (не обязательно перпендикулярную)
Если взять фонарь и посветить на вектор vv "вдоль" вектора e2e_2, то "тень" на векторе e1e_1 будет проекцией vv на e1e_1
И то, во сколько раз проекция больше вектора e1e_1 и называется первой координатой вектора

В больших размерностях мы фонариком светим не вдоль одного вектора, а вдоль всех, кроме одного

Шаг 2 · Теория

Что будет, если поменять точку зрения?
Взять другой базис и попробовать уже в нём записать имеющиеся вектора.

Сначала нужно рассчитать новые координаты базисных векторов.
Для этого нужно спроецировать повёрнутые вектора e′1{e'}_1 и e′2{e'}_2 на изначальные e1e_1 и  e2e_2 (то есть, просто выразить их в координатах).
А чтобы найти координаты уже имеющегося стороннего вектора в новой системе нужно спроецировать этот вектор на новые базисные вектора e′1{e'}_1 и e′2{e'}_2.

Посмотрим, что будет, если умножить вектор e1e_1 на 2.
Не трудно понять, что тогда первая координата нашего вектора vv уменьшится в 2 раза (раз линейка увеличилась в 2 раза)
Аналогичным образом работают и остальные преобразования.
Поэтому, чтобы получить новые координаты имеющегося вектора нужно сделать как бы всё "наоборот", относительно того, как мы меняли базис.

Шаг 3 · Теория

Рассмотрим простой пример: повернём базис на угол α\alpha

Новые координаты находятся по формулам (это просто тригонометрия, сильно вдумываться в формулы не нужно):
e1′=cos⁡α⋅e1−sin⁡α⋅e2=(cos⁡α,−sin⁡α)e2′=sin⁡α⋅e1+cos⁡α⋅e2=(sin⁡α,cos⁡α)\begin{array}{l}e_{1'} = \cos\alpha \cdot e_1 - \sin\alpha \cdot e_2 = (\cos\alpha, -\sin\alpha) \\ e_{2'} = \sin\alpha \cdot e_1 + \cos\alpha \cdot e_2 =(\sin\alpha, \cos\alpha) \\\end{array}

Мы уже пришли к выводу, что для пересчёта координат вектора нужно сделать обратную операцию
В данном случае это поворот на угол −α-\alpha:

x′=x∗cos(−α)−y∗sin(−α)=x∗cosα+y∗sinαy′=x∗sin(−α)+y∗cos(−α)=−x∗sinα+y∗cosα\begin{array}{l}{x'} = x * cos{(-\alpha)} - y*sin{(-\alpha)} = x * cos{\alpha} + y*sin{\alpha} \\ {y'} = x * sin{(-\alpha)} + y*cos{(-\alpha)} = -x * sin{\alpha} + y*cos{\alpha}\end{array}

Вот так несложно мы получили новые координаты

Шаг 4 · Теория

Здесь и начинают появляться матрицы.
Дело в том, что выражение одного набора координат вектора через другой в обычной записи писать очень громоздко (особенно в больших размерностях).
Матрицы становятся очень удобным инструментом работы с такими преобразованиями.

Тут важно не запутаться с тем, что мы пересчитываем: координаты новых базисных векторов базиса или координаты уже имеющегося вектора в новом базисе

Координаты новых базисных векторов в старом базисе:

e1′=c1′1e1+⋯+c1′nen,… … … … … … en′=cn′1e1+⋯+cn′nen,\begin{matrix} e_{1'} = c_{1'}^1 e_1 + \dots + c_{1'}^n e_n, \\ \dots \space \dots \space \dots \space\dots \space\dots \space\dots \space \\ e_{n'} = c_{n'}^1 e_1 + \dots + c_{n'}^n e_n, \end{matrix}

Мы так их алгебраически и задаём
Но писать такие системы сложения долго, выглядят они громоздко, да и в код это вставлять неудобно
Поэтому, это же можно сильно удобнее переписать и в матричном виде:

(e1′…en′)=(e1…en)(c1′1…cn′1⋮⋱⋮c1′n…cn′n)=(e1…en)C(e_{1'} \dots e_{n'}) = (e_1 \dots e_n) \begin{pmatrix} c_{1'}^1 & \dots & c_{n'}^1 \\ \vdots & \ddots & \vdots \\ c_{1'}^n & \dots & c_{n'}^n \end{pmatrix} = (e_1 \dots e_n)C

Здесь C - матрица замены координат 
По столбцам этой матрицы записаны координаты новых базисных векторов

Например, тот поворот, который мы недавно получили в матричном виде запишется так:
(e1′e2′)=(e1e2)(cos⁡α−sin⁡αsin⁡αcos⁡α)=(e1e2)C=(e1e2)R(α)(e_{1'} \quad e_{2'}) = (e_1 \quad e_2) \begin{pmatrix} \cos\alpha& -\sin\alpha\\ \sin\alpha& \cos\alpha\end{pmatrix} = (e_1 \quad e_2)C = (e_1 \quad e_2)R(\alpha)

Помните, что для подсчёта координат вектора нужно сделать обратную операцию?
Так вот, в матрицах это буквально так и происходит, нужно, всего лишь, обратить матрицу! (нам сейчас не сильно важно, как это делается, да и в коде это обычно одна строчка)

(x1′⋮xn′)=C−1(x1⋮xn)\begin{pmatrix} x^{1'} \\ \vdots \\ x^{n'} \end{pmatrix} = C^{-1} \begin{pmatrix} x^{1} \\ \vdots \\ x^{n} \end{pmatrix}

Наш поворот в данном случае будет записан вот так:

(x′y′)=(cos⁡αsin⁡α−sin⁡αcos⁡α)(xy)=R−1(α)(xy)\begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} \cos\alpha& \sin\alpha\\ -\sin\alpha& \cos\alpha\end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} = R^{-1}(\alpha)\begin{pmatrix} x \\ y \end{pmatrix}

*Я записываю базисные векторы в строку, а координаты векторов в столбец, это просто соглашение.

Поворот лишь частный пример преобразования, на следующем видео показаны различные преобразования и соответствующие им изменение координат вектора.

 

Шаг 5 · Видео
Шаг 6 · Теория

Что же с Data science?

Представьте, что вы работаете с датасетом о недвижимости и у вас есть два признака:

  • Площадь дома (в м²)

  • Стоимость дома (в у.е.)

Очевидно, что эти признаки сильно зависимы (коррелированы): чем больше площадь, тем выше цена. Если нанести точки на плоскость, они вытянутся вдоль диагонали — это похоже на «сплюснутое облако».

Теперь спросим себя: можно ли найти такой новый базис, в котором эти два признака станут независимыми (некоррелированными)? Оказывается, да — это называют главными компонентами (PCA).

Геометрический смысл:

  • Мы поворачиваем оси так, чтобы первая новая ось (первая главная компонента) указывала вдоль "главного" направления (как бы вдоль самой длинной части облака).

  • Вторая новая ось перпендикулярна первой и «ловит» оставшийся разброс (в нашем примере — отклонения от общей линии цена–площадь).

В этом новом базисе координаты точек:

  • Первая координата — это проекция на главную ось (грубо говоря, «общий размер» объекта).

  • Вторая координата — это отклонение от пропорциональности (например, аномально дорогой или дешёвый дом для своей площади).

И, что важно, эти две новые координаты уже не коррелируют между собой — мы «выпрямили» исходную зависимость.

*Ещё, этот алгоритм часто работает с алгоритмом из предыдущего урока (где мы "сжимали" пространство для сжатия данных).
Можно сначала найти самые важные направления (например, 30 из 100) и остальные 70 просто схлопнуть.
Да, часть данных потеряется, но основа останется.
Часто оставшиеся данные могут даже мешать создавая лишний шум.

Заметно подробнее мы разберём эти два алгоритма чуть позже.

Шаг 7 · Задача

Представьте, что вы анализируете данные о росте людей. Изначально рост был записан в метрах (базисный вектор e1e_1 равен 1 метру). Вы решили изменить систему координат и перевели данные в сантиметры. То есть ваш новый базисный вектор e1′e_{1'} стал в 100 раз короче старого (e1′=0.01e1e'_1 = 0.01e_1).

Что произойдет с числовым значением координаты (числом метров/сантиметров) конкретного человека в новой системе координат?

Выберите один ответ
Шаг 8 · Задача

Мы переходим к новому базису. Новые базисные векторы выражаются через старые следующим образом:
e1′=2e1+3e2e2′=−1e1+4e2\begin{array}{l}e'_1 = 2e_1 + 3e_2 \\e'_2 = -1e_1 + 4e_2\end{array}

Запишите получившуюся матрицу перехода C
(Нужно написать 4 числа, сначала левое верхнее, потом правое верхнее, потом левое нижнее, потом правое нижнее через, пробел)
Пример: 
Матрица C=(1234)C = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} запишется как: 1 2 3 4

Шаг 9 · Теория

В целом, когда мы пользуемся какими-либо алгоритмами работы с данными очень важно отслеживать, зависят ли они от выбора базиса.
Если алгоритм явно показывает какую-то информацию, но его выводы меняются при повороте, то есть два варианта:
1. Алгоритм не особо рабочий и нужно разобраться, почему поворот резко меняет его выводы.
2. У данных есть жёсткая привязка к конкретным осям. В таком случае это всё равно нужно помечать при работе.

Например, если наша задача найти кластеры в данных (скопления точек), чаще всего сами скопления они не зависят от точки обзора.
Классический алгоритм k-means, в стандартной реализации, устойчив к поворотам пространства, но не устойчив к его масштабированию, поэтому, за этим нужно строго следить.
В будущих уроках этот алгоритм будет подробнее разобран.