在Streamsets中使用TensorFlow进行实时机器学习

原文链接:https://streamsets.com/blog/machine-learning-with-tensorflow-and-kafka-in-data-collector

作者:Dash Desai  /   2018年10月18日  /  工程StreamSets新闻

       只有当业务用户和应用程序能够从一系列来源访问原始和聚合数据并及时生成数据驱动的洞察时,才能实现现代DataOps平台的真正价值。借助机器学习(ML),分析师和数据科学家可以利用TensorFlow等技术,利用历史数据帮助制定更好的,数据驱动的业务决策 - 离线和实时。

       这篇文章总介绍了,如何使用TensorFlow模型进行预测和分类。

      从Data Collector版本3.7.0开始,TensorFlow Evaluator不再被视为技术预览功能,并且已获准用于生产。

在我们深入了解细节之前,这里有一些基本概念。

机器学习

Arthur Samuel将其描述为:“研究领域为计算机提供了学习能力而无需明确编程。”随着机器学习的最新进展,计算机现在能够进行预测,甚至比人类更好,它可以觉得它可以解决任何问题。让我们首先回顾一下它解决了什么样的问题。

一般而言,ML分为两大类:

监督学习

“监督学习是学习函数的机器学习任务,它根据示例输入 - 输出对将输入映射到输出。” - 维基百科。

它涉及构建一个准确的模型,该模型可以在历史数据被标记为这些结果时预测结果。

监督学习解决的常见业务问题:

  • 二进制分类(学习预测分类值)
    - 客户是否会购买特定产品?
    - 这种癌症是恶性的还是良性的?
  • 多类分类(学习预测分类值)
    - 给定的文本是否有毒,威胁或淫秽?
    - 这种鸢尾花属植物,杂色或维吉尼亚的种类?
  • 回归(学习预测连续价值)
    - 房屋的预测售价是多少?
    - 明天在旧金山的温度是多少?

无监督学习

允许我们在很少或根本不知道输出应该是什么样的情况下解决问题。它涉及构建模型,其中过去数据的标签不可用。在这些类型的问题中,通过基于数据中的变量之间的关系对数据进行聚类来导出结构。

无监督学习的两种常用方法是K均值聚类DBSCAN

注意:Data Collector和Data Collector Edge中的TensorFlow评估器目前仅支持监督学习模型。

神经网络与深度学习

神经网络是ML算法的一种形式,可以学习和使用受人类大脑结构启发的计算模型。与其他ML算法(如决策树,逻辑回归等)相比,神经网络已被证明是高度准确的。

深度学习是神经网络的一个子集,它允许网络在嵌套层次结构中表示各种各样的概念。

Andrew Ng在传统的人工神经网络的背景下描述了它。在他的题为“深度学习,自学习和无监督特征学习”的演讲中,他将深度学习的概念描述为:

“使用大脑模拟,希望:
- 使学习算法更好,更容易使用。
- 在机器学习和人工智能方面取得革命性进展。
我相信这是我们迈向真正人工智能的最好机会。“

常见的神经网络和深度学习应用包括:

  • 计算机视觉/图像识别/物体检测
  • 语音识别/自然语言处理(NLP)
  • 推荐系统(产品,配对等)
  • 异常检测(网络安全等)

TensorFlow

TensorFlow是专为深度神经网络设计的开源ML框架,由Google Brain Team创建。TensorFlow支持Windows和Mac OS上的可扩展和便携式培训 - 在CPU,GPU和TPU上。截至今天,它是GitHub上最受欢迎和最活跃的ML项目。

 

有关更多详细信息,请访问TensorFlow.org

Data Collector中的TensorFlow

通过引入TensorFlow评估程序,您现在可以创建管道,可以在所包含的环境中提取数据/功能并生成预测或分类,而无需对作为Web服务提供和公开的ML模型启动HTTP或REST API调用。例如,Data Collector管道现在可以检测欺诈性事务,或者在数据通过各个阶段之前实时对文本执行自然语言处理,然后再存储到最终目标中,以便进一步处理或做出决策。

此外,使用Data Collector Edge,您可以在Raspberry Pi等设备上运行支持 TensorFlow ML的管道,以及在支持的平台上运行的其他设备。例如,检测高风险地区洪水等自然灾害,以防止损害有价值的资产。

乳腺癌分类

让我们考虑将乳腺癌肿瘤分类为恶性或良性的用例。(威斯康星州)乳腺癌是一种经典的数据集,可作为scikit-learn的一部分。要了解我如何在Python中使用此数据集训练和导出简单的TF模型,请在GitHub上查看我的代码。正如您将注意到的,模型创建和培训保持在最低限度,并且只有几个隐藏层非常简单。要注意的最重要的方面是如何使用TensorFlow SavedModelBuilder * 导出和保存模型。

*注意:要在Data Collector或Data Collector Edge中使用TF模型,应使用TensorFlow SavedModelBuilder以您选择的受支持语言(如Python和交互式环境(如Jupiter Notebook))导出/保存它们。

使用TensorFlow SavedModelBuilder训练和导出模型后,只要将模型保存在Data Collector或Data Collector Edge可访问的位置,就可以在数据流管道中使用它进行预测或分类非常简单。

Pipeline概述

在深入细节之前,这是pipeline的样子。

管道细节

  • 目录来源
    - 这将从.csv文件加载乳腺癌记录。(注意:此输入数据源可以很容易地替换为其他来源,包括Kafka,AWS S3,MySQL等)
  • 场转换器
    - 此处理器将转换模型使用的所有输入乳腺癌记录功能(mean_radius,mean_texture,mean_perimeter,mean_area,mean_smoothness,mean_compactness,mean_concavity,mean_concave_points,mean_symmetry,mean_fractal_dimension,radius_error,texture_error,perimeter_error,area_error,smoothness_errorStringFloat的,compactness_error,concavity_error,concave_points_error,symmetry_error,fractal_dimension_error,worst_radius,worst_texture,worst_perimeter,worst_area,worst_smoothness,worst_compactness,worst_concavity,worst_concave_points,worst_symmetry,worst_fractal_dimension
  • TensorFlow Evaluator *
    - 保存的模型路径:指定要使用的预训练TF模型的位置。
    - 模型标签:设置为“提供”,因为元图(在我们的导出模型中)旨在用于服务。有关更多详细信息,请参阅tag_constants.py和相关的TensorFlow API文档
    - 输入配置:指定在训练和导出模型期间配置的输入张量信息。(请参阅训练模型并使用TensorFlow SavedModelBuilder部分保存/导出它。)
    - 输出配置:指定在训练和导出模型期间配置的输出张量信息。(请参阅训练模型并使用TensorFlow SavedModelBuilder保存/导出它section。)
    - 输出字段:我们想要存储分类值的输出记录字段。
  • 表达式计算器
    - 此处理器评估模型输出/分类值0或1(存储在输出字段TF_Model_Classification中)并创建一个新记录字段'Condition',其值分别为BenignMalignant
  • 流选择器
    - 该处理器评估癌症状况(良性恶性)并将记录路由到相应的Kafka生产者。
  • Kafka Producers
    - 输入记录以及模型输出/分类值有条件地路由到两个Kafka生产者进行进一步处理和分析。(注意:这些目的地可以很容易地用其他目的地替换,例如AWS S3,MySQL,NoSQL等,以便进一步处理和/或分析。)

 

* TensorFlow评估器配置

 

注意:一旦TensorFlow Evaluator生成模型输出,此示例中的管道阶段是可选的,并且可以根据用例的要求与其他处理器和目标互换。

管道执行

在预览(或执行)pipeline时,输入的乳腺癌记录通过上面概述的数据流管道阶段,包括服务我们的TensorFlow模型。发送给Kafka生产者的最终输出记录包括模型用于分类的乳腺癌特征,用户定义的字段TF_Model_Classification中的模型输出值0或1,以及由现场条件创建的相应癌症状况良性恶性