Как выбрать модель машинного обучения
Заметки Дата Сайентиста: на что обратить внимание при выборе модели машинного обучения — персональный топ-10
Мы снова в эфире и продолжаем цикл заметок Дата Сайентиста и сегодня представляю мой абсолютно субъективный чек-лист по выбору модели машинного обучения.
Это топ-10 свойств задачи и просто пунктов (без порядка в них), с точки зрения которых я начинаю выбор модели и вообще моделирование задачи по анализу данных.
Совсем не обязательно, что у вас он будет таким же — здесь все субъективно, но делюсь опытом из жизни.
А какая у нас вообще цель? Интерпретируемость и точность — спектр
Источник
Пожалуй самый важный вопрос, который стоит перед дата сайентист перед тем, как начать моделирование это:
В чем, собственно, состоит бизнес задача?
Или исследовательская, если речь об академии, etc.
Например, нам нужна аналитика на основе модели данных или наоборот нас только интересуют качественные предсказания вероятности того, что письмо — это спам.
Классический баланс, который я видел, это как раз спектр между интерпретируемостью метода и его точностью (как на графике выше).
Но по сути нужно не просто прогнать Catboost / Xgboost / Random Forest и выбрать модельку, а понять, что хочет бизнес, какие у нас есть данные и как это будет применяться.
На моей практике — это сразу будет задавать точку на спектре интерпретируемости и точности (чтобы это не значило здесь). А исходя из этого уже можно думать о методах моделирования задачи.
Тип самой задачи
Дальше, после того как мы поняли, что хочет бизнес — нам нужно понять к какому математическому типу задач машинного обучения относится наша, например
Данные: имеются два класса и набор записей без меток:
И нужно построить модель, которая разметит эти самые данные:
Или как вариант никаких меток нет и нужно выделить группы:
Как например вот здесь:
Картинки отсюда.
А вот собственно пример иллюстрирует разницу между двумя понятиями: классификация, когда N > 2 классов — multi class vs. multi label
Взято отсюда
Вы удивитесь, но очень часто этот пункт тоже стоит напрямую проговорить с бизнесом — это может сэкономить вам действительно много сил и времени. Не стесняйтесь рисовать картинки и давать простые примеры (но не слишком упрощенные).
Точность и как она определена
Начну с простого примера, если вы банк и выдаете кредит, то на неудачном кредите мы теряем в пять раз больше, чем получаем на удачном.
Поэтому вопрос об измерении качества работы первичен! Или представьте, что у вас присутствует существенный дисбаланс в данных, класс А = 10%, а class B = 90%, тогда классификатор, который просто возвращает B всегда умеет 90% точность! Скорее всего это не то, чтобы хотели увидеть, обучая модель.
Поэтому критично определить метрику оценки модели включая:
Model post analysis
Часто приходится проводить аналитику на основе самой модели. Например, какой вклад имеют разные признаки в исходный результат: как правило, большинство методов могут выдать что-то похожее на вот это:
Однако, что если нам нужно знать направление — большие значения признака A увеличивают принадлежность классу Z или наоборот? Назовем их направленные feature importance — их можно получить у некоторых моделей, например, линейных (через коэффициенты на нормированных данных)
Для ряда моделей, основанных на деревьях и бустинге — например, подходит метод SHapley Additive exPlanations.
Это один из методов анализа модели, который позволяет заглянуть «под капот» модели.
Он позволяет оценить направление эффекта:
Причем для деревьев (и методах на них основанных) он точный. Подробнее об этом тут.
Noise level — устойчивость, линейная зависимость, outlier detection и тд
Устойчивость к шуму и все эти радости жизни — это отдельная тема и нужно крайне внимательно анализировать уровень шума, а также подбирать соответствующие методы. Если вы уверены, что в данных будут выбросы — нужно их обязательно качественно чистить и применять методы устойчивые к шуму (высокий bias, регуляризация и тд).
Также признаки могут быть коллинеарны и присутствовать бессмысленные признаки — разные модели по-разному на это реагируют. Приведем пример на классическом датасете German Credit Data (UCI) и трех простых (относительно) моделях обучения:
Как мы видим просто модель гребневой регрессии, которая имеет высокий bias и регуляризацию, показывает результаты даже лучше, чем CatBoost — тут много признаков не слишком полезных и коллинеарных, поэтому методы, которые к ним устойчивы показывают хорошие результаты.
Еще про DT — а если чуть чуть поменять датасет? Feature importance может поменяться, так как decision trees вообще чувствительные методы, даже к перемешиванию данных.
Вывод: иногда проще — лучше и эффективнее.
Масштабируемость
Действительно ли вам нужен Spark или нейросети с миллиардами параметров?
Во-первых, нужно здраво оценивать объем данных, уже неоднократно доводилось наблюдать массовое использование спарка на задачах, которые легко умещаются в память одной машины.
Спарк усложняет отладку, добавляет overhead и усложняет разработку — не стоит его применять там, где не нужно. Классика.
Во-вторых, нужно конечно же оценивать сложность модели и соотносить ее с задачей. Если ваши конкуренты показывают отличные результаты и у них бегает RandomForest, возможно стоит дважды подумать нужна ли вам нейросеть на миллиарды параметров.
И конечно же необходимо учитывать, что если у вас и правда крупные данные, то модель должна быть способной работать на них — как обучаться по батчам, либо иметь какие-то механизмы распределенного обучения (и тд). А там же не слишком терять в скорости при увеличении объема данных. Например, мы знаем, что kernel methods требуют квадрата памяти для вычислений в dual space — если вы ожидаете увеличение размера данных в 10 раз, то стоит дважды подумать, а умещаетесь ли вы в имеющиеся ресурсы.
Наличие готовых моделей
Еще одна важнейшая деталь — это поиск уже натренированных моделей, которые можно до-обучить, идеально подходит, если:
Pre-trained модели как GPT-2 и BERT могут существенно упростить решение вашей задачи и если уже натренированные модели существуют — крайне рекомендую не проходит мимо и использовать этот шанс.
Feature interactions и линейные модели
Некоторые модели лучше работают, когда между признаками (features) нет сложных взаимодействий — например весь класс линейных моделей — Generalized Additive Models. Есть расширение этих моделей на случай взаимодействия двух признаков под название GA2M — Generalized Additive Models with Pairwise Interactions.
Как правило такие модели показывают хорошие результаты на таких данных, отлично регуляризируются, интерпретируемые и устойчивы к шуму. Поэтому однозначно стоит обратить на них внимание.
Однако, если признаки активно взаимодействуют группами больше 2, то данные методы уже не показывают таких хороших результатов.
Package and model support
Многие крутые алгоритмы и модели из статей бывают оформлены в виде модуля или пакета для python, R и тд. Стоит реально дважды подумать, прежде чем использовать и в долгосрочной перспективе полагаться на такое решение (это я говорю, как человек написавший немало статей по ML с таким кодом). Вероятность того, что через год будет нулевая поддержка — очень высок, ибо автору скорее всего сейчас необходимо заниматься другими проектами нет времени, и никаких incentives вкладываться в развитие модуля или репозитория.
В этом плане библиотеки а-ля scikit learn хороши именно тем, что у них фактически есть гарантированная группа энтузиастов вокруг и если что-то будет серьезно поломано — это рано или поздно пофиксят.
Biases and Fairness
Вместе с автоматическими принятиями решений к нам в жизнь приходят люди недовольные такими решениями — представьте, что у нас есть какая-то система ранжирования заявок на стипендию или грант исследователя в универе. Универ у нас будет необычный — в нем только две группы студентов: историки и математики. Если вдруг система на основе своих данных и логики вдруг раздала все гранты историкам и ни одному математику их не присудила — это может неслабо так обидеть математиков. Они назовут такую систему предвзятой. Сейчас об это только ленивый не говорит, а компании и люди судятся между собой.
Условно, представьте упрощенную модель, которая просто считает цитирования статей и пусть историки друг друга цитируют активно — среднее 100 цитат, а математики нет, у них среднее 20 — и пишут вообще мало, тогда система распознает всех историков, как «хороших» ибо цитируемость высокая 100 > 60 (среднее), а математиков, как «плохих» потому что у них у всех цитируемость куда ниже среднего 20
Выбор модели машинного обучения
Дата публикации Sep 23, 2019
Часть искусства, часть науки выбора идеальной модели машинного обучения.
Количество блестящих моделей может быть огромным, что означает, что люди часто обращаются к тем, кому доверяют больше всего, и используют их для решения всех новых задач. Это может привести к неоптимальным результатам.
Сегодня мы узнаем, как быстро и эффективно сузить пространство доступных моделей, чтобы найти те из них, которые с наибольшей вероятностью будут наиболее эффективны для вашего типа проблемы. Мы также увидим, как мы можем отслеживать производительность наших моделей с использованием весов и уклонов и сравнивать их.
Вы можете найти сопроводительный кодВот,
Что мы покроем
В отличие от Властелина колец, в машинном обучении нет ни одного кольца (модели), чтобы управлять ими всеми. Различные классы моделей хороши для моделирования базовых шаблонов различных типов наборов данных. Например, деревья решений хорошо работают в тех случаях, когда ваши данные имеют сложную форму:
В то время как линейные модели работают лучше всего, когда набор данных линейно разделим:
Прежде чем мы начнем, давайте немного углубимся в несоответствие между выбором моделей в реальном мире и конкурентной наукой о данных.
Выбор модели в конкурентной науке о данных против реального мира
Как сказал Вильям Форхиес в своемСообщение блога«Соревнования Kaggle подобны гонкам формулы для науки о данных. Победители вытесняют конкурентов с четвертого знака после запятой и, как и гоночные машины Формулы 1, не многие из нас приняли бы их за ежедневных гонщиков. Количество выделенного времени и иногда экстремальные методы не подходят для среды производства данных ».
Соревнования Kaggle и реальный мир оптимизируются под самые разные вещи, с некоторыми ключевыми отличиями:
Определение проблемы
Реальный мир позволяет вам определить вашу проблему и выбрать показатель, который определяет успех вашей модели. Это позволяет оптимизировать более сложную функцию полезности, чем просто единичную метрику, где соревнования Kaggle идут с одной заранее определенной метрикой и не позволяют эффективно определять проблему.
метрика
Интерпретируемость
Точно так же в реальном мире мы предпочитаем более простые модели, которые легче объяснить заинтересованным сторонам, тогда как в Kaggle мы не обращаем внимания на сложность модели. Интерпретируемость модели важна, потому что она позволяет нам предпринимать конкретные действия для решения основной проблемы. Например, в реальном мире, глядя на нашу модель и видя корреляцию между особенностью (например, выбоины на улице) и проблемой (например, вероятность автомобильной аварии на улице), более полезна, чем повышение прогноза точность на 0,005%.
Качество данных
Наконец, в соревнованиях Kaggle наш набор данных собирается и спорется за нас. Любой, кто занимался наукой о данных, знает, что в реальной жизни это почти никогда не происходит. Но способность собирать и структурировать наши данные также дает нам больший контроль над процессом обработки данных.
стимулы
Все это стимулирует огромное количество времени, затрачиваемое на настройку наших гиперпараметров для извлечения последних падений производительности из нашей модели и, иногда, изощренных методологий инженера функций. Несмотря на то, что соревнования Kaggle являются отличным способом обучения науке данных и проектированию функций, они не учитывают реальные проблемы, такие как объяснение модели, определение проблемы или ограничения развертывания.
Королевский гул моделей
Пришло время начать выбор моделей!
Выбирая наш начальный набор моделей для тестирования, мы хотим помнить о нескольких вещах:
Выберите разнообразный набор начальных моделей
Различные классы моделей хороши для моделирования различных типов базовых шаблонов в данных Поэтому хорошим первым шагом является быстрое тестирование нескольких различных классов моделей, чтобы узнать, какие из них наиболее эффективно отражают базовую структуру вашего набора данных! В рамках нашего типа проблемы (регрессия, классификация, кластеризация) мы хотим попробовать сочетание моделей на основе дерева, экземпляра и ядра. Выберите модель из каждого класса, чтобы проверить. Мы расскажем больше о различных типах моделей в разделе «модели для тестирования» ниже.
Попробуйте несколько разных параметров для каждой модели
Хотя мы не хотим тратить слишком много времени на поиск оптимального набора гиперпараметров, мы хотим попробовать несколько различных комбинаций гиперпараметров, чтобы у каждого класса моделей была возможность работать хорошо.
Выберите сильнейших соперников
Мы можем использовать самые эффективные модели этого этапа, чтобы дать нам представление о том, в какой класс моделей мы хотим углубиться. Панель инструментов «Веса и уклоны» покажет вам класс моделей, которые лучше всего подходят для вашей задачи.
Погрузитесь глубже в модели в лучших классах моделей.
Затем мы выбираем больше моделей, относящихся к лучшим классам моделей, которые мы включили в шорт-лист выше! Например, если кажется, что линейная регрессия работает лучше всего, было бы неплохо также попробовать регрессию лассо или гребня.
Исследуйте гиперпараметрическое пространство более подробно.
На этом этапе я бы посоветовал вам потратить некоторое время на настройку гиперпараметров для ваших моделей-кандидатов. (В следующем посте этой серии мы углубимся в интуицию о выборе лучших гиперпараметров для ваших моделей.) В конце этого этапа у вас должны быть самые эффективные версии всех ваших самых сильных моделей.
Выберите окончательные представления от разных моделей.В идеале мы хотим выбрать лучшие модели из более чем одного класса моделей. Это потому, что если вы сделаете свой выбор только из одного класса моделей, а он окажется неправильным, все ваши представления будут работать плохо. Соревнования Kaggle обычно позволяют вам выбрать более одной заявки для финального представления. Я бы порекомендовал выбирать прогнозы, сделанные вашими самыми сильными моделями из разных классов, чтобы добавить некоторую избыточность в ваши представления.
Ресурсные ограничения.Разные модели используют разные типы ресурсов, и знание правильности развертывания моделей на IoT / мобильном устройстве с небольшим жестким диском и процессором или в облаке может иметь решающее значение.
Время тренировки против времени прогноза против точности.Знание того, какие показатели вы оптимизируете, также важно для выбора правильной модели. Например, автомобили с самостоятельным вождением нуждаются в молниеносном прогнозировании, а системы обнаружения мошенничества должны быстро обновлять свои модели, чтобы быть в курсе последних фишинговых атак. Для других случаев, таких как медицинская диагностика, мы заботимся о точности (или площади под кривой ROC) гораздо больше, чем время обучения.
Сложность против объяснимости Компромисс.Более сложные модели могут использовать на порядок больше функций для обучения, а для прогнозирования требуется больше вычислений, но при правильном обучении можно получить действительно интересные шаблоны в наборе данных. Это также делает их запутанными и труднее объяснить, хотя. Знание того, как важно легко объяснить модель заинтересованным сторонам, а не просто захватить некоторые действительно интересные тенденции, в то время как отказ от объяснения является ключом к выбору модели.
Масштабируемость.Знание того, насколько быстро и насколько велика ваша модель для масштабирования, может помочь вам сузить выбор.
Размер обучающих данных.Для действительно больших наборов данных или тех, которые имеют много функций, нейронные сети или расширенные деревья могут быть отличным выбором. Принимая во внимание, что меньшие наборы данных могут лучше обслуживаться логистической регрессией, наивным байесовским или KNN.
Количество параметров.Модели с большим количеством параметров дают вам большую гибкость для получения действительно высокой производительности. Однако могут быть случаи, когда у вас нет времени, необходимого, например, для обучения параметров нейронной сети с нуля. Модель, которая хорошо работает из коробки, была бы подходящим вариантом в этом случае!
Сравнение моделей
Веса и уклоныпозволяет отслеживать и сравнивать производительность ваших моделей с одной строкой кода.
После того, как вы выбрали модели, которые хотели бы попробовать, обучите их и просто добавьтеwandb.log (<‘Score’: cv_score>)для регистрации вашего модельного состояния. После того, как вы закончили обучение, вы можете сравнить свои модели в одной простой панели!
Вы можете найти код, чтобы сделать это эффективноВот, Я призываю вас раскошелитьсяэто ядрои играть с кодом!
Вот и все, теперь у вас есть все инструменты, необходимые для выбора подходящих моделей для вашей задачи!
Выбор модели может быть очень сложным, но я надеюсь, что это руководство проливает свет и дает вам хорошую основу для выбора моделей.
Во второй части, «Вихревой тур по моделям машинного обучения», мы углубимся в модели ML, когда вы должны их использовать!
Если у вас есть какие-либо вопросы или пожелания, не стесняйтесьчирикать мне!
Модели машинного обучения: объясняем пятилетнему ребенку
Продолжаем нашу постоянную рубрику #чтопочитать
Специалисты компании Sociaro подготовили перевод очередной статьи, которая поможет разобраться в том, что такое Машинное обучение.
Если вы новичок в data science, заголовок не был направлен на то, чтобы вас обидеть. Это мой второй пост на тему популярного вопроса на интервью, который звучит примерно так: «объясните мне [вставить техническую тему], как вы бы объяснили пятилетнему ребенку.»
Выходит, достичь уровня понимания пятилетнего ребенка довольно сложно. Так что, хоть эта статья может быть не совсем ясна детсадовцу, она будет понятна тому, кто практически не имеет опыта в data science (и если вы поймете, что это не так, пожалуйста, напишите об этом в комментариях).
Я начну с объяснения понятия машинного обучения, а также его различных типов, а затем перейду к объяснению простых моделей. Я не буду особо вдаваться в математику, но подумываю сделать это в своих будущих статьях. Наслаждайтесь!
Illustration of Machine Learning
Машинное обучение – это когда вы загружаете большое количество данных в компьютерную программу и выбираете модель, которая «подгонит» эти данные так, чтобы компьютер (без вашей помощи) мог придумывать прогнозы. Компьютер строит модели, используя алгоритмы, которые варьируются от простых уравнений (например, уравнение прямой) до очень сложных систем логики/математики, которые позволяют компьютеру сделать самые лучшие прогнозы.
Обучение с учителем — это тип машинного обучения, в котором данные, которые вы засовываете в модель «помечаются». Пометка просто означает, что результат наблюдения (то есть ряд данных) известен. Например, если ваша модель пытается предсказать пойдут ли ваши друзья играть в гольф или нет, у вас могут быть такие переменные, как погода, день недели и так далее. Если ваши данные помечены, то ваша переменная будет иметь значение 1, в том случае если ваши друзья пошли играть в гольф, и значение 0, если они не пошли.
Как вы наверно могли угадать, когда речь идет о помеченных данных, обучение без учителя является противоположностью обучения с учителем. В обучении без учителя, вы не можете знать пошли ваши друзья играть в гольф или нет – только компьютер может найти закономерности с помощью модели, чтобы угадать, что уже произошло или предсказать, что произойдет.
[Требуется присутствие взрослых]
Логистическая регрессия используется для решения проблемы классификации. Это значит, что ваша целевая переменная (та которую вы хотите предсказать) состоит из категорий. Эти категории могут быть да/нет, или что-то вроде числа от 1 до 10, которое обозначает удовлетворенность клиента. Модель логистической регрессии использует уравнение, чтобы создать кривую с вашими данными, а затем использует эту кривую, чтобы спрогнозировать результаты нового наблюдения.
На графике выше, новое наблюдение получило бы в прогнозе 0, потому что оно попадает на левую часть кривой. Если посмотреть на данные, по которым построена кривая, это логично, потому что в области графика «прогнозируемое значение 0» большинство точек по оси y имеют значение 0.
Довольно часто линейная регрессия становится первой моделью машинного обучения, которую люди изучают. Связано это с тем, что ее алгоритм (проще говоря уравнение) достаточно просто понять, используя только одну переменную x – вы просто-напросто рисуете наиболее подходящую линию – концепция, которой учат еще в начальной школе. Наиболее подходящая линия затем используется для прогнозирования новых точек данных (см. иллюстрацию).
Линейная Регрессия чем-то напоминает логистическую регрессию, но используется, когда целевая переменная – непрерывная, а это значит, что она может принимать практически любое числовое значение. На самом деле, любая модель с непрерывной целевой переменной может быть классифицирована как «регрессия». Примером непрерывной переменной может служить цена продажи дома.
Принцип работы опорных векторов заключается в том, что они устанавливают границы между точками данных, где большинство из одного класса падает на одну сторону границы (как пример, в двумерном пространстве это будет линия) и большинство из другого класса падает на другую сторону границы.
Способ работы также заключается в том, что машина стремится найти границу с наибольшим пределом. Предел определяется расстоянием между границей и ближайшими точками каждого класса (см. иллюстрацию). Новые точки данных затем строятся и помещаются в определенный класс, в зависимости от того, на какую сторону границы они попадают.
Я объясняю эту модель на примере классификации, но вы также можете ее использовать для регрессии!
Про это я уже рассказывала в предыдущей статья, вы можете найти ее здесь (Деревья Решений и Случайные Леса ближе к концу):
[Читайте с осторожностью]
Теперь мы готовы перейти к машинному обучению без учителя. Напомню, это значит, что наш датасет не помеченный, так что мы не знаем результаты наших наблюдений.
Когда вы используете K кластеризацию, вы должны начать с предположения, что в вашем датасете присутствует K кластеров. Поскольку вы не знаете, сколько групп на самом деле в ваших данных, вы должны попробовать различные значения K и с помощью визуализации и метрик понять, какое значение K подходит. Метод K средних лучше всего работает с круговыми кластерами одинаковых размеров.
Этот алгоритм сначала выбирает лучшие точки данных K, чтобы сформировать центр каждого K кластера. Затем, он повторяет 2 следующих шага для каждой точки:
1. Присваивает точку данных ближайшему центру кластера
2. Создает новый центр, взяв среднее значение всех точек данных из этого кластера