iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 18
0

前處理和特徵建構

主旨:了解前處理和特徵建構的做法

前處理和特徵建構

在訓練ML模型前,最重要的事就是前處理和特徵建構,特徵建構是在現有的特徵上,轉變萃取出更有用的資訊,例如下面圖示:

而在前處理常需要做的事包括有:

  • 剔除掉不想用來訓練的資料
  • 對種類資料計算字彙(Vocabulary)
  • 對數值資料計算統計數值
  • 計算 time-window 的統計數值作為輸入特徵
  • 對數值資料做縮放、離散化等等
  • 對文字資料做分割、小寫等等
  • 調整輸入影像的大小
  • 歸一化輸入音訊聲音的大小

Apache Beam 和 Cloud Dataflow

在這裡我們要開始介紹前處理和特徵建構時使用的工具:Apache Beam 和 Cloud Dataflow。

介紹 Cloud Dataflow 之前,我們要先講講什麼是數據管道 (data pipeline),所謂的數據管道是將資料經由一連串的轉化、變形後變成另一種資料,而 Cloud Dataflow 是一個平台可以運行這類型的資料處理管道,讓資料變形。

Dataflow 是使用開源的函式庫 Apache Beam,所以在建構資料處理管道的時候,你可以使用 Apache Beam APIs,這也讓你在撰寫資料管道的時候更直覺,因為它設計的方式就和一般人認為資料處理管道的方式類似。

另一個使用 Apache Beam 的優點是其支持使用相同的管道程式碼來做批次和串流資料處理,這也是 Beam 這個字的由來 Batch+Stream,所以當你處理批次或串流資料時,可以使用相同的管道處理邏輯,只需要改變輸入和輸出的資料就可以了

Apache Beam 有許多不同種類的連接器 (connetors),可以幫助結合不同的服務,也因為它是開源的,若你想要也可以自己設計一個連接器,下面是一個資料管道的例子,其中包含了許多變形的步驟,每個變形作用在一種資料結構稱為 PCollection,每個變形會以一個 PCollection 作為輸入,並輸出另一個 PCollection,而最後一個變形將會走到 sink

所以該如何實作這些管道呢?下面是一個例子, beam.pipeline 創造了一個 pipeline instance,當其被宣告後,每個變形會以一個管道應用方式的參數所實現,此外,每個 pipeline operator 並不會運行管道,而當你需要運行資料處理的時候,就使用 run()

連接器有許多種類,如 Cloud storage、pub/sub、BigQuery 等等,下圖是其中幾個例子:

最後是運行資料管道的方式,下面包含了本機端的方式,還有傳送job 至 GCP Dataflow 的方式。

[GCP Lab實作-12]:簡單的 Dataflow pipeline

這個實作中,我們將學會:

  • 使用 Python 撰寫一個簡單的 pipeline
  • 在本機執行 Dataflow pipeline
  • 在 GCP 執行 Dataflow pipeline

[Part 1]:開啟 Dataflow 專案

  1. 登入GCP,打開 Cloud Shell。

  1. 複製 repo,移至資料夾,安裝 Python dataflow 需要的套件。
git clone https://github.com/GoogleCloudPlatform/training-data-analyst

cd training-data-analyst/courses/data_analysis/lab2/python

sudo ./install_packages.sh
  1. 確認 pip 版本 ( > 8.0):
pip -V
  1. 打開 code editor,用來檢視 pipeline 的程式碼。

  1. 點進 /training-data-analyst/courses/data_analysis/lab2/python,打開 grep.py,裡面程式碼是要抓出 .java 檔案中,含有 "import" 字串的行。

  1. 執行 grep.py 後,看看抓出來的資訊是什麼。
python grep.py

cat /tmp/output-*

  1. 接著我們在 GCP 上執行 pipeline,在執行之前先在 GCP 上創建 bucket 存放檔案,如果忘記創建的步驟可以參考 Day5 的文章

  2. 複製 Java 檔案到雲端 (<YOUR-BUCKET-NAME> 填入 bucket 的名字):

gsutil cp ../javahelp/src/main/java/com/google/cloud/training/dataanalyst/javahelp/*.java gs://<YOUR-BUCKET-NAME>/javahelp
  1. 從 code editor 修改 grepc.py 裡面的 PROJECT 和 BUCKET:

  1. 執行 grepc.py 將 pipeline job 送到雲端:
python grepc.py
  1. 在 GCP 上,選 Dataflow 來看我們送到雲端的 job 狀態,可以看到 job 的名字是 examplejob2,和 grepc.py 設定的 job_name 一樣。

https://ithelp.ithome.com.tw/upload/images/20190919/20120208PI8o1Z9UR9.png

  1. 點進 job 後,可以看到詳細的資訊。

  1. 完成後,可以看到 job status 變成 Succeeded。

  1. 最後回到 Cloud Shell 來看一下,雲端上執行的 Dataflow pipeline 結果如何:
gsutil cat gs://<YOUR-BUCKET-NAME>/javahelp/output-*


今天介紹了Cloud Dataflow,明天我們將講到 “規模化Data Pipeline”。


上一篇
鐵人賽Day17 - Feature Engineering (1/6)
下一篇
鐵人賽Day19 - Feature Engineering (3/6)
系列文
Machine Learning with TensorFlow on Google Cloud Platform30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言