StatMod и ML

Apr 24, 2019 18:08

Рассмотрим, чем полезен StatMod в плане инженерии ML и почему "преподаваемый" ML тут проигрывает. Под "преподаваемым" ML я имею в виду подход, который воспроизводится обычно на курсах, статьях и проч. Ибо, вообще говоря, тут не может быть принципиальной разницы между ML и (Mathematical) Statistics. Т.е. всякий метод из матстатистики можно привнести в ML.

Я вообще не хочу рассматривать различие между статистикой и МЛ, гораздо существеннее разница между probabilistic и nonprobablistic моделированием. Для простоты будем считать, что ML всегда работает с моделями данных (возможно неявно) - как впрочем и статистика. Но эти модели могут быть вероятностные, а могут быть и невероятностные. И вместо StatMod в заголовке точнее будет написать ProbMod.

Вероятностные модели вводят ограничения, но взамен мы получаем теоретически обоснованные принципы работы с этими моделями. В то время как, статистические методы вообще шире, но там проще напороться на проблемы, ежели отсутствует стройная теория (но там может присутствовать стройная теория невероятностной природы, как например в случае SVM). Хотя все эти обоснованности (типа там consistency unbiasedness оценок тоже не панацея).

Рассмотрим же наконец, почему Stat/ProbMod полезен в контексте инженерии ML.
Один из плюсов - это скрытые (латентные) переменные, которые упрощают моделирование (но осложняют оценку параметров). К примеру, в ML различают supervised, unsupervised и seimsupervised learning, а в статистике это различие, если и есть (например, заимствовано из ML), но не так существенно. Ибо с помощью латентных переменных мы можем замоделировать отсутствующие метки (labels). Например, классификация - это когда мы метки наблюдаем, а кластеризация - говорим, что они неявно присутствует. Ну и далее, применяем те же принципы для оценки параметров, независимо от supervised'ности. По тем же причинам, мы можем удобно смешить размеченные и неразмеченные данные. То же самое касается и отсутствующих данных, их тоже можно заменять латентными переменными.
Замечу, что латентные переменные можно использовать не только в вероятностных моделях, но в вероятностном случае у нас есть обоснованные методы для оценки параметров (MLE, MAP, EM etc).

Второй момент связан с тем, что у нас есть обоснованные подходы для работы с не IID данными (independent and identically distributed). Т.е. если нам попались данные, когда хочеть учесть зависимость и/или различия в распределении, то вероятностные подход нам дает инструментарий и все такое. Без опоры на теорию конечно тоже можно работать, но в контексте инженерии это будет гораздо более запарно, а значит с большой вероятностью неприемлимо.

Два популярных случая, когда данные не есть независимые: временные данные и реляционные данные. Т.е. если мы такие данные прямолинейным образом сконвертируем в табличку, то оно конечно сработает (в смысле компьютер схавает), но могут быть всеразличные сюрпризы. В частности, стандартные ошибки для параметров будут кривые (но в контексте ML нам обычно это по барабану).
Тем не менее, часто хочется как-то учесть зависимости. И StatMod дает фреймворк для этого. В ML же зачастую этот аспект просто игнорируют.

Правда, мой опыт говорит, что вовсе необязательно делать полноценное вероятностное моделирование при решении ML задач. Я бы сказал, что полезно этим инструментарием владеть (в частности, знать что такое IID и примеры когда не IID и чем это может грозить) и посвещать некоторое время вероятностному моделированию. Ну и учитывать это при конструировании МЛ алгоритма.

Один из вариантов, как это может выглядеть. Допустим мы работаем с текстом с помощью Multinomial или Poisson Naive Bayes, которые подразумевают, что у нас counts, т.е. кол-ва тех или иных слов. Что формально нам не дает право использовать какие-то фичи (например, TF-IDF). Но не дает в рамках ProbMod, а в рамках ML мы берем те же формулы, только используем то что хотим, не обязательно каунты (если конечно формулы допускают это).

Другой вариант. Допустим мы используем тот же Naive Bayes для текста. Его несложно применить для semi-supervised случая, т.е. там где нам метки известны, берем их, а где нет - вставляем латентные переменные. Ну и например используем EM алгоритм для оценки параметров.
Но, допустим мы считаем что Naive Bayes в чистом виде может плохо работать, и хотим попробовать дискриминантную модель типа SVM или LR. Но как совместить его с semi-supervised подходом?
Конечно тут могут быть разные варианты. Но можно к примеру, обучить NB модель с помощью semisupervised подхода, а потом использовать логарифмы NB оценок для параметров (log (p(w|C1)/p(w|C2))) в качестве фич, а поверх прогнать регуляризованную LR/SVM модель на размеченных данных. При этом можно рассматривать NB фичи как разновидность регуляризации, log counts будут придавать больше значения словам, которые чаще встречаются в одном классе нежели другом. И при этом на оценки повлияют и неразмеченные данные.

Еще один вариант. Можно чутка модифицировать EM алгоритм и воткнуть туда дискриминантную модель вместо генеративной (можно софт кластеринг заменить на хард кластеринг, т.е. использовать классификацию вместо mixture модели, или использовать вероятности, выдаваемые LR для неразмеченных данных как веса).

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