在Data Collector中如何使用TensorFlow實現(xiàn)實時機器學習
譯文
【51CTO.com快譯】
不知您是否已注意到,只有當業(yè)務用戶和應用程序能夠訪問到不同來源的原始數(shù)據(jù)和聚合數(shù)據(jù),并及時生成基于數(shù)據(jù)驅(qū)動的洞見時,他們才能真正認識到現(xiàn)代化DataOps平臺的真正價值。憑借著機器學習(Machine Learning,ML)技術,數(shù)據(jù)分析師和科學家們可以利用各種歷史數(shù)據(jù),在離線或?qū)崟r的狀態(tài)下,使用TensorFlow等技術,協(xié)助做出更好的數(shù)據(jù)驅(qū)動類業(yè)務決策。
在本文中,您將學習到:如何使用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)最新發(fā)布的TensorFlow Evaluator(請參見--https://streamsets.com/documentation/datacollector/latest/help/datacollector/UserGuide/Processors/TensorFlow.html#concept_otg_csh_z2b),將TensorFlow(TF)模型用于各種預測和分類。
在深入討論細節(jié)之前,我們先一起理清幾個基本概念。
機器學習
Arthur Samuel將其描述為:“是一個研究如何讓計算機在無需事先做好明確編程的情況下,自動開展學習的領域。”隨著機器學習技術的發(fā)展,如今的電腦已經(jīng)能夠做出與人類相似、甚至更好的預測。在解決問題的方式上,機器學習通常分為兩大類:
監(jiān)督學習
維基百科的定義為:監(jiān)督學習是一項能夠根據(jù)給定示例中的“輸入輸出對(input-output pair)”,將實際輸入映射到輸出的學習任務。當歷史數(shù)據(jù)被根據(jù)其結(jié)果進行了標記之后,它可以通過構建一個準確的模型,來預測各種結(jié)果。
監(jiān)督學習能夠解決的常見業(yè)務問題包括:
- 二選一分類(學習預測分類值)
- 客戶是否會購買某個產(chǎn)品?
- 某種癌癥病例是惡性還是良性?
- 多種分類(學習預測分類值)
- 在給定的文本中是否帶有病毒、或內(nèi)容不健康?
- 給定的花卉屬于哪種科目和種類?
- 回歸(學習預測連續(xù)值)
- 房屋的預售價格是多少?
- 明天舊金山是幾度?
無監(jiān)督學習
無監(jiān)督學習處理的是我們幾乎不太了解、或完全不知道輸出的問題。由于需要構建的模型無法使用到過往數(shù)據(jù)的標簽,因此它需要根據(jù)數(shù)據(jù)中變量之間的關系,對數(shù)據(jù)進行聚類以得出結(jié)構。
無監(jiān)督學習的兩種常見方法分別是:K-means聚類(請參見-- https://en.wikipedia.org/wiki/K-means_clustering)和DBSCAN(請參見-- https://en.wikipedia.org/wiki/DBSCAN)。
值得注意的是:Data Collector和Data Collector Edge中的TensorFlow Evaluator當前都僅支持監(jiān)督學習模型。
神經(jīng)網(wǎng)絡與深度學習
神經(jīng)網(wǎng)絡是機器學習算法的一種形式,它可以學習和使用某種受到人腦結(jié)構啟發(fā)而設計出的計算模型。與其他諸如決策樹、邏輯回歸等機器學習算法相比,神經(jīng)網(wǎng)絡具有很高的準確性。而深度學習是神經(jīng)網(wǎng)絡的子集,它允許網(wǎng)絡在嵌套的層次結(jié)構中,表示出各種各樣的概念。常見的神經(jīng)網(wǎng)絡和深度學習應用程序包括:
- 計算機視覺/圖像識別/物體檢測
- 語音識別/自然語言處理(NLP)
- 推薦系統(tǒng)(產(chǎn)品推介、婚介交友等)
- 異常檢測(網(wǎng)絡安全等)
TensorFlow
由Google Brain團隊創(chuàng)建的TensorFlow,是專為深度神經(jīng)網(wǎng)絡而設計的開源式機器學習框架。TensorFlow不但能夠在Windows和Mac OS上,也能夠在CPU、GPU和TPU上,支持可擴展、且可移植式的模型訓練。目前,它是GitHub上最受歡迎、且最活躍的機器學習項目之一。
Data Collector中的TensorFlow
通過TensorFlow Evaluator,您可以創(chuàng)建出承載數(shù)據(jù)/功能的管道,并在包含的環(huán)境中產(chǎn)生各種預測或分類。您無需通過初始化HTTP或REST API調(diào)用,便可訪問那些被公布為Web服務的機器學習模型。例如,數(shù)據(jù)在被存儲到最終目的地之前,往往會經(jīng)過若干個階段,而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機器學習的管道。例如,檢測高風險地區(qū)的洪水等自然災害發(fā)生的概率。
應用案例
讓我們來考慮一個如何將乳腺癌腫瘤分類為惡性或良性的用例。通過使用由scikit-learn模型(請參見--http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_breast_cancer.html)提供的乳腺癌經(jīng)典數(shù)據(jù)集,我使用Python構建列一個可用于訓練和導出的簡單TF模型。您可以通過鏈接—https://github.com/iamontheinet/datascience/blob/master/Breast_Cancer/breast_cancer_training.py,來查看我在GitHub上的代碼。作為一個最簡單的用例,我在模型的創(chuàng)建和訓練中,只用到了幾個隱藏層。不過,您可以留意其中的TensorFlow SavedModelBuilder(請參見--https://www.tensorflow.org/api_docs/python/tf/saved_model/builder/SavedModelBuilder)是如何使用支持的語言(如Python),以及諸如Jupiter Notebook(請參見--http://jupyter.org/)的交互式環(huán)境,來導出和保存模型的。
在TensorFlow SavedModelBuilder訓練并導出模型后,您只要將模型保存在Data Collector或Data Collector Edge可以訪問到的位置,就可以非常簡便地在數(shù)據(jù)流管道中進行預測或分類了。
管道概述
下圖展示了上述用例的管道細節(jié)。其中:
- 目錄來源(Directory Origin):
- 此處會從.csv文件中加載乳腺癌的數(shù)據(jù)記錄。注意:您可以將此處輸入的數(shù)據(jù)源輕松地替換為其他來源,包括:Kafka、AWS S3、MySQL等。
- 場轉(zhuǎn)換器(Field Converter):
- 該處理器將對所有帶有乳腺癌記錄特征的輸入,從字符串到浮點型在均值上進行各種轉(zhuǎn)換。
- 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中),并且據(jù)此分別創(chuàng)建一個具有“良性”或“惡性”特征“條件(Condition)”的新記錄字段。
- 流選擇器(Stream Selector):
- 通評估癌癥的狀況(良性或惡性),它將記錄發(fā)送給各個Kafka生產(chǎn)者(producer)。
- Kafka生產(chǎn)者(Kafka producer):
- 各種輸入記錄連同模型的輸出/分類值,會被有條件地路由到兩個Kafka生產(chǎn)者處,以進一步處理與分析。(請注意:此處的目標可以被輕松地替換為其他目標,包括:AWS S3、MySQL、以及NoSQL等)
值得注意的是:相對于TensorFlow Evaluator產(chǎn)生的模型輸出,該示例的管道階段其實是選配的。您可以根據(jù)用例的要求,與其他處理器和目標進行相互替換。
管道的執(zhí)行
在預覽(或執(zhí)行)管道時,那些輸入的乳腺癌記錄,會通過上述數(shù)據(jù)流的管道階段進行傳遞,并包含針對TensorFlow模型所提供的服務。發(fā)送給Kafka生產(chǎn)者的最終輸出記錄(如上圖所示),會包括用于分類乳腺癌的模型特征;在用戶定義的字段TF_Model_Classification中,輸出的模型值(0或1);以及由表達式評估器創(chuàng)建的字段條件,進而表示癌癥狀況是良性還是惡性。
總結(jié)
上面給大家簡單地介紹了由Data Collector 3.5.0新發(fā)布的TensorFlow Evaluator的用法。通過該evaluator,您可以提供出經(jīng)過訓練的TF模型,進而在無需額外編寫任何自定義代碼的情況下,生成各種預測和分類。
原標題:Real-Time Machine Learning With TensorFlow in Data Collector,作者: Dash Desai
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】