Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2014-06-26

PCA


После линейной регрессии была логистическая регрессия. А потом начались нейросети — Neural Networks. Потом нас учили правильно применять изученные алгоритмы (Advice for Applying Machine Learning). А потом нам рассказали про Support Vector Machines (SVMs) и Kernels.
А потом была неделя посвященная темам Clustering (K-Means) и Dimensionality Reduction (PCA).

Сегодня разберем тему снижения размерности.

Dimensionality Reduction — штука довольно занятная в контексте Machine Learning, ибо, в отличие от предсказания злокачественности опухоли с помощью нейросети, к примеру, не несет непосредственной пользы. А вот опосредованно вполне может пригодится.
Одно из применений снижения размерности — сжатие данных. Было в вашем наборе данных две характеристики, а мы оставим одну — сжали данные вдвое.
Другое применение — ускорение обучения машины. Вместо обработки матриц 10000х100500000 можно обрабатывать матрицы 1000х100500000, это будет заметно быстрее.

А еще можно применить снижение размерности для визуализации данных. Если трехмерный график мы еще можем усвоить, то тысячемерный — увольте.

Метод снижения размерности называется Principal Component Analysis (PCA).
Этот метод заключается в нахождении такой редуцированной поверхности в многомерном пространстве (линии на двумерной плоскости, к примеру), для которой сумма квадратов расстояний от поверхности до точек датасета минимальна.

Задача может показаться похожей на линейную регрессию, но это не так. И Cost Function другая и в датасете нет деления на переменные и цель/значение (X, Y). Все фичи датасета – это X. Таким образом, снижение размерности относится к разряду Unsupervised Learning, в отличие от линейной регрессии, относящейся к Supervised Learning.

Что делает PCA?
PCA для нас находит по исходному датасету векторы уменьшенной размерности и вычисляет новые фичи для этой новой размерности.

Математически это делается так:
найти для датасета Covariance Matrix (ковариантную матрицу) — матрица n,n из суммы произведений фич;
найти Eigenvectors (эйгенвекторы) aka «singular value decomposition» этой матрицы.
Первые K векторов из матрицы U в полученных эйгенвекторах — это и будут искомые векторы уменьшенной размерности.
Умножив транспонированную матрицу из этих векторов на данные датасета, мы получим новый, сжатый датасет, что и требовалось.
Нихрена неясно, зато математически кратко выражено.

Ну и в завершение — а какую бы нам выбрать новую, маленькую, хорошую размерность? Для визуализации данных это не вопрос, тут либо 2, либо 3. А вот для сжатия данных надо выбирать новую размерность осторожно, обдуманно.

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

Ошибка вычисляется как сумма квадратов X - Xapprox поделенная на сумму квадратов X. Ну, не совсем X, конечно, там проекции и длины векторов, см.картинки.
Но для такого вычисления нам надо уметь «восстанавливать» исходное значение Х — разжимать данные обратно, получая Xapprox.

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

Вот и все уменьшение размерности методом PCA. Ковариантная матрица, ейгенвекторы и перемножение пары матриц — математическая запись очень лаконична. А что под капотом — нам не объясняли.


Чуть не забыл. В практическом упражнении мы применили PCA для сжатия данных. На входе был набор картинок 32х32 пикселя — изображения лиц людей. А на выходе мы, определив 36 pricipal components, получили картинки 6х6 пикселей. Только это уже как бы и не картинки, это именно наиболее важные области картинок, отвечающие на наибольшую вариативность — чем лица отличаются одно от другого.

А потом, определив 100 PC, получили картинки 10х10, разжав которые обратно получили ошеломляющий результат — см.иллюстрацию.



original post http://vasnake.blogspot.com/2014/06/pca.html

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Klaipeda (15) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) Baltic (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) seaside (1) serialization (1) shore (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)