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

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

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

Принципы использования оценщиков Scikit-Learn следующие:

  • Выберите класс моделей, импортировав соответствующий класс оценщика.
  • Выберите гиперпараметры модели, создав экземпляр вышеуказанного класса (мы рассмотрим, как сделать их более чувствительными с помощью настройки).
  • Расположите данные в матрице признаков и целевом векторе
  • Подгоните модель к данным, вызвав метод fit()
  • Для обучения с учителем мы предсказываем метки для неизвестных данных, используя метод predict(), а для обучения без учителя используем transform() или другие методы, чтобы получить более полное представление о наборе данных.

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

Разработка функций

  • Категориальные переменные кодируются с использованием горячего кодирования.
  • Порядковые переменные кодируются с использованием кодирования меток.
  • Числовые переменные масштабируются с использованием стандартного масштабирования.
  • Закодированные и масштабированные функции объединяются в единую матрицу функций.
  • PCA выполняется для уменьшения размерности пространства признаков до трех измерений.

Регуляризация – важный шаг, позволяющий избежать переобучения модели данными и высокой дисперсии. Некоторые методы регуляризации включают Lasso, который уменьшает коэффициенты до нуля, Ridge, уменьшающий коэффициенты, и Elastic Net.

Наконец, все эти этапы разработки функций объединяются в конвейер с использованием класса Pipeline scikit-learn, который позволяет применять все этапы предварительной обработки к набору данных за один шаг. Затем конвейер используется для преобразования исходной матрицы признаков в сконструированную матрицу признаков с уменьшенной размерностью.

Проверка

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

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

т.е. при k-кратной перекрестной проверке обучающие данные разбиваются на k сгибов для проверки модели на одном сгибе при обучении модели на k-1 других сгибах, и все это k раз. Затем ошибка усредняется по k-кратностям.

Выбор лучшей модели: смещение/дисперсия

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

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

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

Ниже приведен живой пример каждого из вышеперечисленных шагов на реальном образце набора данных из Scikit-Learn:

Этот код сначала загружает набор данных LFW с помощью функции fetch_lfw_people из scikit-learn. Затем он разбивает набор данных на обучающий и тестовый наборы с помощью функции train_test_split. Затем он создает классификатор XGBoost, используя класс XGBClassifier из библиотеки XGBoost. Он устанавливает цель «multi: softmax», поскольку мы имеем дело с проблемой классификации нескольких классов. Он также устанавливает максимальную глубину деревьев на 5, скорость обучения на 0,1 и количество оценок на 100.

Затем классификатор XGBoost обучается на обучающем наборе с использованием метода fit. После обучения классификатор делает прогнозы на тестовом наборе, используя метод predict. Затем точность классификатора вычисляется с помощью функции accuracy_score из scikit-learn.

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

Затем настраивается сетка гиперпараметров для поиска. Затем функция GridSearchCV из scikit-learn используется для перекрестной проверки поиска по сетке, чтобы найти лучшие гиперпараметры. Параметру cv присвоено значение 5, что означает, что для оценки производительности каждого набора гиперпараметров будет использоваться 5-кратная перекрестная проверка.

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

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