为了下个项目的质量!每个数据科学家都应该学会这两种工具

开发 开发工具
为了更好地利用时间和资源,我决定使用一系列可用的在线工具来调试和分析机器学习模型。测试了几个工具后,我成功缩减了清单:开发或改进机器学习模型时,每个数据科学家都应考虑这两个超赞的工具。

本文转载自公众号“读芯术”(ID:AI_Discovery)。

使用机器学习模型越久,就越能意识到,正确了解模型当下的运行目的及效果有多重要。在实践中,即便是在最佳情况下,跟踪模型的运行情况(尤其是在测试各种模型参数组合时)都十分繁琐。大多数情况下,我都会构建自己的工具来调试和分析机器学习模型。

[[344901]]

最近,在为MAFAT的多普勒脉冲雷达分类挑战设计各种模型的时候,我发觉自己手动构建模型调试工具就是在浪费时间,而搭建集成(组合大多数分类策略的机器学习模型,搭对了就会带来极大效用)时尤为繁琐。

创建集成的问题就是,各种模型及分类都需要让策略奏效。这就意味着要训练更多的模型、进行更多的分析、了解更多关于整体精度及模型性能的参数。同样,这就要求我花更多的时间创建自己的调试工具和策略。

为了更好地利用时间和资源,我决定使用一系列可用的在线工具来调试和分析机器学习模型。测试了几个工具后,我成功缩减了清单:开发或改进机器学习模型时,每个数据科学家都应考虑这两个超赞的工具。 

Weights & Biases

为了下个项目的质量!每个数据科学家都应该学会这两种工具

Weights &Biases图表跟踪验证集内各种具有不同参数的模型的性能。Y轴表示精度,X轴表示训练回合数。

Weights & Biases(W&B)是一家总部位于旧金山的公司,提供一系列能无缝融入现有或新项目的深度学习及机器学习工具。它主要是跟踪项目中模型变化的实时性能,简直太管用了。

我在做项目时,常常就追踪问题手足无措:何时进行了哪些更改?这些更改对项目的各种评估指标是否产生了正面或负面影响?而W&B能用以多种方式存储并可视化这些评估指标,其中最有效的就是图表和表格:

 

为了下个项目的质量!每个数据科学家都应该学会这两种工具

 

 

用W&B工具跟踪和可视化各种指标以进行并排比较的示例

 

 

为了下个项目的质量!每个数据科学家都应该学会这两种工具

模型数据存储在可导出表格中,以便在W&B网站上进行排序和评估。

如你所见,折线图表示在训练期间使用不同指标跟踪各种模型的性能。这样便能进行无缝并排比较,以检查过拟合或检查验证集上表现最佳的模型等。

W&B如何与项目关联?

在W&B网站上创建账户后,必须在本地环境下安装并登录到个人页面。

  1. !pip install --upgrade wandb 
  2. !wandb login <Your login code> 

深度学习或者机器学习工具不同,情况也可能不同。我用Keras,但其它项目的文档会更清晰,也易于执行:

  1. #Import the package 
  2. import wandb 
  3. from wandb.keras import WandbCallback#Initialize the W&B object 
  4. wandb.init(project="tester")#Link the model with W&B’stracking metrics 
  5. model.fit(X_train, y_train, validationData=(X_test, y_test) epochs=config.epochs, callbacks=[WandbCallback()])model.save(os.path.join(wandb.run.dir,"model.h5")) 

训练模型时,W&B帐户会实时跟踪和更新进度,在账户内能轻松分析和评估模型的性能。在这里,你可以选择创建报告,提供更专业、更易理解的结果视图,可以在其中覆盖文本和其他视觉效果。

W&B十分有助于跟踪模型的性能,在更改参数并尝试各种技术时更是如此。实际上,这个说法绝不夸张。它确实能帮上大忙:OpenAI和Toyota Research这样的大公司定期使用它,称赞它是灵活且有效用的项目工具。

Uber的Manifold

[[344903]]

图源:unsplash

我正在项目中创建集成。一个集成是不同算法的集合,每个算法就同一数据进行训练并提供预测。集成的优势在于,它提供了一系列不同的策略来寻找解决方案,并利用多数票使所有模型的分类民主化。这很有用,因为尽管单个模型可以很好地预测部分数据,但它可能会在其他部分不知所措。

在机器学习中,“集成就是数字力量”。为了让集成表现良好,组成集成的各个模型必须能进行多样化预测。多样化预测,即不能所有模型都对某数据进行一模一样的预测;它们应该能对不同数据进行准确预测。然而这也带来了问题:你怎么知道集成进行的是多样化预测呢?看看交通科技巨头Uber的Manifold吧。

Uber的Manifold是个开源长期项目,旨在为机器学习提供调试的可视化工具(模型是什么样子的都无所谓)。通俗地讲,Manifold让你能看见哪个模型在数据子集中表现不佳、哪些特性导致了表现不佳。

集成能帮大忙。它创建了一个Widget输出,在Notebook就能交互以进行快速分析。注意,该工具目前仅在经典的Jupyter Notebook电脑上可用。它在Jupyter Lab或Google的Colab上不能运行。

Manifold使用k均值聚类——一种邻近分组技术,将预测数据分为性能相似的片段。想象一下,这是将数据分成相似的子类,然后沿着每个分段绘制模型,其中模型越靠左,则在该分段上表现越好。随机生成的示例中可以看到这一点:

为了下个项目的质量!每个数据科学家都应该学会这两种工具

上述例子中有三个模型,输入数据被分成四段。把对数损失(log-loss)作为性能指标,可以看到model_1在segment_0上的表现不佳,而model_2在segment_2上的表现不佳。线的形状表示性能分布,线的高度表示对数损失下的相对数据点计数。例如,在segment_1的model_1上,对数损失为1.5,点的均值低,但十分密集。

Manifold还提供了功能归因视图:

为了下个项目的质量!每个数据科学家都应该学会这两种工具

功能归因视图强调每个片段的功能分布。在上面的示例中,数据组0包含聚类2和3,将其与包含聚类0和1的数据组1进行比较。x轴是特征值,而y轴是原因的强度。Feature_0高亮显示这些差异,而Feature_1高亮显示特征值的直方图。

那么,如何把Manifold融入项目?

Manifold还处在早期研发阶段,还得继续调bug。但是,这不该妨碍你在项目中使用它。就个人情况来说,我需要弄几个安装包才能在Jupyter Notebook上运行它。

  1. !jupyter nbextension install --py --sys-prefix widgetsnbextension 
  2. !jupyter nbextension enable --py --sys-prefix widgetsnbextension 
  3. !pip install mlvis!jupyter nbextension install --py --symlink --sys-prefix mlvis 
  4. !jupyter nbextension enable --py --sys-prefix mlvis 

仅仅安装nbextention包是不够的,我还必须启用这些软件包。可以在这里导入一些demo工具:

  1. from mlvis import Manifold 
  2. import sys, json, mathfrom random import uniform 

要使用Manifold框架,数据需要分成三组特定格式。第一组是所有必须在字典列表中的x值:

  1. #Example of x-values 
  2. x = [ 
  3.   {'feature_0': 21, 'feature_1': 'B'}, 
  4.   {'feature_0': 36, 'feature_1': 'A'} 

第二组是不同的模型预测,它必须是列表的列表,每个列表都是不同模型的预测:

  1. #Example of model predictions 
  2. yPred = [ 
  3.   [{'false': 0.1, 'true': 0.9}, {'false':0.8, 'true': 0.2}], 
  4.   [{'false': 0.3, 'true': 0.7}, {'false':0.9, 'true': 0.1}], 
  5.   [{'false': 0.6, 'true': 0.4}, {'false':0.4, 'true': 0.6}] 

最后一组是ground truth值或实际正确的y值,它们在列表值中:

  1. #Example of ground truth 
  2. yTrue = [ 
  3.   'true',  'false' 

数据一旦采用这种格式,值就可以输入到Manifold对象中,操作进行Widget,有些类似于上面的例子:

  1. Manifold(props={'data': { 
  2.     'x': x, 
  3.     'yPred': yPred, 
  4.     'yTrue': yTrue 
  5. }}) 

然后使用Manifold就能直观地评估不同模型对相同数据的表现了。这对于构建集成非常有帮助,因为它使我能够了解哪些模型在哪里执行,哪些数据集群是模型最难分类的。Manifold同样帮我评估了集成中每个模型的预测多样性,使我能构建一个更强大、能分类一系列不同输入数据的设备。

[[344904]]

图源:unsplash

对我来说,上述两种工具真的是越来越有用了。它们可以帮我应对这一挑战并切实改善设备的性能,希望读者也能用这些工具来创建更好的模型。

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2018-03-01 14:30:22

数据科学概率分布

2021-03-17 08:27:23

数据科学家数据科学

2019-07-11 12:59:27

数据科学家概率分布统计

2020-09-29 17:15:41

数据科学技术

2020-08-11 06:51:58

Python编程语言

2020-12-14 12:54:07

数据类型数据分析数据科学

2015-07-23 10:49:06

Python工具数据科学

2017-08-04 15:53:10

大数据真伪数据科学家

2020-11-02 13:44:35

算法数据科学Python

2021-04-08 10:15:46

数据工程师数据库数据科学家

2020-06-28 07:46:34

MLDB数据库机器学习

2019-12-13 07:58:34

数据科学数据科学家统计

2016-08-02 17:00:12

Hadoop大数据系统

2020-06-16 13:32:02

数据科学家大数据系统

2020-10-31 22:04:39

统计和数据科学数据科学家

2017-01-23 16:00:25

数据科学家大数据数学家

2018-03-07 12:57:53

2012-02-28 10:52:13

2020-07-10 13:59:52

Kaggle代码数据

2016-05-11 10:36:16

数据科学家数据科学大数据
点赞
收藏

51CTO技术栈公众号