MLflow — это платформа для управления сквозным жизненным циклом машинного обучения.
MLflow играет решающую роль в решении задачи выбора лучшей модели из набора экспериментов. Часто люди сталкиваются с трудностями при определении наиболее оптимальной модели на основе своих экспериментов, MLflow старательно регистрирует всю необходимую информацию и подробности об эксперименте, которые можно использовать в процессе выбора лучшей модели.
Благодаря обширным возможностям ведения журналов MLflow пользователи могут легко оценивать производительность различных моделей, анализировать соответствующие показатели и делать выбор на основе данных.
Этот метод выбора модели широко используется в производственных средах.
Код:
import mlflow import mlflow.sklearn from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score from sklearn.datasets import load_breast_cancer from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt from sklearn.linear_model import LogisticRegression # Load the Iris dataset breast_cancer = load_breast_cancer() X, y = breast_cancer.data, breast_cancer.target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) def train(sk_model,x_train,y_train,params): #here the skmodel can be any model which will be passed to the function later model = sk_model.fit(X_train, y_train) accuracy = accuracy_score(sk_model.predict(X_train),y_train) mlflow.log_param('max_iter', params) # used to log the parameters passed to the model mlflow.log_metric("Train Accuracy",accuracy) ## logs the accuracy of the model def evaluate(sk_model,x_test,y_test): y_pred=sk_model.predict(x_test) accuracy = accuracy_score(y_pred,y_test) # Compute the ROC curve fpr, tpr, thresholds = roc_curve(y_test, y_pred) roc_auc = auc(fpr, tpr) plt.figure() plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], 'k--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver Operating Characteristic') plt.legend(loc="lower right") plot_path = 'roc_curve.png' mlflow.log_artifact(plot_path) mlflow.log_metric("Test Accuracy",accuracy) ## There are several function in mlflow which can log many other things max_iter=78 #changed this value on every experiment sk_model=LogisticRegression(max_iter=max_iter) with mlflow.start_run(): train(sk_model,X_train,y_train,max_iter) evaluate(sk_model,X_test,y_test) # Log the trained model mlflow.sklearn.log_model(sk_model, 'log_reg_model') # saves the model print("Model Run",mlflow.active_run().info.run_uuid) mlflow.end_run()
Обучение и оценка модели логистической регрессии для прогнозирования рака молочной железы
Приведенный выше код выполнялся несколько раз с другим параметром «max_iter», вместо того, чтобы записывать результаты вручную, я использовал mlflow. после каждого прогона mlflow создает уникальную папку для этого прогона и содержит всю необходимую информацию* о прогоне
* здесь я сохранил только max_iter, точность поезда, точность теста и график roc, но вы можете зарегистрировать столько решающих параметров по вашему выбору
Эти 32-значные папки содержат информацию обо всех экспериментах.
Чтобы визуализировать результаты, перейдите в рабочий каталог и используйте возможности встроенного веб-сервера MLflow, выполнив следующую команду.
mlflow ui -p 1234
Каждый запуск соответствует разным экспериментам с разными параметрами «max_iter».
MLflow также может быть интегрирован с Tensorflow и pytorch.
Ссылки:
[1] Начало MLOps с MLFlow, Шридхар Алла, Суман Кальян Адари