В этой серии мы рассмотрим, как создавать модели машинного обучения с помощью 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
, и точность классификатора рассчитывается, как и раньше.
Обратите внимание, что выполнение этого кода может занять больше времени, чем в предыдущем примере, поскольку он выполняет перекрестную проверку поиска по сетке по ряду гиперпараметров.