如何用MLflow做机器学习实验效果比对
背景介紹
最近看了很多MLflow相關(guān)的內(nèi)容,做一個(gè)簡(jiǎn)單的分享。MLFlow是一款管理機(jī)器學(xué)習(xí)工作流程的工具,核心由以下4個(gè)模塊組成:
MLflow Tracking:如何通過(guò)API的形式管理實(shí)驗(yàn)的參數(shù)、代碼、結(jié)果,并且通過(guò)UI的形式做對(duì)比。
MLflow Projects:代碼打包的一套方案
MLflow Models:一套模型部署的方案
MLflow Model Registry:一套管理模型和注冊(cè)模型的方案
今天重點(diǎn)講講MLflow Tracking,也就是如何做機(jī)器學(xué)習(xí)不同模型下的實(shí)驗(yàn)的管理以及效果的比對(duì)。
詳細(xì)流程
(1)安裝環(huán)境
肯定要首先安裝mlflow,可以通過(guò)pip install mlflow的方式進(jìn)行安裝。
(2)訓(xùn)練代碼
可以使用mlflow的官方demo做模型的訓(xùn)練,具體代碼如下:
重點(diǎn)看下最后幾行:
mlflow.log_param("alpha", alpha)
mlflow.log_param("l1_ratio", l1_ratio)
mlflow.log_metric("rmse", rmse)
mlflow.log_metric("r2", r2)
mlflow.log_metric("mae", mae)
在這幾行代碼中,demo通過(guò)mlflow sdk注冊(cè)了參與訓(xùn)練的參數(shù),分別是alpha和l1_ratio,另外也注冊(cè)了metric(參與評(píng)估的指標(biāo))為rmse、r2、mae
(3)執(zhí)行訓(xùn)練任務(wù)
import os
import warnings
import sys
?
import pandas as pd
import numpy as np
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
from sklearn.model_selection import train_test_split
from sklearn.linear_model import ElasticNet
import mlflow
import mlflow.sklearn
import logging
logging.basicConfig(level=logging.WARN)
logger = logging.getLogger(__name__)
?
def eval_metrics(actual, pred):
? ? rmse = np.sqrt(mean_squared_error(actual, pred))
? ? mae = mean_absolute_error(actual, pred)
? ? r2 = r2_score(actual, pred)
? ? return rmse, mae, r2
?
if __name__ == "__main__":
? ? warnings.filterwarnings("ignore")
? ? np.random.seed(40)
? ? # Read the wine-quality csv file from the URL
? ? csv_url =\
? ? ? ? 'http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv'
? ? try:
? ? ? ? data = pd.read_csv(csv_url, sep=';')
? ? except Exception as e:
? ? ? ? logger.exception(
? ? ? ? ? ? "Unable to download training & test CSV, check your internet connection. Error: %s", e)
?
? ? # Split the data into training and test sets. (0.75, 0.25) split.
? ? train, test = train_test_split(data)
?
? ? # The predicted column is "quality" which is a scalar from [3, 9]
? ? train_x = train.drop(["quality"], axis=1)
? ? test_x = test.drop(["quality"], axis=1)
? ? train_y = train[["quality"]]
? ? test_y = test[["quality"]]
?
? ? alpha = float(sys.argv[1]) if len(sys.argv) > 1 else 0.5
? ? l1_ratio = float(sys.argv[2]) if len(sys.argv) > 2 else 0.5
?
? ? with mlflow.start_run():
? ? ? ? lr = ElasticNet(alpha=alpha, l1_ratio=l1_ratio, random_state=42)
? ? ? ? lr.fit(train_x, train_y)
? ? ? ? predicted_qualities = lr.predict(test_x)
? ? ? ? (rmse, mae, r2) = eval_metrics(test_y, predicted_qualities)
? ? ? ? print("Elasticnet model (alpha=%f, l1_ratio=%f):" % (alpha, l1_ratio))
? ? ? ? print("? RMSE: %s" % rmse)
? ? ? ? print("? MAE: %s" % mae)
? ? ? ? print("? R2: %s" % r2)
?
? ? ? ? mlflow.log_param("alpha", alpha)
? ? ? ? mlflow.log_param("l1_ratio", l1_ratio)
? ? ? ? mlflow.log_metric("rmse", rmse)
? ? ? ? mlflow.log_metric("r2", r2)
? ? ? ? mlflow.log_metric("mae", mae)
? ? ? ? mlflow.sklearn.log_model(lr, "model")
接下來(lái)就可以執(zhí)行訓(xùn)練任務(wù),每次執(zhí)行需要傳兩個(gè)參數(shù),分別對(duì)應(yīng)代碼里的alpha和l1_ratio這兩個(gè)取值。
python train.py 0.4 0.4
python train.py 0.5 0.5
python train.py 0.6 0.6
訓(xùn)練完后數(shù)據(jù)會(huì)在本地做一個(gè)存儲(chǔ),以每次任務(wù)的實(shí)例名稱為文件夾名
?
每個(gè)任務(wù)下面有四個(gè)內(nèi)容,分別是params、metrics、artifacts、tags
-
Artifacts:存儲(chǔ)輸出的model
-
Metrics:存儲(chǔ)了模型的評(píng)估指標(biāo),比如mae、r2、rmse
-
Params:存儲(chǔ)的是一些參數(shù)
-
Tags:存儲(chǔ)的是一些任務(wù)的meta,就是用戶、日志等等
(4)可視化管理
在terminal中運(yùn)行命令:mlflow run
然后在瀏覽器輸入localhost:5000,可以打開(kāi)mlflow的UI
experiments是實(shí)驗(yàn)對(duì)照組,在選擇對(duì)照組后可以選擇不同的任務(wù)進(jìn)行比較。
可以看到不同任務(wù)的效果比對(duì):
也可以圖形化的展示:
?
總結(jié)
以上是生活随笔為你收集整理的如何用MLflow做机器学习实验效果比对的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Elastic Search入门:架构说
- 下一篇: 二张图白话广告RTA技术