快速入门DVC(六):指标跟踪、更新训练参数以及可视化模型表现

简介: 在上一篇文章快速入门DVC(五):数据流水线中,讲述了如何完成一个机器学习模型训练流水线,以及如何重现机器学习模型。本文接下来将讲述 DVC 如何进行模型指标跟踪、修改训练参数重新训练以及使用图表可视化模型表现。

收集模型指标

首先,让我们看看获取这些 ML 属性值的机制是什么。 我们在之前的流水线中最后再添加一个评估 Stage:

$ dvc run -n evaluate \
          -d src/evaluate.py -d model.pkl -d data/features \
          -M scores.json \
          --plots-no-cache prc.json \
          --plots-no-cache roc.json \
          python src/evaluate.py model.pkl \
                 data/features scores.json prc.json roc.json
复制代码


其中,-M 参数指定了一个指标文件,而 --plots-no-cache 参数指定了一个不会被 DVC 缓存的图表文件(由这个 Stage 生成)。 dvc rundvc.yaml 文件中生成了一个新的 Stage:

evaluate:
  cmd: python src/evaluate.py model.pkl data/features ...
  deps:
    - data/features
    - model.pkl
    - src/evaluate.py
  metrics:
    - scores.json:
        cache: false
  plots:
    - prc.json:
        cache: false
    - roc.json:
        cache: false
复制代码


这个 Stage 与我们流水线中前几个 Stage 的最大区别在于两个新的部分:指标和图表。 这些指标和图表用于标记某些包含 机器学习“遥测”数据(ML "telemetry") 的文件。 指标文件包含标量值(例如:AUC)和图表文件包含用于可视化和比较的矩阵和一系列数据(例如: ROC 曲线或模型损失图)。

当这些参数使用 cache: false,DVC 跳过缓存进行输出,因为我们希望 score.jsonprc.jsonroc.json 由 Git 进行版本控制。

evaluate.py Python 文件将模型的 ROC-AUC 和平均精度(AP)写入 score.json文件,然后,使用 -M 将其标记为指标文件。 其内容如下:

{ "avg_prec": 0.5204838673030754, "roc_auc": 0.9032012604172255 }
复制代码


同时,evaluate.py Python 文件还将精度、召回率和阈值数组(使用 sklearn 的precision_recall_curve 函数获得)写入图表文件 prc.json

{
  "prc": [
    { "precision": 0.021473008227975116, "recall": 1.0, "threshold": 0.0 },
    ...,
    { "precision": 1.0, "recall": 0.009345794392523364, "threshold": 0.6 }
  ]
}
复制代码


类似地,它将 sklearn 的 roc_curve 函数生成的的数组写入 roc.json 以获得额外的图表。

DVC 不强制您使用任何特定的文件名,也不强制使用指标或图表文件的格式或结构。 它完全由用户根据具体使用场景定义。

您可以使用 DVC 查看跟踪的指标和图表。

首先,我们查看生成的指标:

$ dvc metrics show
Path         avg_prec    roc_auc
scores.json  0.52048     0.9032
复制代码


接下来,我们查看图表:

查看图表之前,需要指定用作坐标轴的数组。我们只需要这样操作一次,DVC 将保存我们的图表配置。

$ dvc plots modify prc.json -x recall -y precision
Modifying stage 'evaluate' in 'dvc.yaml'
$ dvc plots modify roc.json -x fpr -y tpr
Modifying stage 'evaluate' in 'dvc.yaml'
复制代码


现在,我们来查看图表:

$ dvc plots show
file:///Users/dvc/example-get-started/plots.html
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


我们保存这个迭代,以便稍后进行比较:

$ git add scores.json prc.json roc.json
 $ git commit -a -m "Create evaluation stage"
复制代码


稍后我们将看到如何比较和可视化不同的流水线迭代。

现在,我们来看看如何获取另一个对比较非常有用的重要信息:参数。


定义流水线 Stage 的参数

数据科学流水线包含定义可以修改的参数(以训练模型、进行预处理等操作)的配置文件是很常见的。

DVC 为 Stage 提供了一种机制,以依赖于此类配置文件(YAML、JSON、TOML 和 Python 格式均支持)的特定部分的值 。

幸运的是,我们已经在 dvc.yaml 中有一个带有参数的 Stage :

featurize:
  cmd: python src/featurization.py data/prepared data/features
  deps:
    - data/prepared
    - src/featurization.py
  params:
    - featurize.max_features
    - featurize.ngrams
  outs:
    - data/features
复制代码


我们来回忆一下这个 Stage 是如何生成的?

featurize Stage 是使用下面的 dvc run 命令创建的:

dvc run -n featurize \
           -p featurize.max_features,featurize.ngrams \
           -d src/featurization.py -d data/prepared \
           -o data/features \
           python src/featurization.py data/prepared data/features
复制代码


注意: 指定 -p 参数(--params 的缩写),params 部分定义了 featurize Stage 的参数依赖关系。 默认情况下,DVC 从 params.yaml 文件中读取这些值(featurize.max_featuresfeaturize.ngrams)。 但是,与指标和图表一样,参数文件名和结构也可以由用户根据使用场景自定义。

下面是我们的 params.yaml 文件的内容:

prepare:
  split: 0.20
  seed: 20170428
featurize:
  max_features: 500
  ngrams: 1
train:
  seed: 20170428
  n_est: 50
  min_split: 2
复制代码


更新 Stage 参数并进行流水线迭代

我们对目前获得的 AUC 指标值绝对不满意!

让我们编辑 params.yaml 文件以使用bigrams并增加特征数量:

featurize:
-  max_features: 500
-  ngrams: 1
+  max_features: 1500
+  ngrams: 2
复制代码


dvc.yaml 的美妙之处在于您现在需要做的就是运行dvc repro命令:

dvc repro
复制代码


它将分析更改的部分,使用运行缓存中现有的结果,执行所需的命令并生成新结果(模型、指标、图)。

相同的逻辑适用于其他可能的调整(编辑源代码、更新数据集),您进行更改之后、使用 dvc repro命令,然后 DVC 运行需要的内容。


比较流水线进行两次迭代的结果

最后,让我们看看更新操作是否提高模型的表现。

DVC 有一些命令可以查看指标、参数和图表的变化并使其可视化。 这些命令可以用于一个或多个流水线的迭代。 让我们将当前的"bigrams"运行结果与上次提交的"baseline"迭代结果进行比较:

dvc params diff 可以显示工作区中的参数与上次提交的差异。

$ dvc params diff
Path         Param                   HEAD  workspace
params.yaml  featurize.max_features  500   1500
params.yaml  featurize.ngrams        1     2
复制代码


dvc metrics diff 对指标执行相同的操作,显示工作区中的指标与上次提交的差异:

dvc metrics diff
Path         Metric    HEAD     workspace  Change
scores.json  avg_prec  0.52048  0.55259    0.03211
scores.json  roc_auc   0.9032   0.91536    0.01216
复制代码


最后,我们可以用一个命令比较PR曲线和ROC曲线!

$ dvc plots diff
file:///Users/dvc/example-get-started/plots.html
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


总结

本文讲述了dvc metricsdvc plots等命令,DVC 使用这些命令使得跟踪指标、更新参数和使用图表可视化模型表现变得容易。


相关文章
|
25天前
|
机器学习/深度学习 数据采集 算法
大模型开发:什么是时间序列预测,以及如何处理此类数据?
时间序列预测分析历史数据以预测未来,涉及数据收集、预处理、模型选择(如ARIMA或DeepAR)、模型训练、评估及未来值预测。处理时序数据需注意时间依赖性,预处理和模型选择对准确性影响大。
25 3
|
2月前
|
并行计算 Linux 计算机视觉
还在手工标注数据集?快来试一试自动化多模型标注大模型-gui交互式标注(部署运行教程-高效生产力)
还在手工标注数据集?快来试一试自动化多模型标注大模型-gui交互式标注(部署运行教程-高效生产力)
70 0
|
3月前
|
机器学习/深度学习 搜索推荐 算法
推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。
推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。
187 0
|
23天前
大模型开发:描述一个你遇到过的具有挑战性的数据集问题以及你是如何解决它的。
在大模型开发中,面对不平衡数据集(某些类别样本远超其他类别)的问题,可能导致模型偏向多数类。在二分类问题中,正样本远少于负样本,影响模型学习和性能。为解决此问题,采用了数据重采样(过采样、欠采样)、SMOTE技术合成新样本、使用加权交叉熵损失函数、集成学习(Bagging、Boosting)以及模型调整(复杂度控制、早停法、正则化)。这些策略有效提升了模型性能,尤其是对少数类的预测,强调了针对数据集问题灵活运用多种方法的重要性。
8 0
|
24天前
|
机器学习/深度学习 算法
大模型开发:你如何优化超参数?
超参数优化是提升机器学习和深度学习模型性能的关键,包括手动调整、网格搜索、随机搜索、贝叶斯优化、基于梯度的优化、进化算法等方法。此外,利用超参数调优工具、迁移学习、元学习和集成方法也是常用策略。实践中,应结合项目需求和资源选择合适的方法,并配合交叉验证和提前停止技术。
19 1
|
1月前
|
机器学习/深度学习 Python
深入了解CatBoost:自定义目标函数与度量的高级教程
深入了解CatBoost:自定义目标函数与度量的高级教程【2月更文挑战第18天】
22 1
|
2月前
|
C++
【SPSS】两独立样本T检验分析详细操作教程(附案例实战)
【SPSS】两独立样本T检验分析详细操作教程(附案例实战)
202 0
|
TensorFlow 算法框架/工具
TensorFlow自定义评估指标
TensorFlow自定义评估指标
175 0
|
存储 机器学习/深度学习 缓存
DVC 使用案例(五):机器学习实验跟踪
在数据科学项目上取得进展需要大量的实验(尝试调整参数、尝试不同的数据、改进代码、收集更好的指标等)。跟踪所有这些变化是必不可少的,因为我们可能希望在比较结果时检阅它们。以后恢复这些条件(参数、数据等)对于重现结果或恢复工作是有必要的。
|
机器学习/深度学习 存储 人工智能
可视化机器学习实验指标和超参数的最佳工具(Neptune)
根据关键指标评估模型是了解模型质量的关键第一步。 跟踪超参数和相应的评估指标很重要,因为超参数的微小变化有时会对模型质量产生很大影响。 因此,了解哪些超参数有影响,哪些不影响评估指标可以带来有价值的见解。 这就是为什么您应该可视化这些参数对您的指标的影响,并了解您在所有 ML 实验中的模型性能如何。 为了帮助您,我收集了一份推荐工具列表,这些工具将为您完成繁琐的工作。 以下是可视化机器学习实验指标和超参数的六种工具。