Поиск по сетке с MLflow

Poisk Po Setke S Mlflow



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

Преимущества поиска по сетке

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

Недостатки поиска по сетке

  • Стоимость вычислений: Поиск по сетке требует больших вычислительных затрат для настройки большого количества гиперпараметров.
  • Кропотливый: Сложная настройка гиперпараметров требует много времени.
  • Не всегда необходимо: Теперь это требуется всегда; случайный поиск — лучшая альтернатива ему.

Пример: поиск лучших настроек модели для системы приема в университеты

Давайте рассмотрим пример поиска по сетке для настройки гиперпараметров в рамках онлайн-системы приема в университеты. В этом примере мы используем scikit-learn и простой классификатор градиентного повышения (GBC) для прогнозирования вероятности поступления студента в университет на основе таких факторов, как баллы GPA, баллы SAT, баллы ACT и внеклассные мероприятия. Для поиска по сетке вместо GBC доступно несколько вариантов, включая логистическую регрессию (LR), SVM (машина опорных векторов) и т. д.

Сгенерируйте случайные данные для системы онлайн-приема, используя MLflow для поиска по сетке

Pandas Python и случайные пакеты можно использовать для создания фиктивного набора данных для системы приема. Со случайными значениями для столбцов APP_NO, GPA, SAT Score, ACT Score, Extracurrural Activity и Admission Status этот код генерирует синтетический набор данных о поступлении. Переменная num_students контролирует количество строк в наборе данных.







Статус допуска устанавливается случайным образом на основе уровня принятия 70%, а модуль случайных чисел используется для создания случайных значений для нескольких столбцов. В демонстрационных целях следующий фрагмент кода создает поддельный набор данных о допуске со случайными значениями и сохраняется в файле std_admission_dataset.csv:



Фрагмент кода:



# Импортируем библиотеки Panda и Random.
импортировать панд как panda_obj
импортировать случайное значение как random_obj

# Установите количество записей для создания набора данных учащихся
студенты_рекордс = 1000

# Создание списков для хранения данных
std_application_numbers = [ 'ПРИЛОЖЕНИЕ-' + str(random_obj.randint( 1000 , 9999 )) для _ в диапазоне(students_records)]
std_gpa = [round(random_obj.uniform( 2,5 , 4.0 ), 2 ) для _ в диапазоне(students_records)]
std_sat_scores = [random_obj.randint( 900 , 1600 ) для _ в диапазоне(students_records)]
std_act_scores = [random_obj.randint( двадцать , 36 ) для _ в диапазоне(students_records)]
std_extra_curriculars = [random_obj.choice([ 'Да' , 'Нет' ]) для _ в диапазоне(students_records)]

# Рассчитать статус приема на основе случайной доли приема
std_admission_status = [ 1 если случайный_объект.random() < 0,7 еще 0 для _ в диапазоне(students_records)]

# Создайте словарь для хранения данных об учениках
std_data = {

'APPLICATION_NO' : std_application_numbers,

«ГПД» : std_gpa,

'SAT_Score' : std_sat_scores,

«ACT_Score» : std_act_scores,

'Внеклассные занятия' : std_extra_curriculars,

'Состояние_допуска' : std_admission_status

}

# Создайте DataFrame DataFrame_Student из словаря
DataFrame_Student = panda_obj.DataFrame(std_data)

# Сохраните DataFrame DataFrame_Student в файл CSV с именем std_admission_dataset.csv
DataFrame_Student.to_csv( 'std_admission_dataset.csv' , индекс=Ложь)
Распечатать( «Данные учащихся успешно экспортированы в файл CSV!» )

Выполнение кода:

Используйте команду Python для компиляции кода, затем используйте команду pip для установки определенного модуля, если вы обнаружите ошибку модуля. Используйте команду установки pip3 для установки данной библиотеки, если Python имеет версию 3.X или выше.





Успешное выполнение:



Пример экрана с данными:

Шаг 1. Импортируйте библиотеки

  • Библиотека MLflow для отслеживания экспериментов машинного обучения
  • Библиотека Pandas для обработки и анализа данных, а также пакет mlflow.sklearn для интеграции моделей Scikit-Learn.
  • Четвертая строка импортирует библиотеку «предупреждений» для подавления ошибок.
  • Класс ParameterGrid для поиска по сетке в модуле sklearn.model_selection.
  • GridSearchCV и GradientBoostingClassifier из sklearn.model_selection и ансамбля соответственно для моделей классификаторов поиска по сетке и повышения градиента.
  • Функции точности_score и классификация_report из модуля sklearn.metrics для расчета точности модели и создания отчетов о классификации.
  • Код импортирует модуль ОС и устанавливает для переменной среды GIT_PYTHON_REFRESH значение «тихо».

Фрагмент кода:

# Шаг I: импорт необходимых библиотек
импортировать млпоток
импортировать mlflow.sklearn
импортировать предупреждения как предупреждение
импортировать панд как panda_obj
из sklearn.model_selection импортируйте train_test_split как tts, ParameterGrid как pg, GridSearchCV как gscv
импортируйте нас
из sklearn.ensemble импортировать GradientBoostingClassifier как GBC
из sklearn.metrics импортируйте точность_оценки как acs, классификацию_отчета как cr
os.environ[ 'GIT_PYTHON_REFRESH' '=' 'тихий'

Шаг 2. Установите URI отслеживания.

URI отслеживания сервера MLflow устанавливается с помощью функции mlflow.set_tracking_uri(), обеспечивая наличие локального компьютера на порту 5000 для экспериментов и моделей.

mlflow.set_tracking_uri( 'http://localhost:5000' )

Шаг 3. Загрузите и подготовьте набор данных о приеме

Импортируйте библиотеку Pandas как panda_obj для манипулирования и анализа данных. Функция read_csv() применяется для загрузки набора данных допуска. Путь к набору данных — единственный аргумент, который требуется функции read_csv(). Путь к набору данных в этом случае — std_admission_dataset.csv. Используя функцию read_csv(), набор данных загружается в DataFrame Pandas.

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

Затем код создает две новые переменные: «F» и «t». Характеристики содержатся в переменной «F», а целевая переменная содержится в переменной «t».

Затем данные распределяются по тестовым и обучающим наборам. Это достигается с помощью функции tts() из пакета sklearn.model_selection. Функции, целевая переменная, размер теста и случайное состояние — это четыре аргумента, которые требуются функции tts(). Параметр test_size определяет часть данных, которая используется в целях тестирования. Поскольку размер теста в этом случае установлен на 0,2, для теста будет использовано 20 % данных.

Опция random_state определяет начальное значение генератора случайных чисел. Это сделано для того, чтобы гарантировать случайное разделение данных. Наборы обучения и тестирования теперь хранятся в переменных F_training, F_testing, t_training и t_testing. Эти наборы можно использовать для оценки и обучения моделей машинного обучения.

Фрагмент кода:

# Шаг 3: Загрузите набор входных данных
std_admissions_data = panda_obj.read_csv( 'std_admission_dataset.csv' )

# Предварительная обработка данных и разделение их на функции (F) и цель (t)
F = std_admissions_data.drop([ 'Состояние_допуска' ], ось= 1 )
t = std_admissions_data[ 'Состояние_допуска' ]

# Преобразование категориальных переменных в числовые с использованием горячего кодирования
F = panda_obj.get_dummies(F)
F_training, F_testing, t_training, t_testing = tts(F, t, test_size= 0,2 , случайное_состояние= 42 )

Шаг 4. Установите имя эксперимента MLflow.

adm_experiment_name = 'Университет_Прием_Эксперимент'
mlflow.set_experiment(adm_experiment_name)

Шаг 5. Определите классификатор повышения градиента

Модель классификатора повышения градиента теперь хранится в переменной gbc_obj. Набор входных данных можно использовать для тестирования и обучения этой модели. Значение аргумента random_state равно 42. Это гарантирует, что модель обучается с использованием одного и того же начального числа генератора случайных чисел, что делает результаты повторяемыми.

gbc_obj = GBC(random_state= 42 )

Шаг 6. Определите сетку гиперпараметров

Код изначально создает словарь param_grid. Гиперпараметры, которые настраиваются с помощью поиска по сетке, содержатся в этом словаре. Три ключа составляют словарь param_grid: n_estimators, Learning_rate и max_eep. Это гиперпараметры модели классификатора, повышающего градиент. Количество деревьев в модели задается гиперпараметром n_estimators. Скорость обучения модели указывается с помощью гиперпараметра Learning_rate. Гиперпараметр max_eep определяет максимально возможную глубину деревьев модели.

Фрагмент кода:

param_grid = {

'n_estimators' :[ 100 , 150 , 200 ],

'скорость_обучения' :[ 0,01 , 0,1 , 0,2 ],

'Максимальная глубина' :[ 4 , 5 , 6 ]

}

Шаг 7: Выполните поиск по сетке с помощью отслеживания MLflow

Затем код перебирает словарь param_grid. Для каждого набора гиперпараметров в словаре код выполняет следующее:

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

Фрагмент кода:

с помощью alert.catch_warnings():
alert.filterwarnings( 'игнорировать' , категория=Предупреждение пользователя, модуль= '.*distutil.*' )
для параметров в pg(param_grid):
с mlflow.start_run(run_name= «Допуск_Статус выполнения» ):
# Преобразование отдельных значений в списки
params = {key: [value], если не isinstance(value, list) else значение для ключа, значение в params.items()}
mlflow.log_params(параметры)
Grid_search = gscv(gbc_obj, param_grid=params, cv= 5 )
Grid_search.fit(F_training, t_training)
std_best_model =grid_search.best_estimator_
model_predictions = std_best_model.predict(F_testing)
model_accuracy_score = acs(t_testing, model_predictions)
Распечатать( «Гиперпараметры:» , параметры)
Распечатать( 'Точность:' , model_accuracy_score)
# Явно игнорировать UndefineMetricWarning
с помощью alert.catch_warnings():
alert.filterwarnings( 'игнорировать' , категория=Предупреждение)
Распечатать( «Отчет о классификации:» )
print(cr(t_testing, model_predictions, zero_division= 1 ))
mlflow.log_metric( 'точность' , model_accuracy_score)
mlflow.sklearn.log_model(std_best_model, 'gb_classifier_model' )

Шаг 8. Выполните программу с использованием Python

Вот вывод на сервере MLflow:

Заключение

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