DevGang
Авторизоваться

Оптимизация моделей: Руководство по перекрестной проверке и настройке гиперпараметров

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

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

Обобщение модели: важность

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

Риски переобучения и недообучения

Переоснащение и недостаточное оснащение - это два основных риска для обобщения модели.

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

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

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

Cross-Validation: Введение

Перекрестная проверка (Cross-Validation или CV) — это метод, используемый в машинном обучении для оценки способности к обобщению и производительности модели машинного обучения. Это включает в себя создание нескольких подмножеств наборов данных, называемых складками, и итеративное выполнение обучения и оценки моделей каждый раз на разных наборах данных для обучения и тестирования.

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

Давайте рассмотрим некоторые популярные методы перекрестной проверки.

Популярные техники CV:

  • K-Fold

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

from sklearn.model_selection import KFold
from sklearn import datasets

# Load the X and y data from the iris dataset
iris = datasets.load_iris()
X = iris.data
y = iris.target

# Perform K-fold split
k_folds = 5
kf = KFold(n_splits=k_folds, shuffle=True)

# Iterate over splits and perform model training
for train_idx, test_idx in kf.split(X):
    X_train, X_test = X[train_idx], X[test_idx]
    y_train, y_test = y[train_idx], y[test_idx]

    # Further training etc
    # ...

В приведенном выше коде мы взяли функции и метки в виде массивов X и Y и разделили их на наборы данных для обучения и тестирования для 5 различных итераций.

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

  1. Метод Holdout

Один из простейших методов перекрестной проверки, метод удержания, разбивает набор данных на обучающий и тестовый наборы данных, используя предопределенное соотношение 70/30 или 80/20 между обучением и тестированием.


Introduction
Machine learning is a type of artificial intelligence that allows models to learn from data by identifying patterns in existing datasets and using them to make predictions on unseen or unknown data.

Model Generalization is a crucial trait that must be present in ML models trained and deployed in production. This means the model training should lead to a correct fit on the dataset, preventing overfitting or underfitting.

Model Generalization: Importance
Model Generalization refers to the ability of the model to accurately predict outputs from unseen data or real-time data. Generalization is vital for production models because it enables them to handle dynamic data, i.e., real-time data, and makes them less prone to noise or errors. Businesses use this information for important decision-making.

Risks of Overfitting and Underfitting
Overfitting and underfitting are two primary risks to model generalization.

Overfitting occurs when the model learns from the training data too well. It will learn too many specifics from the training dataset and won't generalize for testing or validation datasets. As a result, its performance on real-time data will be poor since no general patterns are identified. This usually happens when the model is trained on a small amount of data or the model is complex.

Underfitting occurs when the model doesn't learn from the data enough and doesn't accurately understand the patterns from the training data. This happens when the model is trained on too much data or the model is too simple with few parameters.

For improved model training and selection, let's discuss some crucial data and modeling-related aspects that can be controlled for better model generalization. Some of the techniques include cross-validation, hyperparameter tuning, and ensemble methods, which can be used to choose the best model for deployment in the production environment.

Cross-Validation: Introduction
Cross-Validation (CV) is a technique used in machine learning to assess the generalization capability and performance of a machine learning model. This involves creating multiple subsets of datasets called folds and iteratively performing training and evaluation of models on different training and testing datasets each time.

The main goal of CV is to check the model's performance on unseen data by using a portion of the dataset as the test set during the training process.

Let's explore some popular cross-validation techniques.

Popular CV Techniques:
K-Fold
K-Fold is a popular cross-validation technique, where the total dataset is split into k-folds or subsets of equal sizes, and the kth fold is used for testing while the remaining k-1 folds are used as the training dataset.

from sklearn.model_selection import KFold
from sklearn import datasets

# Load the X and y data from the iris dataset
iris = datasets.load_iris()
X = iris.data
y = iris.target

# Perform K-fold split
k_folds = 5
kf = KFold(n_splits=k_folds, shuffle=True)

# Iterate over splits and perform model training
for train_idx, test_idx in kf.split(X):
    X_train, X_test = X[train_idx], X[test_idx]
    y_train, y_test = y[train_idx], y[test_idx]

    # Further training etc
    # ...
In the above code, we have taken features and labels in the form of X and y arrays and split them into training and testing datasets for 5 different iterations.

This technique is useful when the dataset is small and computational resources are available.

Holdout Method
One of the simplest cross-validation techniques, the holdout method splits the dataset into training and testing datasets using a predefined 70/30 or 80/20 train/test split.

from sklearn.model_selection import train_test_split
from sklearn import datasets

# Loading features and labels
iris = datasets.load_iris()
X = iris.data
y = iris.target

# Perform the split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

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

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

  • Стратифицированный K-Fold

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

from sklearn.model_selection import StratifiedKFold
from sklearn import datasets

# Loading features and labels
iris = datasets.load_iris()
X = iris.data
y = iris.target

# Perform the splits
k = 5 # Number of folds
skf = StratifiedKFold(n_splits=k, shuffle=True)

# Iterate over splits and perform model training
for train_idx, test_idx in skf.split(X):
    X_train, X_test = X[train_idx], X[test_idx]
    y_train, y_test = y[train_idx], y[test_idx]

    # Further training etc
    # ...

Реализация аналогична K-Fold. Это лучший метод перекрестной проверки, который можно использовать для задач классификации с несбалансированным распределением классов.

Комбинируйте настройку гиперпараметров с CV

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

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

Поиск по сетке Cross-Validation

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

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

# Define hyperparameter grid for RandomForest Classifier
param_grid = { 'n_estimators': [50, 100, 200], 
              'max_depth': [None, 5, 10], 
              'min_samples_split': [2, 5, 10] }

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

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

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV

# Create the Random Forest classifier
rf_classifier = RandomForestClassifier()

# Perform grid search cross-validation
grid_search = GridSearchCV(estimator=rf_classifier,
                           param_grid=param_grid,
                           cv=5)
# Fit the model
grid_search.fit(X, y)

# Print the best hyperparameters and the corresponding mean cross-validated score
print("Best Hyperparameters: ", grid_search.best_params_)
print("Best Score: ", grid_search.best_score_)

В приведенном выше коде модель классификатора случайного леса инициализируется и передается в качестве входных данных вместе с параметром grid в Grid Search CV. Параметр cv определяет количество перекрестных проверок, которые необходимо создать для обучения и оценки модели.

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

Рандомизированный поиск CV

Randomized Search CV — это модифицированная версия Grid Search CV. В отличие от Grid Search, который исчерпывающе обучает модель для всех комбинаций из param_grid, Randomized Search выбирает случайные комбинации для предопределенного количества итераций из пространства гиперпараметров param_grid.

Random Search CV направлен на поиск лучших параметров модели путем обучения и оценки модели для указанного количества итераций.

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV

# Define hyperparameter grid for RandomForest Classifier
param_grid = { 'n_estimators': [50, 100, 200],
              'max_depth': [None, 5, 10],
              'min_samples_split': [2, 5, 10] }

# Create the Random Forest classifier
rf_classifier = RandomForestClassifier()

# Perform random search cross-validation
random_search = RandomizedSearchCV(estimator=rf_classifier,
                                   param_distributions=param_grid,
                                   cv=5,
                                   n_iter=10)

random_search.fit(X, y)

# Print the best hyperparameters and the corresponding mean cross-validated score
print("Best Hyperparameters:", random_search.best_params_)
print("Best Score:", random_search.best_score_)

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

Вложенная Cross-Validation

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

Этот метод включает в себя два уровня перекрестной проверки:

  1. Один из внутренних CV для поиска параметров и один из внешних CV для выбора наилучшей модели.
  2. Внешний цикл CV определяет разбиения набора данных, которые внутренний цикл CV использует для поиска наилучшего набора гиперпараметров путем выполнения GridSearchCV или RandomSearchCV.
  3. Затем лучшие оценки, параметры и модели сохраняются и используются для обучения окончательной модели на всем наборе данных.

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

from sklearn.model_selection import cross_val_score, KFold
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV

# Define model
rf = RandomForestClassifier()

# Define hyperparameter grid for RandomForest Classifier
param_grid = {'n_estimators': [50, 100, 200],
              'max_depth': [None, 5, 10],
              'min_samples_split': [2, 5, 10]}

# Define cross-validation loops
outer_cv = KFold(n_splits=3, shuffle=True, random_state=0)
inner_cv = KFold(n_splits=5, shuffle=True, random_state=0)

# Define inner CV for parameter search
model = GridSearchCV(
    estimator=rf, param_grid=param_grid, cv=inner_cv, n_jobs=-1
)

# Define outer CV for model selection and evaluation
scores = cross_val_score(model, X, y,
                        scoring='accuracy',
                        cv=outer_cv, n_jobs=-1)

print('Accuracy: %.3f (%.3f)' % (mean(scores), std(scores)))

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

Выбор лучшей модели

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

Переобучите весь набор данных с наилучшими параметрами

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

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

Bagging

Пакетирование - это метод ансамбля, при котором различные независимые модели обучаются на различных подмножествах данных, созданных с помощью начальной загрузки выборки. Выборка начальной загрузки включает в себя случайный выбор наблюдений из исходного набора данных для создания нового подмножества выборочных данных. Выборка Bootstrap позволяет многократно повторять наблюдения в новом подмножестве (замена). Это также означает, что некоторые наблюдения могут вообще не быть выбраны.

Каждая независимая модель обучается независимо и генерирует свои прогнозы. Наконец, эти прогнозы объединяются с использованием голосования большинством голосов (для задач классификации) или правила усреднения (для задач регрессии).

Алгоритм случайного леса работает по принципу запроса на обучение модели и логический вывод.

Boosting

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

Данные обучения взвешиваются, и больше внимания уделяется неправильно классифицированным экземплярам. В конце все прогнозы объединяются с помощью голосования по большинству (классификация) или правила среднего (регрессия).

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

Популярные библиотеки XGBoost и CatBoost используют метод boosting для обучения моделей.

Техника Stacking

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

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

Техника Blending

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

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

Выбор моделей CV для производства

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

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

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

Источник:

#Машинное обучение #Machine Learning
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться