自动化机器学习指南之四大成熟度模型

编译作者: 陈峻 2019-12-31 09:00:00

【51CTO.com快译】人工智能和机器学习的概念在数据科学界中已经普遍流行。通过这些概念,过去许多需要人工完成的任务,已经能够被更加高效且准确的自动化方式所取代。可以说,随着技术趋势的变化,自动化机器学习在简化人工操作的基础上,既节省了时间又提高了效率。

自动化机器学习:自动化训练过程

从概念上说,机器学习旨在通过对机器进行训练,通过处理现实数据的方式,提供预期的输出。也就是说:它能够让机器从现有的数据(或经验)中得到一定程度的训练,在经历了一番完整的数据处理之后,进而生成更准确的输出。那么自动化机器学习(AutoML)的概念显然是要使得整个过程彻底实现自动化。

自动化机器学习的成熟度模型

自动化机器学习的不同实现方式可以根据它们所对应的成熟度,进行不同级别的分类。如下图所示,模型成熟度越高,表示它对于自动化任务的支持就越好,当然也就需要该模型能够通过对于数据的集中训练,执行更多的任务、提供更多的服务。

自动化机器学习指南之四大成熟度模型

1.超参数优化

当数据集被提交过来之后,自动化机器学习会根据上述成熟度模型,尝试着去匹配各种既有的模型,例如:随机森林、线性回归等(一般使用的是结构化的数据)。同时,它会按需为那些应用到数据上的每一种模型,去优化超参数(hyperparamters)。此类优化技术包括:手动搜索、随机搜索、网格搜索等。

例如:Auto-sklearn使用贝叶斯模型进行超参数优化,并且能够提供所需的结果。不过,在该级别的成熟度模型中,自动化机器学习只能执行有限的任务,例如:交叉验证、机器学习算法的选择、超参数的优化等。当然,随着成熟度水平的提高,自动化机器学习将会具有更多的功能,提供更出色的结果。

2. 一级以上的数据预处理

在第一级中,自动化机器学习需要用户自行实现数据的预处理措施。但是,到了第二级,由于使用了更为成熟的模型,各种数据的预处理任务便可以由自动化本身来完成,并为进一步处理做好准备。

通过搜索和了解列的类型,机器学习自身完全有能力将所有数据(包括一些空值数据)转换为常见的数值类型。当然,此处并不包括对于数据的高级转换与预处理,这些仍然需要数据科学家自行采取进一步的操作。

对于目标任务而言,系统仅负责搜索和选择适当的机器学习算法。例如:根据手头的移动应用开发任务,设计自动化机器学习的算法与模型,通过对于数据的预处理,以得出所需的预算、时间、以及其他准确的结果。

通过对于数据的预处理,自动化机器学习系统能够构建并实现特征选择降低维度、数据压缩等功能,进而无缝地执行各项训练任务。

3.找到合适的机器学习架构

上述第一、二级自动化机器学习系统,显然无法根据数据的性质,主动发现合适的机器学习架构,并通过执行,以确保出色的输出。而在第三级中,以AutoKeras为代表的开源式自动化机器学习库,实现了神经架构搜索(NAS,neural architecture search,请参见:https://en.wikipedia.org/wiki/Neural_architecture_search)。该流行架构能够有效地在图像、语音或文本上实施机器学习算法。

因此,数据科学家可以使用不同的神经架构搜索算法,来增强对于自动化机器学习的支持与经验积累。在实际应用中,自动驾驶汽车、自动化消费服务等领域都采用了第三级的自动化机器学习系统。

4.相关领域知识的使用

为了能够提供准确的机器学习系统输出,深入地了解数据,特别是数据的范围和承载的系统是非常必要的。只有使用相关领域的知识,并时刻参照所有必需考虑的标准,才能实现复杂的人工智能的效果。

可见,针对现有相关领域的知识储备和在实际场景中的使用,无疑会提高最终结果的准确性。与此同时,准确性的提高也会驱动出色的预测能力,并为自动化机器学习的各项任务提供全面的支持。因此,这个级别的成熟度模型注重的是:通过增加背景领域的相关知识,凭借具有明确结果导向(result-oriented)的记录,来提高自动化机器学习系统的准确性。

自动化机器学习的实例

从事数据科学研究的人员可以根据实际应用场景的需求,使用各种工具和软件库来开发自动化的流程、以及具有精准输出的机器学习系统。

自动化机器学习的开源库

目前,业界有着很多种类的开源库,能够支持和满足开发人员在其系统中实现各种自动化的机器学习需求。

1. AutoKeras

该软件库在GitHub上可供开发人员免费使用。由Data Lab开发的AutoKeras,旨在提供对于所有深度学习(deep learning)工具的访问,进而增强深度学习模型的整体能力。如下代码是AutoKeras的应用示例:

  1. import autokeras as ak 
  2. clf = ak.ImageClassifier() 
  3. clf.fit(x_train, y_train) 
  4. results = clf.predict(x_test) 

Python源代码链接:https://github.com/jhfjhfj1/autokeras

2. MLBox

MLBox是另一种使用Python编写的开源库。它能够更快、更轻松地开发出自动化机器学习的各种函数,其中包含了可用于数据预处理、清理、以及格式化等功能。如下代码示例展示了在导入数据之后,如何进行数据预处理的过程:

  1. from mlbox.preprocessing import * 
  2. from mlbox.optimisation import * 
  3. from mlbox.prediction import * 
  4. paths = ["../input/train.csv","../input/test.csv"
  5. target_name = "Survived" 
  6. rd = Reader(sep = ","
  7. df = rd.train_test_split(paths, target_name) #reading and preprocessing (dates, ...) 

Python源代码链接:https://www.kaggle.com/axelderomblay/running-mlbox-auto-ml-package-on-titanic

3. Auto-sklearn

Auto-sklearn是另一种开源的自动化机器学习支持库。它通过选择适当的机器学习算法,来研究数据的模型和需求。它消除了用户端对于超参数处理的要求,进而能够自行开展处理工作。如下代码是在数据集上实现Auto-sklearn的应用示例:

  1. import autosklearn.classification 
  2. import sklearn.model_selection 
  3. import sklearn.datasets 
  4. import sklearn.metrics 
  5. X, y = sklearn.datasets.load_digits(return_X_y=True
  6. X_train, X_test, y_train, y_test = \ 
  7. sklearn.model_selection.train_test_split(X, y, random_state=1) 
  8. automl = autosklearn.classification.AutoSklearnClassifier() 
  9. automl.fit(X_train, y_train) 
  10. y_hat = automl.predict(X_test) 
  11. print("Accuracy score", sklearn.metrics.accuracy_score(y_test, y_h 

Python源代码链接:https://自动化机器学习.github.io/auto-sklearn/master/

自动化机器学习工具

如下工具虽然是为商业用途而发布的,但是它们不但得到了广泛地使用,而且保证了自动化机器学习的输出质量。

DataRobot

DataRobot是第一款支持自动化机器学习的工具。它提供了一个能够实现人工智能的先进平台,在协助用户解决各项问题的同时,用户可以不必过于担心其执行过程,而能够轻松地获取所需的结果。DataRobot API不但支持预测,而且能够使机器通过选择适当的方法,来实现自动化处理,并提供输出结果。

如下代码是DataRobot API的一个应用示例。它使用数据集来预测30天之内各家医院的患者可能再次入院的几率。

  1. import datarobot as dr  
  2. import pandas as pd  
  3. pd.options.display.max_columns = 1000  
  4. import numpy as np  
  5. import time  
  6. import matplotlib.pyplot as plt  
  7. from jupyterthemes import jtplot  
  8. # currently installed theme will be used to set plot style if no arguments provided  
  9. jtplot.style()  
  10. get_ipython().magic('matplotlib inline' 
  11. load input data  
  12. df = pd.read_csv('../demo_data/10kDiabetes.csv' 
  13. # initialize datarobot client instance  
  14. dr.Client(config_path='/Users/benjamin.miller/.config/datarobot/my_drconfig.yaml' 
  15. create 100 samples with replacement from the original 10K diabetes dataset 
  16. samples = []  
  17. for i in range(100):  
  18. samples.append(df.sample(10000, replace=True))  
  19. # loop through each sample dataframe  
  20. for i, s in enumerate(samples):  
  21. # initialize project  
  22. project = dr.Project.start  
  23.  
  24. project_name='API_Test_{}'.format(i+20),  
  25. sourcedata=s,  
  26. target='readmitted' 
  27. worker_count=2  
  28.  
  29. # get all projects  
  30. projects = []  
  31. for project in dr.Project.list():  
  32. if "API_Test" in project.project_name:  
  33. projects.append(project)  
  34. # *For each project...*  
  35. # Make predictions on the original dataset using the most accurate model  
  36. # initialize list of all predictions for consolidating results  
  37. bootstrap_predictions = []  
  38. # loop through each relevant project to get predictions on original input dataset  
  39. for project in projects:  
  40. # get best performing model  
  41. model = dr.Model.get(project=project.id, model_id=project.get_models()[0].id)  
  42. # upload dataset  
  43. new_data = project.upload_dataset(df) 
  44. # start a predict job  
  45. predict_job = model.request_predictions(new_data.id)  
  46. # get job status every 5 seconds and move on once 'inprogress'  
  47. for i in range(100):  
  48. time.sleep(5) 
  49. try:  
  50. job_status = dr.PredictJob.get(  
  51. project_id=project.id,  
  52. predict_job_id=predict_job.id  
  53. ).status  
  54. except: # normally the job_status would produce an error when it is completed 
  55. break  
  56. # now the predictions are finished  
  57. predictions = dr.PredictJob.get_predictions( 
  58. project_id=project.id, 
  59. predict_job_id=predict_job.id 
  60.  
  61. # extract row ids and positive probabilities for all records and set to dictionary  
  62. pred_dict = {k: v for k, v in zip(predictions.row_id, predictions.positive_probability)} 
  63. # append prediction dictionary to bootstrap predictions 
  64. bootstrap_predictions.append(pred_dict)  
  65. # combine all predictions into single dataframe with keys as ids  
  66. # each record is a row, each column is a set of predictions pertaining to  
  67. # a model created from a bootstrapped dataset  
  68. df_predictions = pd.DataFrame(bootstrap_predictions).T  
  69. add mean predictions for each observation in df_predictions  
  70. df_predictions['mean'] = df_predictions.mean(axis=1)  
  71. # place each record into equal sized probability groups using the mean  
  72. df_predictions['probability_group'] = pd.qcut(df_predictions['mean'], 10)  
  73. # aggregate all predictions for each probability group  
  74. d = {} # dictionary to contain {Interval(probability_group): array([predictions])}  
  75. for pg in set(df_predictions.probability_group):  
  76. # combine all predictions for a given group  
  77. frame = df_predictions[df_predictions.probability_group == pg].iloc[:, 0:100]  
  78. d[str(pg)] = frame.as_matrix().flatten()  
  79. create dataframe from all probability group predictions  
  80. df_pg = pd.DataFrame(d)  
  81. create boxplots in order of increasing probability ranges 
  82. props = dict(boxes='slategray', medians='black', whiskers='slategray'
  83. viz = df_pg.plot.box(color=props, figsize=(15,7), patch_artist=True, rot=45) 
  84. grid = viz.grid(False, axis='x'
  85. ylab = viz.set_ylabel('Readmission Probability'
  86. xlab = viz.set_xlabel('Mean Prediction Probability Ranges'
  87. title = viz.set_title( 
  88. label='Expected Prediction Distributions by Readmission Prediction Range'
  89. fontsize=18 

Python源代码链接:https://blog.datarobot.com/estimation-of-prediction-distributions-using-datarobot

H2O.ai

另一款支持人工智能的服务平台工具是H2O。它主要被用于完成诸如:无人驾驶的AI结果输出等方面的机器学习任务。

总结

除了上述提到的工具和软件库,市场上也有着诸如:Google AutoML(https://cloud.google.com/automl/)等其他商业类型的解决方案。它们在实现机器学习相关概念的同时,推动了自动化数据的训练,并能够提供出色的结果与预测。如今,随着自动化机器学习效果的凸显,人工智能技术也得到了不断地增强,越来越多的企业都能够从此类系统的输出结果中持续受益。

原文标题:A Beginner's Guide to Automated Machine Learning: 4 Maturity Models to Understand,作者:Manoj Rupareliya

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

机器学习 人工智能 AI
上一篇:许多大数据科学家都已经离职?原因我来告诉你 下一篇:机器学习毕业生开始发愁找工作了!毕业生和企业,究竟谁更挑剔?
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

干货!从0到1教你打造一个令人上瘾的聊天机器人?

几千年来,我们一直都是直接通过对话来解决问题的。聊天机器人(Chatbots)的出现实际上是回归到了最简单的岁月。

火火酱 ·  1天前
治愈大脑,人机共生,马斯克为“脑机接口”辩护

随着今年年初特斯拉中国工厂正式开始交付特斯拉 model3 型号电动汽车,特斯拉的股值不断飙升,与此同时特斯拉和马斯克也在新闻媒体上赚足了眼球。

学术君 ·  1天前
英伟达将展示6款机器人:真人大小,力举千斤……

除了显卡之外,老黄近几年也越来越关注AI与机器人,在下月举行的GTC 2020上,英伟达宣布将至少展示6款机器人,它们高矮胖瘦各不同,具备不同的功能。

佚名 ·  1天前
戴口罩难以刷脸支付 刷手行不行?

人工智能技术日益深入生活的同时,公众的隐私担忧也越来越甚。人脸作为生物识别特征数据的一种,与其他识别方式相比具有更容易暴露、难以更改的特性,公众对相关的收集使用活动就更为敏感。那么,有没有其他支付方式?

佚名 ·  1天前
如何在Kaggle上打比赛,带你进行一次完整流程体验

Kaggle是一个磨练您的机器学习和数据科学技能的好地方,您可以将自己与他人进行比较,并学习新的技术。在这篇文章中,我们利用一个典型的例子,来给大家演示如何参加Kaggle竞赛。

机器学习与数据分析 ·  1天前
从TensorFlow到Theano:横向对比七大深度学习框架

最近,来自数据科学公司 Silicon Valley Data Science 的数据工程师 Matt Rubashkin(UC Berkeley 博士)为我们带来了深度学习 7 种流行框架的深度横向对比,希望本文能对你带来帮助。

AI小师弟 ·  1天前
AI驱动的网络安全团队致力于人类强化

在很多其他行业,流程自动化和AI预示着工作机会的减少,但与之不同的是,威胁情报的未来是强化人类,而不是取代人类。在这方面,我们的研究发现以下三个主要原因。

邹铮 ·  1天前
关于AI我们完全错了!MIT教授批判:对数据过度关注

Luis Perez-Breva是麻省理工学院(MIT)的教授,也是麻省理工学院或工程学院创新团队的主任。他致力于了解我们如何使用技术来改善生活,并探讨如何努力将新技术推向世界。

图灵联邦 ·  1天前
Copyright©2005-2020 51CTO.COM 版权所有 未经许可 请勿转载