Найти в Дзене
Программист о Data Science

День 9: Сравнение векторов

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

Для наглядности визуализируем вектора на примере двумерного пространства, где значения вектора - это x и y, а линия на графике выходит из координаты (0, 0) и упирается в (x, y):

В данном случае черная и красная линии - вектора (0.5, 0.5) и (0.2, 0.7) соответственно.
В данном случае черная и красная линии - вектора (0.5, 0.5) и (0.2, 0.7) соответственно.

Визуально можно выделить три основных критерия сравнения векторов:

1. Длина вектора

2. Расстояние между векторами

3. Угол между векторами

При этом, что считать длиной вектора и как рассчитывать расстояние - выбирать нам. В общем смысле длина вектора определяется понятием "норма", а векторное пространство для которого определено понятие нормы называется нормированным. Это как интерфейс класса в программировании. Обозначается как ||x||.

Наиболее известные реализации нормы:

Манхэттенская норма - сумма модулей координат.
Манхэттенская норма - сумма модулей координат.
Евклидова норма - квадратный корень от суммы квадратов координат.
Евклидова норма - квадратный корень от суммы квадратов координат.

NumPy уже содержит разные реализации норм-функций:

Сравнение векторов x и y по длине, используя разные нормы.
Сравнение векторов x и y по длине, используя разные нормы.

Расстояние между векторами обобщается понятием "метрика". Метрика выражается через норму разностей сравниваемых векторов:

Расстояние между векторами x и y для разных видов норм.
Расстояние между векторами x и y для разных видов норм.

Зная как считать норму с помощью linalg модуль библиотеки NumPy, несложно найти расстояние векторов:

Евклидова и манхэттенская метрики векторов x и y
Евклидова и манхэттенская метрики векторов x и y

Для расчёта угла между векторами понятия нормы недостаточно. Это легко проверить увеличив длину векторов. Расстояние между векторами увеличится вместе с длиной векторов, а угол останется прежним.

Угол между векторами можно вычислить зная длины векторов и скалярно перемножив вектора, то есть перемножив вектора поэлементно:

Косинус угла между векторами, выраженный через скалярное произведение и произведение длин векторов
Косинус угла между векторами, выраженный через скалярное произведение и произведение длин векторов

Зная NumPy нетрудно подчитать угол между нашими векторами:

Косинус угла между векторами и сам угол в градусах
Косинус угла между векторами и сам угол в градусах
Обратите внимание, что arccos вернёт угол в радианах, соответственно для перевода в привычные градусы требуется дополнительное преобразование через функции np.degrees().

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