Проецирование
Во втором уроке я упоминал ранг системы векторов
Рассмотрим это понятие поподробнее
Напомню, что рангом векторов я называл количество векторов в базисе линейной оболочке
Эквивалентно можно определить как размерность линейной оболочки векторов (собственно, размерность - это количество векторов в базисе)
Ранг есть и у матриц
Если взять в качестве набора векторов столбцы (или строки, это не важно) матрицы, то их ранг и будет рангом матрицы
Вспомним, что при преобразовании в столбцах матрицы написаны те вектора, в которые переходят базисные
Получается, что если ранг матрицы меньше, чем размерность изначального пространства, то при преобразовании мы не просто сжимаем или поворачиваем пространство, а буквально “схлопываем” на линейную оболочку векторов-столбцов матрицы (которая меньшей размерности)
Если ранг матрицы равен размерности пространства, то мы остаёмся в том же пространстве
Кстати, при замене базиса матрица меняется, но её ранг нет (так как мы просто меняем точку зрения, размерность подпространства не может поменяться)
Важно понять, что эти “схлопывания” в общем случае могут быть вообще не интуитивными
То есть, это не обычная проекция вдоль прямой, к которой мы привыкли
Что нужно, чтобы это была классическая проекция?
Первым приходит в голову то, что если мы уже спроецировали и решили это сделать ещё раз, то ничего не изменится
Оказывается, что это не только необходимое условие, но и достаточное
В операторном виде это выглядит вот так:
(проекторы часто отображают буквой P)
То есть, если второй раз применить преобразование, то ничего не изменится, ведь мы проецируем точки, которые уже лежат в нужном нам месте
Рассмотрим примеры
Самый простой пример - урезание базовых осей:
Здесь четырёхмерное пространство проецируется на (линейную оболочку, если кто забыл)
И это является как раз проектором, потому что
Не таким очевидным проекторов является, например
Тут ранг равен одному, а значит проекция вообще происходит на прямую
Оба этих проектора ортогональные (то есть, под 90 градусов)
Рассмотрим и не ортогональный
Проверим, что это проектор:
Когда это нужно?
Два классических сценария:
-
Борьба с излишней корреляцией
-
Сжатие данных
В обоих случаях нужно найти такие направления, вдоль которых идёт основное изменение данных
Если задать базисные вектора по этим направлениям, то спроецировав на них данные мы потеряем минимум информации (а иногда только улучшим данные для анализа, убрав корреляцию данных)
Пример:
В датасете квартир есть параметры: “площадь”, “количество комнат” и ещё 5 каких-нибудь параметров
Всего данные в 7-мерном пространстве
Понятно, что это зависимые параметры
При анализе эта зависимость может мешать, так ещё и места она занимает
Если найти “направление” этой корреляции, то вместо базисных векторов отвечающих “площади” и “количеству комнат”, можно это направление взять за базисное
И спроецировать изначальное 7-мерное пространство на 6-мерное
Таким образом мы и улучшим данные для анализа и уменьшим занимаемую память
Минус только в том, что новое направление особо ничего значить для реальности не будет