【51CTO.com快译】
不知您是否已注意到,只有当业务用户和应用程序能够访问到不同来源的原始数据和聚合数据,并及时生成基于数据驱动的洞见时,他们才能真正认识到现代化DataOps平台的真正价值。凭借着机器学习(Machine Learning,ML)技术,数据分析师和科学家们可以利用各种历史数据,在离线或实时的状态下,使用TensorFlow等技术,协助做出更好的数据驱动类业务决策。
在本文中,您将学习到:如何使用StreamSets Data Collector 3.5.0(请参见-- https://streamsets.com/products/sdc)和StreamSets Data Collector Edge(请参见-- https://streamsets.com/documentation/datacollector/latest/help/datacollector/UserGuide/Edge_Mode/EdgePipelineTypes.html#concept_c14_m4r_4bb)最新发布的TensorFlow Evaluator(请参见--https://streamsets.com/documentation/datacollector/latest/help/datacollector/UserGuide/Processors/TensorFlow.html#concept_otg_csh_z2b),将TensorFlow(TF)模型用于各种预测和分类。
在深入讨论细节之前,我们先一起理清几个基本概念。
机器学习
Arthur Samuel将其描述为:“是一个研究如何让计算机在无需事先做好明确编程的情况下,自动开展学习的领域。”随着机器学习技术的发展,如今的电脑已经能够做出与人类相似、甚至更好的预测。在解决问题的方式上,机器学习通常分为两大类:
监督学习
维基百科的定义为:监督学习是一项能够根据给定示例中的“输入输出对(input-output pair)”,将实际输入映射到输出的学习任务。当历史数据被根据其结果进行了标记之后,它可以通过构建一个准确的模型,来预测各种结果。
监督学习能够解决的常见业务问题包括:
- 二选一分类(学习预测分类值)
- 客户是否会购买某个产品?
- 某种癌症病例是恶性还是良性?
- 多种分类(学习预测分类值)
- 在给定的文本中是否带有病毒、或内容不健康?
- 给定的花卉属于哪种科目和种类?
- 回归(学习预测连续值)
- 房屋的预售价格是多少?
- 明天旧金山是几度?
无监督学习
无监督学习处理的是我们几乎不太了解、或完全不知道输出的问题。由于需要构建的模型无法使用到过往数据的标签,因此它需要根据数据中变量之间的关系,对数据进行聚类以得出结构。
无监督学习的两种常见方法分别是:K-means聚类(请参见-- https://en.wikipedia.org/wiki/K-means_clustering)和DBSCAN(请参见-- https://en.wikipedia.org/wiki/DBSCAN)。
值得注意的是:Data Collector和Data Collector Edge中的TensorFlow Evaluator当前都仅支持监督学习模型。
神经网络与深度学习
神经网络是机器学习算法的一种形式,它可以学习和使用某种受到人脑结构启发而设计出的计算模型。与其他诸如决策树、逻辑回归等机器学习算法相比,神经网络具有很高的准确性。而深度学习是神经网络的子集,它允许网络在嵌套的层次结构中,表示出各种各样的概念。常见的神经网络和深度学习应用程序包括:
- 计算机视觉/图像识别/物体检测
- 语音识别/自然语言处理(NLP)
- 推荐系统(产品推介、婚介交友等)
- 异常检测(网络安全等)
TensorFlow
由Google Brain团队创建的TensorFlow,是专为深度神经网络而设计的开源式机器学习框架。TensorFlow不但能够在Windows和Mac OS上,也能够在CPU、GPU和TPU上,支持可扩展、且可移植式的模型训练。目前,它是GitHub上最受欢迎、且最活跃的机器学习项目之一。
Data Collector中的TensorFlow
通过TensorFlow Evaluator,您可以创建出承载数据/功能的管道,并在包含的环境中产生各种预测或分类。您无需通过初始化HTTP或REST API调用,便可访问那些被公布为Web服务的机器学习模型。例如,数据在被存储到最终目的地之前,往往会经过若干个阶段,而Data Collector的各种管道就可以实时地检测到诸如欺诈性交易、或是通过对文本进行自然语言处理,以采取进一步的处理或决策。
此外,借助Data Collector Edge,您可以在Raspberry Pi(请参见--https://www.raspberrypi.org/)或其他支持此类平台(请参见--https://streamsets.com/documentation/datacollector/latest/help/datacollector/UserGuide/Edge_Mode/SupportedPlatforms.html#concept_yxr_b5q_4bb)的设备上,运行启用TensorFlow机器学习的管道。例如,检测高风险地区的洪水等自然灾害发生的概率。
应用案例
让我们来考虑一个如何将乳腺癌肿瘤分类为恶性或良性的用例。通过使用由scikit-learn模型(请参见--http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_breast_cancer.html)提供的乳腺癌经典数据集,我使用Python构建列一个可用于训练和导出的简单TF模型。您可以通过链接—https://github.com/iamontheinet/datascience/blob/master/Breast_Cancer/breast_cancer_training.py,来查看我在GitHub上的代码。作为一个最简单的用例,我在模型的创建和训练中,只用到了几个隐藏层。不过,您可以留意其中的TensorFlow SavedModelBuilder(请参见--https://www.tensorflow.org/api_docs/python/tf/saved_model/builder/SavedModelBuilder)是如何使用支持的语言(如Python),以及诸如Jupiter Notebook(请参见--http://jupyter.org/)的交互式环境,来导出和保存模型的。
在TensorFlow SavedModelBuilder训练并导出模型后,您只要将模型保存在Data Collector或Data Collector Edge可以访问到的位置,就可以非常简便地在数据流管道中进行预测或分类了。
管道概述
下图展示了上述用例的管道细节。其中:
- 目录来源(Directory Origin):
- 此处会从.csv文件中加载乳腺癌的数据记录。注意:您可以将此处输入的数据源轻松地替换为其他来源,包括:Kafka、AWS S3、MySQL等。
- 场转换器(Field Converter):
- 该处理器将对所有带有乳腺癌记录特征的输入,从字符串到浮点型在均值上进行各种转换。
- TF评估器(TensorFlow Evaluator,其配置如下图):
- 已保存的模型路径:指定TF模型的位置,以用于预训练。
- 模型标签:在我们的导出模型中,由于元图(meta graph)旨在用于服务,因此被需要设置为“serve”。如您想了解更多详细信息,请参考tag_constants.py(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/saved_model/tag_constants.py)和相关的TensorFlow API文档(https://www.tensorflow.org/api_docs/python/tf/saved_model/tag_constants)。
- 输入配置:指定在训练和导出模型期间配置的输入张量(tensor)信息。请参阅训练模型,并使用TensorFlow SavedModelBuilder来保存与导出部分(https://github.com/iamontheinet/datascience/blob/master/Breast_Cancer/neural_networks_with_tensorflow-breast-cancer.ipynb)。
- 输出配置:指定训练和导出模型期间配置的输出张量信息(请同样请参阅上述链接)。
- 输出字段:我们需要存储分类值的输出记录字段。
- 表达式评估器(Expression Evaluator):
- 该处理器评估模型的输出与分类值是0还是1(通常存储在输出字段TF_Model_Classification中),并且据此分别创建一个具有“良性”或“恶性”特征“条件(Condition)”的新记录字段。
- 流选择器(Stream Selector):
- 通评估癌症的状况(良性或恶性),它将记录发送给各个Kafka生产者(producer)。
- Kafka生产者(Kafka producer):
- 各种输入记录连同模型的输出/分类值,会被有条件地路由到两个Kafka生产者处,以进一步处理与分析。(请注意:此处的目标可以被轻松地替换为其他目标,包括:AWS S3、MySQL、以及NoSQL等)
值得注意的是:相对于TensorFlow Evaluator产生的模型输出,该示例的管道阶段其实是选配的。您可以根据用例的要求,与其他处理器和目标进行相互替换。
管道的执行
在预览(或执行)管道时,那些输入的乳腺癌记录,会通过上述数据流的管道阶段进行传递,并包含针对TensorFlow模型所提供的服务。发送给Kafka生产者的最终输出记录(如上图所示),会包括用于分类乳腺癌的模型特征;在用户定义的字段TF_Model_Classification中,输出的模型值(0或1);以及由表达式评估器创建的字段条件,进而表示癌症状况是良性还是恶性。
总结
上面给大家简单地介绍了由Data Collector 3.5.0新发布的TensorFlow Evaluator的用法。通过该evaluator,您可以提供出经过训练的TF模型,进而在无需额外编写任何自定义代码的情况下,生成各种预测和分类。
原Real-Time Machine Learning With TensorFlow in Data Collector,作者: Dash Desai
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】