在資料採集器中用TensorFlow進行實時機器學習
最新 DataOps 平臺的真正價值,只有在業務使用者和應用程式能夠從各種資料來源來訪問原始資料和聚合資料,並且及時地產生資料驅動的認識時,才能夠實現。利用機器學習( Machine Learning ),分析師和資料科學家可以利用歷史資料,以及實時地使用類似 TensorFlow(TF) 這樣的技術,以做出更好的資料驅動業務的線下決策。
在本文中,你將學習如何利用 TensorFlow 模型在 ofollow,noindex"> StreamSets Data Collector 3.5.0 和 StreamSets Data Collector Edge 中最新發布的 TensorFlow Evaluator * 進行預測和分類。
在深入討論細節之前,我們來看一些基本概念。
機器學習(Machine Learning)
亞瑟 · 塞繆爾把它描述為: “ 不需要明確地編寫程式而使計算機有能力學習的研究領域。 ” 隨著機器學習領域的最新發展,計算機現在有能力做出預測,甚至比人類做的還要好,並且感覺可以解決任何問題。讓我們先回顧一下機器學習都解決了什麼樣的問題吧。
通常來說,機器學習被分為兩大類:
監督學習(Supervised Learning)
“ 監督學習是學習一個函式的機器學習任務,該函式基於輸入 - 輸出的例項,將輸入對映到輸出。 ”— 維基百科( Wikipedia )。
它涉及到構建一個精準的模型,當歷史資料被標記為一些結果的時候,模型就可以預測出結果了。
用監督學習解決的常見業務問題:
- 二元分類(學習預測一個分類值) - 顧客會購買一個特定產品嗎? - 癌症是惡性的還是良性的?
- 多級分類(學習預測一個分類值
)
-
給定的一段文字是否帶有病毒、恐嚇或淫穢內容? - 這是山鳶尾、藍旗鳶尾還是北美鳶尾的物種? - 迴歸(學習預測一個連續值
)
-
一個代售 房子的預測價格是多少? - 明天舊金山的氣溫是多少?
無監督學習
無監督學習 允許我們在知道很少,或是完全不知道輸出應該是什麼樣子的情況下處理問題。它涉及在之前資料上的標籤是不可用的情況下建立模型。在這類的問題中,通過對基於資料中變數之間的關係進行資料聚類來匯出結構。
無監督學習的兩種常見方法是 K- 均值聚類( K-means_clustering" target="_blank" rel="nofollow,noindex"> K-means clustering )和 DBSCAN 。
注意: 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.org/stable/modules/generated/sklearn.datasets.load_breast_cancer.html" target="_blank" rel="nofollow,noindex"> 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 、 SQL/">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 或 Malignant respectively 這兩個值建立一個新的記錄欄位 “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 ,審校:袁虎。
文章為簡譯,更為詳細的內容,請檢視 原文