Сжатие котиков с помощью PCA😊 Эти котики просто хотели мурчать, залезать в коробки и сталкивать всё со стола. Но сингулярность не могла обойти стороной и их тоже. Им пришлось быть пожатыми с помощью сингулярного разложения
😫.
🥹 Четыре случайно выбранных
жертвы котика демонстрируют, как можно сжимать изображения с помощью truncated SVD.
Если векторизовать весь датасет, то получится матрица
A размером
29843
(кол-во котиков) х
4096
(картинки 64х64 преобразуем в ч\б и вытягиваем в вектор).
😬 У этой матрицы (как и у любой другой) можно посчитать SVD и найти сингулярные векторы. Зная их и сингулярные числа - легко спроецировать котиков в пространство меньшей размерности, а так же восстановить матрицу исходного размера, но меньшего ранга, оставив ненулевыми только r первых компонент матрицы сингулярных чисел.
😐 В таком случае в качестве векторов, на которые мы проецируем, выступают собственные векторы матрицы
Aᵀ A. Эта идея использовалась в качестве системы распознавания лиц. Каждый человек раскладывался в базис таких вот
eigenfaces. А сами главные компоненты (они же сингулярные векторы) для датасета котиков (или
eigencats) - в комментариях к посту.
💻 Ссылка на код для построения анимации.