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

2014-05-22

Advice for Applying Machine Learning


После линейной регрессии была логистическая регрессия. А потом начались нейросети — Neural Networks. Потом нас учили правильно применять изученные алгоритмы.

В частности, как оценивать успешность обучения машины, удачность выбранных параметров.

Внезапно, самым толковым способом оценки успешности обучения машины оказалась оценка среднеквадратичной ошибки. Это значит — надо посмотреть на выдаваемую ошибку (разница между вычисленным значением и желаемым), результат Cost Function.
Фишка в том, что во время обучения алгоритм занимался минимизацией ошибки для известного набора данных — training set (тренировочный набор). Поэтому, очевидно, для оценки успешности нам нужен другой набор данных, test set. Если такового нет, его надо заранее выделить из трен.набора. Ошибка выдаваемая на тестовом наборе показывает, насколько успешно справляется обученная машина с предсказанием будущего результата. Фактически — это метрика для оценки успешности обучения.

Есть еще нюанс. В процессе обучения машины алгоритму скармливаются разные параметры, например значение параметра регуляризации. Правильный способ подбора этого параметра — скармливать машине разные варианты и смотреть, какой из них даст меньшую ошибку на cross validation наборе данных. Этот набор кросс валидации очень похож по сути на тестовый набор данных, только служит не для оценки успешности обучения, а для выбора оптимальных параметров алгоритма/модели.

Потом нас научили как оценивать склонность алгоритма к high bias/high variance — суть underfitting/overfitting (high bias, партийная кличка underfitting — это когда, условно говоря, график функции недостаточно кривой, когда дуга описывается ее хордой, к примеру; high variance, партийная кличка overfitting — это наоборот, когда вместо прямой, соединяющей две точки, алгоритм строит кривую, проходящую через эти точки). Все это под соусом – «не торопитесь собирать больше данных для трен.сета».

Фишка тут в том, что надо построить learning curves — значения ошибки для трен.сета и набора кросс валидации в зависимости от размера трен.сета (а можно — в зависимости от какого-либо параметра модели).

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


Этот метод кривых обучения позволяет провести диагностику, после чего можно решить, что делать дальше:
  • набрать еще данных? помогает только при high variance
  • уменьшить количество фичей? только при high variance
  • добавить фичей? может помочь при high bias
  • добавить степеней в полином? может помочь при high bias
  • уменьшить лямбду? при high bias
  • увеличить лямбду? при high variance

А еще было про важность изучения тех записей из набора кросс валидации, на которых алгоритм ошибается. А еще было про skewed classes:

Accuracy = (true positives + true negatives) / (total examples)
Precision = (true positives) / (true positives + false positives)
Recall = (true positives) / (true positives + false negatives)
F1 score = (2 * precision * recall) / (precision + recall)

но мне уже лениво расписывать эти фишки. Притомился. Может быть потом, если будет стимул.


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


original post http://vasnake.blogspot.com/2014/05/advice-for-applying-machine-learning.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) Java (22) humor (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) Klaipeda (14) 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) 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) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)