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

2014-06-05

SVM, Kernels


После линейной регрессии была логистическая регрессия. А потом начались нейросети — Neural Networks. Потом нас учили правильно применять изученные алгоритмы (Advice for Applying Machine Learning). А потом нам рассказали про Support Vector Machines (SVMs) и Kernels. Это по типу логистической регрессии, только лучше, по крайней мере, в некоторых случаях.

SVM еще называют Large Margin Classificators, потому как результатом применения SVM становится такое решение классификатора, которое проводит разделительную черту между классами так, чтобы расстояние до черты было наибольшим. То есть SVM строит наиболее качественный классификатор (если применять метод правильно).

Основная идея SVM классификатора в том, что Cost Function несколько мофицируется, с тем, чтобы обеспечить обнуление цены при пороговых значениях полинома гипотезы.

Математика, стоящая за оптимизацией такой интересной Cost Function построена на работе с векторами их проекциями и длинами. Возможно поэтому метод и называется Support Vector Machine. При этом есть достаточное количество хороших библиотек для использования SVM «из коробки».

До сих пор вроде все хорошо, можно сделать вывод, что SVM лучше логистической регресси, ибо дает более четкое разделение на классы.

Но тут в тему ворвались Kernels. Как нам обьяснили, SVM + Kernels это прекрасно, ибо, в отличие от логистической регрессии или нейросетей, машина перемалывает вычисления этого комбо сравнительно быстро. И есть огромный плюс — легкость получения нелинейных классификаторов.

Что же такое Kernels? Это способ определения фич (переменных модели, коэффициентов полинома) для полинома в тех случаях, когда нужна нелинейная модель. Традиционно в этих случаях применяют создание новых фич из имеющихся путем возведения в степень — квдрат, куб и т. д. Но можно применить Kernels.

Если на пальцах, то Kernel Function это функция похожести (similarity) одной записи датасета на другую. Только в алгоритме вычисляют похожесть между записями датасета и «landmarks». Лендмарки — это набор точек в пространстве датасета. Если проще — образцовые записи из датасета.

И если в полиноме гипотезы заменить исходные фичи на значения этих Kernel Functions, то получим метод Kernels для вычисления значений гипотезы, и как результат оптимизации Cost Function для этой гипотезы — нелинейный классификатор.

Тут есть фокус, связанный с вычислительной трудностью — лендмарки назначаются по одному для каждой записи данных тренировочного сета. Поэтому размер перемножаемых матриц может быть очень большим, а их ведь надо не только перемножать. Короче, вычислять такие огромные матрицы — дорого, по памяти если операции векторизовать, по времени, если экономить память.

Тем не менее, считается, что для некоторых случаев SVM + Kernels это здорово и круто.

Обычно применяют Gaussian Kernels — функция похожести дает холм Гауссова распределения.

Есть еще часто применяемый linear kernel aka no kernel, который дает обычный линейный классификатор.

В общем, если количество фич относительно мало, до 1000, а количество записей данных достаточно, первые десятки тысяч — можно использовать SVM + Gaussian Kernel. И это позволить выработать достойный нелинейный классификатор.

В остальных случаях (много фич и небольшой датасет, мало фич но датасет огромен) — используй SVM с линейным ядром или логистическая регрессия.


В практическом занятии мы строили распознавалку спама, используя SVM + Gaussian Kernel.


original post http://vasnake.blogspot.com/2014/06/svm-kernels.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)