Эта статья предназначена как для новичков, так и для экспертов в качестве шаблона для начала работы с соревнованиями по машинному обучению.

Изучение машинного обучения теоретически, понимание всех этих потрясающих алгоритмов - это весело, но самая важная часть - применить эти концепции на практике.

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

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

Несколько веб-сайтов, где вы можете поэкспериментировать со всеми вашими идеями!

Чтобы найти список всех текущих Соревнований, перейдите по этой ссылке.

Включены 2 бонусных раздела для достижения наилучших результатов. Так что не забудьте прочитать до конца.

Начиная !

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

Теперь это предсказание может быть:

1) Проблема регрессии, когда метка вывода представляет собой непрерывный диапазон целых чисел.

Примеры включают «прогнозирование возраста человека», «прогнозирование цены объекта», «доход переписи», «прочность материалов на сжатие» и т. д.

2) Проблема классификации, когда метка вывода является дискретной и конечной по своей природе.

Примеры включают «прогнозирование пола человека», «прогнозирование успеха стартапа», «распознавание объектов», «классификацию текста», «анализ настроений», «классификацию кошек и собак» и т. д.

Все еще не понимаете, давайте рассмотрим простой пример.

Если вас просят спрогнозировать цены акций, взгляните на столбец выходных данных, если есть широкий диапазон значений, таких как 6.2, 7.1, 8.8, 9,10… и прогноз «6.5 (что-то не упомянуто в выходном столбце. обучающего набора), можно смело сказать, что это классическая задача, основанная на регрессии.

Если вас просят предсказать направление движения акций, а метка выхода содержит +1, 0 и -1 в качестве единственных выходов, где «+1» означает рост вверх, -1 означает падение вниз, а «0» означает отсутствие изменений. Здесь мы можем ясно заметить, что есть только 3 возможности для метки вывода и предсказания «6.5», поскольку вывод не имеет смысла. Следовательно, это становится проблемой, основанной на классификации, когда каждая метка вывода имеет особое значение.

После того, как вы определились с типом алгоритмов, которые вы могли бы использовать для данной проблемы, все становится систематизированным и простым.

Загрузка данных

В этой статье мы будем рассматривать структурированные данные (высокоорганизованные данные в таблицах Excel, файлах csv и т. Д.). При работе с неструктурированными данными (аудио, текст, изображения, видеофайлы) модели глубокого обучения имеют преимущество. Я расскажу об этом в следующих статьях.

Pandas - это наиболее часто используемая библиотека для загрузки «файлов csv» и «листов Excel», поскольку pandas обеспечивает множество мощных манипуляций с данными и агрегирования.

Ссылка на набор данных. "[Посмотреть]"

С помощью одной строчки кода вы можете прочитать данные, представленные в файле «training_data.csv».

С помощью «data.head ()» вы можете просмотреть строки и столбцы данных, чтобы оценить тип применяемого алгоритма машинного обучения, как обсуждалось ранее [регрессия или классификация].

Исследовательский анализ данных

После загрузки данных следующим шагом будет исследование данных и проверка наличия нарушений.

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

Если при выполнении приведенной выше строки мы видим 0, соответствующий всем столбцам, это означает, что отсутствующих значений нет.

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

Машина понимает только числовые значения!

Существует огромная разница между «0» и «Нет», «0» - это значение этой конкретной функции, а «Нет» подразумевает отсутствие значения.

Возможно, что во время подготовки данных все значения в файлах csv не будут заполнены, а некоторые могут остаться пустыми. Оставшиеся пустые ячейки занимают «NaN» (не число).

Когда мы сталкиваемся с NaN / отсутствующими значениями, вот несколько способов справиться с этим.

  • Если количество таких строк очень мало по сравнению с общим количеством строк в наборе данных, вы можете безопасно удалить такие строки.

Например: если из 5000 строк данных в 25 строках отсутствуют значения, то удаление этих строк не будет иметь большого значения.

  • Примените значения «NaN» к некоторым конкретным значениям.

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

Поскольку мы имеем дело с пропущенными значениями, т.е. «NaN», поэтому в первом параметре мы будем упоминать np.nan.

Для стратегии у нас есть 4 варианта: «среднее», «медианное», «наиболее частое» и «постоянное».

Примечание: «среднее» и «медиана» являются статистическими показателями и поэтому могут использоваться только с числовыми данными. «Most_frequent» и «constant» могут использоваться как с числовыми, так и с категориальными данными.

После этого шага у нас будут чистые данные без нулевых значений.

Решение числовых функций

Мы могли наблюдать, что максимальное значение функции «Возраст» составляет 60, тогда как максимальное значение «DailyRate» - 1499. Мы можем четко заметить огромную разницу в диапазоне значений.

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

Это привело бы к модели, которую нельзя интерпретировать с точки зрения важности и ранжирования характеристик.

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

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

Используя класс MinMaxScaler из библиотеки sklearn, мы масштабировали все числовые столбцы в диапазоне от [0, 1].

Решение категориальных функций

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

Модели машинного обучения не могут интерпретировать строковые значения, поэтому нам необходимо кодировать эти категориальные особенности в числовые значения.

Вы можете использовать функцию карты pandas для ручного кодирования функций.

Самый простой способ справиться с этой проблемой - использовать LabelEncoder. Он начнет присваивать целочисленные значения, начиная с 0, для каждой новой метки функции.

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

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

Отлично, теперь ваши данные готовы для использования в различных моделях машинного обучения.

Подготовка данных для подгонки модели

«X» будет входными функциями, которые будут переданы в модель на этапе обучения. «Y» - соответствующие метки вывода.

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

Здесь мы могли заметить, что есть 52 входных объекта, которые будут переданы в модель.

После определения «X» и «y» нам нужно разделить наш набор данных на 2 части, т.е. набор для обучения и тестирования.

Модель обучается на обучающем наборе, и для тестирования производительности модели мы оценим ее на тестовом наборе (который модель пока не видит).

Модельное обучение

Текущая метка вывода является категориальной по своей природе, поэтому она становится проблемой классификации, как обсуждалось в начале.

Большинство классификационных моделей присутствует в библиотеке sklearn.

Все, что вам нужно сделать, это импортировать модель, создав экземпляр класса с требуемым набором параметров.

После этого шага вам просто нужно подогнать модель к обучающей выборке.

Делать прогнозы

После обучения модели делать прогнозы очень просто: используйте функцию model.predict () и укажите в параметре входные функции. На основе весов модели модель предсказывает соответствующие выходные метки.

Существуют различные метрики для оценки моделей, в этой статье мы будем использовать precision_score.

Если вы хотите узнать больше, перейдите по этой ссылке.

Как мы могли видеть выше, хотя обе модели очень хорошо работают на обучающей выборке, они не дают одинаковых результатов тестирования.

Переоснащение против недостаточного

Краткая история. Допустим, вы задали 100 вопросов MCQ в качестве обучающего набора для модели, на которой она обучается. Чтобы проверить, нормально ли работает ваша модель, вы задали те же вопросы, на которых была обучена модель.

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

С технической точки зрения мы называем это переоснащением против недообучения. Хорошая модель находится между этими двумя крайними условиями.

«Хороший алгоритм машинного обучения - это тот алгоритм, который может обобщать свои наблюдения и, следовательно, обеспечивает отличную производительность для новых невидимых данных».

Практически,

  • Недоподбор происходит, когда точность самого обучающего набора низкая.
  • Переобучение происходит, когда точность обучающего набора высока, но низка на проверочном наборе.

Есть разные способы решения этих проблем.

  • Чтобы справиться с недостаточной подгонкой, попробуйте увеличить количество итераций обучения модели, увеличьте глубину моделей на основе деревьев.

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

PS: вы можете использовать функции KBest, RFE (устранение рекурсивных функций и т. д.)

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

В основном регуляризация решила бы проблемы, в противном случае - продвинутые методы.

Настройка гиперпараметров

«Независимо от того, насколько хороши показатели, всегда есть возможности для улучшения».

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

Примеры включают: «количество оценщиков», «скорость обучения», «количество разделений» и т. Д.

Это может занять очень много времени, поскольку обучение модели происходит несколько раз.

Перекрестная проверка поиска по сетке используется для поиска оптимального набора гиперпараметров. В param_grid, который является словарем Python, вы можете указать различные значения, которые нужно попробовать.

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

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

Использование CV случайного поиска решает указанные выше проблемы, поскольку вы можете указать значение «n_iter». Поскольку в настоящее время значение равно 5, это означает, что будут проверены только 5 наборов случайно выбранных значений.

Это увеличивает шансы получить оптимальную модель, в то время как ее вычислительная сложность основана на значении «n_iter».

Если у вас мало времени, используйте меньшее значение «n_iter», при котором результаты будут получены быстро, но шансы получить оптимальный набор гиперпараметров будут меньше.

Бонусная часть-1: Создание конвейера

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

С помощью конвейера sklearn все шаги можно объединить в один шаг.

Я уже говорил вам, sklearn - отличная библиотека с множеством потрясающих функций.

Дополнительная часть 2: ансамблевое обучение

Практически на каждом соревновании ансамблевые техники дают наилучшие результаты.

Упрощенно говоря, ансамблевое обучение означает «вместе». Есть известная поговорка: «толпа вместе умнее, чем умный человек».

Основные причины ошибок в обучающих моделях связаны с шумом, смещением и дисперсией. Ансамблевые методы помогают свести к минимуму эти факторы. Методы ансамбля предназначены для повышения стабильности и точности алгоритмов машинного обучения.

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

Голосование

Здесь вы можете объединить три модели вместе, чтобы получить окончательный прогноз на основе голосования.

Я считаю этот метод очень полезным, поскольку мы обычно обучаем по крайней мере 3 модели для сравнения на основе производительности. Объединение трех или более лучших моделей может привести к лучшим результатам.

Производительность может быть не лучше, но по крайней мере не хуже, чем у лучшей индивидуальной модели - дерева решений.
Это может быть связано с тем, что производительность двух других моделей примерно на 10% ниже, чем у дерева решений.

Классификатор голосования используется, когда целевая переменная является категориальной.
По умолчанию голосование "жесткое". Используйте параметр голосование = ‘soft’, если вы хотите получить среднее значение прогнозируемых вероятностей.

Несколько других моделей для использования

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

В качестве альтернативы вы можете использовать:

  • Классификатор повышения градиента
  • Классификатор Ada Boost
  • Категорическое повышение

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

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