Системы AutoML (автоматическое машинное обучение) представляют собой набор инструментов и методов, которые автоматизируют процесс применения машинного обучения к проблеме. Сюда входят такие задачи, как выбор подходящих алгоритмов, настройка гиперпараметров и даже обучение и оценка моделей. AutoML, или автоматизированное машинное обучение, — это способ использования алгоритмов для автоматического поиска лучшей модели для заданного набора данных.
Почему мы должны использовать AutoML?
Есть несколько причин, по которым можно использовать AutoML:
- Эффективность. AutoML может сэкономить время и ресурсы за счет автоматизации процесса выбора модели и настройки гиперпараметров.
- Улучшенная производительность. Алгоритмы AutoML часто могут находить модели, которые работают лучше, чем те, которые были найдены экспертами-людьми.
- Доступность. AutoML может сделать передовые методы машинного обучения более доступными для неспециалистов, позволяя им создавать более точные модели без необходимости глубокого понимания лежащих в их основе алгоритмов.
- Масштабируемость. AutoML позволяет специалистам по обработке и анализу данных масштабировать процесс выбора и настройки модели для сценариев работы с большими данными.
- Последовательность. AutoML может помочь сделать процесс выбора модели более последовательным и воспроизводимым.
Однако важно отметить, что AutoML — это не замена человеческого опыта, а скорее инструмент, который можно использовать для его расширения.
Цель AutoML — упростить практикующим специалистам с ограниченным опытом машинного обучения применение этих методов для решения их собственных задач, а также повысить эффективность и результативность процесса разработки моделей.
Существует несколько примеров систем AutoML, давайте рассмотрим каждую из них по порядку.
AutoML от Google
AutoML от Google (ссылка на GitHub) — это набор инструментов машинного обучения, которые позволяют пользователям обучать и развертывать модели с минимальными знаниями в области машинного обучения. Он включает в себя ряд различных продуктов, таких как:
- AutoML Vision: инструмент для обучения моделей распознавания изображений.
- AutoML Natural Language: инструмент для обучения моделей, которые могут понимать и генерировать текст на естественном языке.
- AutoML Translation: инструмент для обучения моделей машинного перевода.
- Таблицы AutoML: инструмент для обучения моделей для структурированных данных, таких как наборы табличных данных.
- 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