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

Почему мы должны использовать AutoML?

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

  1. Эффективность. AutoML может сэкономить время и ресурсы за счет автоматизации процесса выбора модели и настройки гиперпараметров.
  2. Улучшенная производительность. Алгоритмы AutoML часто могут находить модели, которые работают лучше, чем те, которые были найдены экспертами-людьми.
  3. Доступность. AutoML может сделать передовые методы машинного обучения более доступными для неспециалистов, позволяя им создавать более точные модели без необходимости глубокого понимания лежащих в их основе алгоритмов.
  4. Масштабируемость. AutoML позволяет специалистам по обработке и анализу данных масштабировать процесс выбора и настройки модели для сценариев работы с большими данными.
  5. Последовательность. AutoML может помочь сделать процесс выбора модели более последовательным и воспроизводимым.

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

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

Существует несколько примеров систем AutoML, давайте рассмотрим каждую из них по порядку.

AutoML от Google

AutoML от Google (ссылка на GitHub) — это набор инструментов машинного обучения, которые позволяют пользователям обучать и развертывать модели с минимальными знаниями в области машинного обучения. Он включает в себя ряд различных продуктов, таких как:

  1. AutoML Vision: инструмент для обучения моделей распознавания изображений.
  2. AutoML Natural Language: инструмент для обучения моделей, которые могут понимать и генерировать текст на естественном языке.
  3. AutoML Translation: инструмент для обучения моделей машинного перевода.
  4. Таблицы AutoML: инструмент для обучения моделей для структурированных данных, таких как наборы табличных данных.
  5. AutoML Video: инструмент для обучения моделей анализу видео.

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

Это облачный сервис, что означает, что пользователи взаимодействуют с ним через веб-интерфейс или вызовы API. Фактическое обучение и развертывание моделей осуществляется серверами Google, и пользователь не может получить доступ к базовому коду. Однако пользователь может использовать предварительно обученные модели, настраивать их в соответствии со своими потребностями и развертывать на различных платформах (таких как мобильные, веб- или облачные) с помощью предоставленных клиентских библиотек и API.

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

Кроме того, Google также предоставляет версию AutoML с открытым исходным кодом, которая называется AutoML-Zero (GitHub Link). Она позволяет обучать модели машинного обучения с минимальным участием человека за счет автоматизации процесса нейронной архитектуры. поиск(NAS).

Вот пример того, как использовать AutoML-Zero со всеми гиперпараметрами в Python:

import tensorflow as tf
from automl_zero.nas import AutoMLZero

# load the dataset
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar10.load_data()

# define the search space
search_space = tf.keras.experimental.nas.NASNetLarge()

# instantiate the AutoMLZero class with all the hyperparameters
automl = AutoMLZero(search_space,
                    population_size=50,
                    generations=5,
                    mutation_rate=0.5,
                    tournament_size=5,
                    elitism=True,
                    initial_population=None,
                    optimizer=tf.keras.optimizers.Adam(),
                    metric=tf.keras.metrics.Accuracy(),
                    loss=tf.keras.losses.CategoricalCrossentropy(),
                    callbacks=[tf.keras.callbacks.EarlyStopping()])

# fit the model on the dataset
automl.fit(x_train, y_train, epochs=100)

# evaluate the model
score = automl.evaluate(x_test, y_test)

# save the best model
automl.save("path/to/save/model")

В этом примере загружается набор данных CIFAR10, и пространство поиска определяется с использованием архитектуры NASNetLarge. Затем создается экземпляр класса AutoMLZero со всеми гиперпараметрами, такими как популяция_размер, поколения, мутация_рейт, турнир_размер, элитарность, начальная_популяция, оптимизатор, метрика, потери и обратные вызовы. Метод fit() используется для запуска процесса NAS, затем модель оценивается на тестовом наборе, и лучшая модель сохраняется по указанному пути.

H2O.ai

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

H2O.ai также имеет платформу AutoML под названием «H2O AutoML», которая автоматизирует процесс выбора модели, настройки гиперпараметров и предоставляет возможности автоматического проектирования функций. Он поддерживает широкий спектр алгоритмов машинного обучения, включая обобщенные линейные модели, машины повышения градиента, случайные леса, глубокое обучение и многое другое.

Вот пример использования H2O AutoML в Python:

import h2o
from h2o.automl import H2OAutoML

# Initialize the H2O cluster
h2o.init()

# Load the data
data = h2o.import_file("your_data.csv")

# Split the data into training and test sets
train, test = data.split_frame(ratios=[0.8])

# Define the response column
response_column = "your_response_column"

# Run the AutoML process
aml = H2OAutoML(max_models=10, seed=1, nfolds=5, keep_cross_validation_predictions=True,
                exclude_algos=["GLM"],
                include_algos=["GBM", "RandomForest"],
                balance_classes=True,
                class_sampling_factors=[1.0, 2.0],
                max_runtime_secs=3600,
                stopping_rounds=5,
                stopping_tolerance=0.01,
                sort_metric="AUC",
                balance_threshold=0.5,
                stopping_metric="AUC")
aml.train(y=response_column, training_frame=train, validation_frame=test)

# Print the leaderboard
lb = aml.leaderboard
print(lb)

# Retrieve the best model
best_model = h2o.get_model(lb[0, "model_id"])

# Use the best model to make predictions on new data
predictions = best_model.predict(new_data)

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

  • exclude_algos: список алгоритмов, которые следует исключить из процесса AutoML.
  • include_algos: список алгоритмов, которые следует включить в процесс AutoML.
  • balance_classes: логическое значение, указывающее, нужно ли сбалансировать распределение классов в обучающих данных.
  • class_sampling_factors: список факторов выборки класса, которые следует использовать в процессе обучения.
  • max_runtime_secs: максимальное время выполнения процесса AutoML в секундах.
  • stopping_rounds: количество последовательных событий подсчета очков без улучшения, необходимого для остановки обучения модели.
  • stopping_tolerance: минимальное относительное улучшение показателя для продолжения обучения.
  • sort_metric: Метрика для сортировки моделей в таблице лидеров.
  • balance_threshold: Порог для балансировки классов.
  • stopping_metric: Метрика для ранней остановки.

Этот пример позволяет точно настроить процесс AutoML и оптимизировать его для определенных сценариев. AutoML будет учитывать только GBM и Random Forest, он сбалансирует классы и остановит обучение, если показатель AUC не улучшится в течение 5 последовательных раундов или показатель AUC будет меньше 0,01. Кроме того, он будет сортировать модели на основе оценки AUC и остановит обучение через 3600 секунд.

Дополнительную информацию см. в документации!

Авто-ВЕКА

Auto-WEKA — это автоматизированный инструмент машинного обучения, который использует библиотеку WEKA для обучения и настройки различных моделей с различными гиперпараметрами. Его можно использовать для поиска лучшей модели для данного набора данных и проблемы. Вот пример того, как использовать Auto-WEKA в Python с оболочкой scikit-learn:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from auto_weka import AutoWEKA

# Load the iris dataset
iris = load_iris()
X, y = iris.data, iris.target

# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Initialize the AutoWEKA classifier
clf = AutoWEKA(time_left_for_this_task=600, per_run_time_limit=60, 
resampling_strategy='cv', resampling_strategy_arguments={'folds': 5})

# Fit the classifier to the training data
clf.fit(X_train, y_train)

# Print the best model and its hyperparameters
print(clf.get_params())

# Predict on test data
y_pred = clf.predict(X_test)

# Print accuracy score
print("Accuracy: ", clf.score(X_test, y_test))

В этом примере класс AutoWEKA инициализируется со следующими гиперпараметрами:

  • time_left_for_this_task: максимальное количество времени (в секундах), разрешенное для всего процесса Auto-WEKA, включая обучение модели и настройку гиперпараметров.
  • per_run_time_limit: максимальное количество времени (в секундах), отведенное для обучения и настройки одной модели.
  • resampling_strategy: стратегия повторной выборки, используемая для оценки моделей. В этом случае используется k-кратная перекрестная проверка с 5-кратным повторением.
  • resampling_strategy_arguments: словарь аргументов для выбранной стратегии передискретизации.

После обучения классификатора вы можете использовать метод get_params(), чтобы увидеть лучшую модель и ее гиперпараметры, найденные Auto-WEKA, и метод predict(), чтобы делать прогнозы на основе новых данных. Вы также можете использовать метод score() для оценки производительности модели на тестовых данных.

Hyperopt-Sklearn

Hyperopt — это библиотека Python для выполнения байесовской оптимизации, которую можно использовать для настройки гиперпараметров моделей машинного обучения. Вот пример того, как использовать Hyperopt с scikit-learn для настройки гиперпараметров классификатора дерева решений:

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from hyperopt import fmin, tpe, hp

# Load the iris dataset
iris = load_iris()
X, y = iris.data, iris.target

# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Define the search space for the hyperparameters
space = {
    'criterion': hp.choice('criterion', ['gini', 'entropy']),
    'max_depth': hp.quniform('max_depth', 2, 20, 1),
    'min_samples_split': hp.quniform('min_samples_split', 2, 20, 1),
    'min_samples_leaf': hp.quniform('min_samples_leaf', 1, 20, 1)
}

# Define the objective function to minimize
def objective(params):
    clf = DecisionTreeClassifier(**params)
    clf.fit(X_train, y_train)
    y_pred = clf.predict(X_test)
    acc = accuracy_score(y_test, y_pred)
    return {'loss': -acc, 'status': STATUS_OK}
best = fmin(objective, space, algo=tpe.suggest, max_evals=100)
print(best)

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

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

Автообучение

Auto-sklearn — это библиотека Python для автоматизированного машинного обучения, которую можно использовать для обучения и настройки различных моделей с различными гиперпараметрами. Вот пример того, как использовать Auto-sklearn в Python для обучения и настройки RandomForestClassifier со всеми гиперпараметрами:

from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from autosklearn.classification import AutoSklearnClassifier

# Load the iris dataset
iris = load_iris()
X, y = iris.data, iris.target

# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Initialize the AutoSklearnClassifier
clf = AutoSklearnClassifier(time_left_for_this_task=600, per_run_time_limit=60,
                            ensemble_size=1, initial_configurations_via_metalearning=0,
                            include_estimators=["random_forest"],
                            exclude_estimators=None,
                            include_preprocessors=["no_preprocessing"],
                            exclude_preprocessors=None,
                            ensemble_memory_limit=1024,
                            resampling_strategy='holdout',
                            resampling_strategy_arguments={'train_size': 0.67},
                            seed=1,
                            ml_memory_limit=1024,
                            n_jobs=1,
                            shared_mode=True,
                            tmp_folder=None,
                            output_folder=None,
                            delete_tmp_folder_after_terminate=True,
                            delete_output_folder_after_terminate=True,
                            disable_evaluator_output=False,
                            get_smac_object_callback=None,
                            smac_scenario_args=None,
                            metalearning_configurations=None,
                            init_strategy=None,
                            refit_once=False,
                            resampling_strategy_arguments={'folds': 5}
                            )

# Fit the classifier to the training data
clf.fit(X_train, y_train)

# Print the best model and its hyperparameters
print(clf.show_models())
print(clf.sprint_statistics())
print(clf.cv_results_)

# Predict on test data
y_pred = clf.predict(X_test)

# Print accuracy score
print("Accuracy: ", accuracy_score(y_test, y_pred))

В этом примере AutoSklearnClassifier инициализируется многими другими гиперпараметрами, такими как:

  • include_estimators: список строк, содержащих имена оценщиков для включения в область поиска.
  • exclude_estimators: список строк, содержащих имена оценщиков, которые следует исключить из области поиска.
  • include_preprocessors: список строк, содержащих имена препроцессоров для включения в область поиска.
  • exclude_preprocessors: список строк, содержащих имена препроцессоров, которые следует исключить из области поиска.
  • ensemble_memory_limit: Лимит памяти для построения ансамбля (МБ)
  • resampling_strategy: метод повторной выборки, используемый для оценки производительности в процессе поиска.
  • seed: случайное семя.
  • ml_memory_limit: Ограничение памяти для одного алгоритма машинного обучения (МБ)
  • n_jobs: Количество параллельных процессов (по умолчанию: 1).
  • tmp_folder: папка для хранения временных файлов (по умолчанию: нет)
  • output_folder: папка для хранения выходных файлов (по умолчанию: нет)

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

ТРОТ

TPOT (Tree-based Pipeline Optimization Tool) — это библиотека Python для автоматизации процесса построения и настройки моделей машинного обучения. Он использует генетическое программирование для оптимизации конвейера преобразователей и предикторов в поисках наилучшего сочетания функций, алгоритмов и параметров.

Примером кода TPOT для задачи контролируемой регрессии может быть:

from tpot import TPOTRegressor
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split

# Load the data
X, y = load_boston(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# Initialize and run the TPOTRegressor
tpot = TPOTRegressor(generations=5, population_size=20, verbosity=2)
tpot.fit(X_train, y_train)

# Print the best pipeline and its score
print(tpot.score(X_test, y_test))
print(tpot.fitted_pipeline_)

# Use the best pipeline to make predictions on new data
predictions = tpot.predict(new_data)

Этот код использует класс TPOTRegressor из библиотеки tpot для автоматизации процесса построения и настройки модели машинного обучения для решения проблем регрессии. Данные загружаются из sklearn.datasets.load_boston() и разбиваются на наборы для обучения и тестирования. TPOTRegressor инициализируется некоторыми параметрами, такими как количество поколений и размер популяции. Метод fit() используется для запуска процесса оптимизации. Метод score() используется для оценки производительности лучшего конвейера в тестовом наборе. Атрибут fitted_pipeline_ возвращает лучший из найденных конвейеров. Метод predict() можно использовать для прогнозирования новых данных с использованием наилучшего конвейера.

Примером кода TPOT для задачи контролируемой классификации может быть:

from tpot import TPOTClassifier

# Initialize the TPOT classifier
tpot = TPOTClassifier(generations=100, 
                      population_size=50, 
                      scoring='accuracy', 
                      cv=5, 
                      subsample=0.8, 
                      n_jobs=-1, 
                      max_time_mins=60, 
                      verbosity=2,
                      memory=None,
                      random_state=42,
                      config_dict='TPOT light',
                      warm_start=False,
                      periodic_checkpoint_folder=None,
                      early_stop=None,
                      custom_eval_func=None,
                      operator_memory_limit=None,
                      max_eval_time_mins=5,
                      use_dask=False,
                      n_jobs_dask=1)

# Fit the classifier to the training data
tpot.fit(X_train, y_train)

# Print the best pipeline
print(tpot.fitted_pipeline_)

# Score the classifier on the test data
print(tpot.score(X_test, y_test))

# Export the best pipeline as python code
tpot.export('tpot_best_pipeline.py')

Этот код использует класс TPOTClassifier из библиотеки tpot для автоматизации процесса построения и настройки модели машинного обучения для задач классификации. Данные передаются как X_train и y_train, а тестовые данные — как X_test и y_test. TPOTClassifier() инициализируется несколькими параметрами, такими как максимальное количество поколений для запуска процесса оптимизации, размер популяции, метрика подсчета очков, перекрестная проверка, подвыборка, количество заданий для параллельного выполнения и максимальное время, затрачиваемое на процесс оптимизации.

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

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

Процесс настройки гиперпараметров можно контролировать, передав несколько аргументов конструктору TPOTRegressor() или TPOTClassifier(), например:

  • generations: Количество поколений для запуска процесса оптимизации.
  • population_size: Количество конвейеров в каждом поколении.
  • scoring: Метрика, используемая для оценки производительности конвейеров.
  • cv: Количество сгибов для перекрестной проверки.
  • subsample: часть обучающих данных, которые будут использоваться для каждой оценки конвейера.
  • n_jobs: Количество ядер ЦП, используемых для параллельной оценки.
  • max_time_mins: максимальное время в минутах для запуска процесса оптимизации.

Например, следующий код запускает процесс оптимизации TPOT для 100 поколений, используя популяцию размером 50 и среднеквадратичную ошибку в качестве метрики оценки.

tpot = TPOTRegressor(generations=100, population_size=50, scoring='neg_mean_squared_error')
tpot.fit(X_train, y_train)

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

Примечание. В этой статье не рассматриваются различные коммерческие системы AutoML.

Справка: Эта статья написана с помощью ChatGPT Open AI