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, Шридхар Алла, Суман Кальян Адари