在資料採集器中用TensorFlow進行實時機器學習
最新DataOps平臺的真正價值,只有在業務使用者和應用程式能夠從各種資料來源來訪問原始資料和聚合資料,並且及時地產生資料驅動的認識時,才能夠實現。利用機器學習(Machine Learning),分析師和資料科學家可以利用歷史資料,以及實時地使用類似TensorFlow(TF)這樣的技術,以做出更好的資料驅動業務的線下決策。
在本文中,你將學習如何利用TensorFlow模型在StreamSets Data Collector3.5.0和StreamSets Data Collector Edge中最新發布的TensorFlow Evaluator*進行預測和分類。
在深入討論細節之前,我們來看一些基本概念。
機器學習(Machine Learning)
亞瑟·塞繆爾把它描述為:“不需要明確地編寫程式而使計算機有能力學習的研究領域。”隨著機器學習領域的最新發展,計算機現在有能力做出預測,甚至比人類做的還要好,並且感覺可以解決任何問題。讓我們先回顧一下機器學習都解決了什麼樣的問題吧。
通常來說,機器學習被分為兩大類:
監督學習(Supervised Learning)
“監督學習是學習一個函式的機器學習任務,該函式基於輸入-輸出的例項,將輸入對映到輸出。”—維基百科(Wikipedia)。
它涉及到構建一個精準的模型,當歷史資料被標記為一些結果的時候,模型就可以預測出結果了。
用監督學習解決的常見業務問題:
- 二元分類(學習預測一個分類值)
- 顧客會購買一個特定產品嗎?
- 癌症是惡性的還是良性的? - 多級分類(學習預測一個分類值)
- 給定的一段文字是否帶有病毒、恐嚇或淫穢內容?
- 這是山鳶尾、藍旗鳶尾還是北美鳶尾的物種? - 迴歸(學習預測一個連續值)
- 一個代售房子的預測價格是多少?
- 明天舊金山的氣溫是多少?
無監督學習
無監督學習允許我們在知道很少,或是完全不知道輸出應該是什麼樣子的情況下處理問題。它涉及在之前資料上的標籤是不可用的情況下建立模型。在這類的問題中,通過對基於資料中變數之間的關係進行資料聚類來匯出結構。
無監督學習的兩種常見方法是K-
注意:Data Collector和Data Collector Edge中的TensorFlow Evaluator目前僅支援監督學習模型。
神經網路與深度學習
神經網路是機器學習演算法的一種,可以學習和使用受人腦結構啟發而來的計算模型。與其它機器學習演算法,如決策樹、邏輯迴歸等相比,神經網路具有較高的準確性。
Andrew Ng在傳統人工神經網路的背景下對深度學習進行了描述。在題為“深度學習、自我學習與無監督特徵學習”的演講中,他把深度學習的思想描述為:
“利用了大腦結構的模仿, 希望:
- 讓學習演算法更好地、更容易地使用;
- 在機器學習和人工智慧領域取得革命性的進展;
我相信這是我們朝著真正的人工智慧前進的最好辦法。”
常見的神經網路和深度學習應用包括:
- 計算機視覺/影象識別/目標檢測
- 語言識別/自然語言處理(NLP)
- 推薦系統(產品、婚介等)
- 異常檢測(網路安全等)
TensorFlow
TensorFlow是為深度神經網路設計的開源機器學習框架,由Google Brain Team開發的。TensorFlow支援在Windows和Mac作業系統上的可伸縮和行動式的訓練,包括CPU、GPU和TPU。迄今為止,它是GitHub上最流行的和最活躍的機器學習專案。
Data Collector中的TensorFlow
隨著TensorFlow Evaluator的引入,你現在能夠建立管道(pipelines),以獲取資料或特徵,並在一個可控的環境中生成預測結果或分類,而不必發起對作為Web服務而提供和公佈的機器學習模型的HTTP或REST API的呼叫。例如,Data Collector管道現在可以實時地檢測欺詐交易或在文字上執行自然語言處理,因為資料在被儲存到最終目的地之前,為了進一步的處理或做決策,正在經過各個階段。
另外,使用Data Collector Edge,你可以在Raspberry Pi和其它執行在所支援的平臺上的裝置上執行已經啟用了的TensorFlow機器學習管道。例如,在高風險地區檢測洪水等自然災害發生的概率,以防止對人們財產的破壞。
乳腺癌分類
讓我們考慮將乳腺癌腫瘤分類成惡性還是良性的例子。乳腺癌是一個經典的資料集,可以作為scikit-learn的一部分。要了解如何在Python中使用該資料集訓練和匯出一個簡單的TensorFlow模型,請檢視我在GitHub上的程式碼。正如你將要看到的那樣,模型建立和訓練被保持在最小範圍,並且非常簡單,只有幾個隱藏層。最需要注意的重要方面是如何使用TensorFlow SavedModelBuilder*來匯出和儲存模型。
*注意:要在Data Collector或Data Collector Edge中使用TensorFlow模型,首先應該在你選擇支援的開發語言裡,如Python,和互動式環境中,如Jupiter Notebook,使用TensorFlow的SavedModelBuilder匯出和儲存模型。
一旦使用TensorFlow的SavedModelBuilder訓練並匯出了模型,那麼在資料流管道中使用它進行預測或分類就非常簡單了 — 只要模型儲存在Data Collector或Data Collector Edge可訪問的位置上即可。
管道概述
在深入瞭解細節之前,可以看下管道是什麼樣的:
管道細節
- 目錄源:
- 這將從.csv檔案中載入乳腺癌的記錄資料(注意:這個輸入資料來源可以非常簡單地替換為其它的來源,包括Kafka、AWS S3、MySQL等等); - 欄位轉換器:
- 這個處理器將轉換供模型所使用的所有輸入的乳腺癌記錄特徵資料,從String型別轉換到Float型別(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_error,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*:
- 模型的儲存路徑:指定要使用的預訓練的TensorFlow模型的位置;
- 模型標籤:設定為“serve”,因為元圖(在我們匯出的模型中)要用於服務中。有關詳細資訊,請參見tag_constants.py和相關的TensorFlow API documentation;
- 輸入配置:指定在訓練和匯出模型期間配置的輸入張量資訊(請見Train model and save/export it using TensorFlow SavedModelBuilder部分);
- 輸出配置:指定在訓練和匯出模型期間配置的輸出張量資訊(請見Train model and save/export it using TensorFlow SavedModelBuilder部分);
- 輸出欄位:我們想儲存分類值的輸出記錄欄位; - Expression Evaluator:
-該處理器評估模型輸出或分類值為0或1(儲存在輸出的欄位TF_Model_Classification之中) ,並用Benign或Malignantrespectively這兩個值建立一個新的記錄欄位“Condition”; - Stream Selector:
- 該處理器評估癌症狀況(良性或惡性)併發送記錄到各自的Kafka生產者; - Kafka Producers:
- 輸入記錄以及模型的輸出或者分類值被有條件地傳送給兩個Kafka生產者以獲得進一步地處理和分析;
*TensorFlow Evaluator配置
注意:一旦TensorFlow Evaluator產生了模型輸出結果,本例項中採用的管道階段是可選的,並且可以根據用例的需要與其它處理器和目標進行互換。
管道執行
在預覽管道上,乳腺癌資料記錄的輸入通過了上面所述的資料流管道過程,包括服務於我們的TensorFlow模型。傳送給Kafka生產者的最終輸出記錄資料(如上所示)包括用於分類的模型所使用的乳腺癌特徵,在使用者定義的欄位TF_Model_Classification中模型輸出值為0或1,以及由Expression Evaluator建立的Condition欄位中表示相應的癌症狀況是良性或惡性。
總結
本文說明了在Data Collector 3.5.0中使用最新發布的TensorFlow Evaluator。一般來說,這個評估器將允許你提供預訓練的TensorFlow模型,用於生成預測結果和分類結果,而無需編寫任何自己的程式碼。
本文由北郵@愛可可-愛生活 老師推薦,阿里云云棲社群組織翻譯。
文章原標題《Real-Time Machine Learning With TensorFlow in Data Collector》
譯者:Mags,審校:袁虎。
文章為簡譯,更為詳細的內容,請檢視原文