xceman 2020-05-28
不知您是否已注意到,只有当业务用户和应用程序能够访问到不同来源的原始数据和聚合数据,并及时生成基于数据驱动的洞见时,他们才能真正认识到现代化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当前都仅支持监督学习模型。
神经网络与深度学习
神经网络是机器学习算法的一种形式,它可以学习和使用某种受到人脑结构启发而设计出的计算模型。与其他诸如决策树、逻辑回归等机器学习算法相比,神经网络具有很高的准确性。而深度学习是神经网络的子集,它允许网络在嵌套的层次结构中,表示出各种各样的概念。常见的神经网络和深度学习应用程序包括:
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可以访问到的位置,就可以非常简便地在数据流管道中进行预测或分类了。
管道概述
下图展示了上述用例的管道细节。其中:
值得注意的是:相对于TensorFlow Evaluator产生的模型输出,该示例的管道阶段其实是选配的。您可以根据用例的要求,与其他处理器和目标进行相互替换。
管道的执行
在预览(或执行)管道时,那些输入的乳腺癌记录,会通过上述数据流的管道阶段进行传递,并包含针对TensorFlow模型所提供的服务。发送给Kafka生产者的最终输出记录(如上图所示),会包括用于分类乳腺癌的模型特征;在用户定义的字段TF_Model_Classification中,输出的模型值(0或1);以及由表达式评估器创建的字段条件,进而表示癌症状况是良性还是恶性。
总结
上面给大家简单地介绍了由Data Collector 3.5.0新发布的TensorFlow Evaluator的用法。通过该evaluator,您可以提供出经过训练的TF模型,进而在无需额外编写任何自定义代码的情况下,生成各种预测和分类。