iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 24
0

Feature Enginnering

TF Transform

為什麼要做轉換呢???

我想大家對於轉換數值或是改變型態都會有所疑問,首先講一個很簡單的觀念
今天在現實生活中有星期一到星期天,但電腦裡並沒有,難道你希望他周休二日嗎??
所以淺而易見的電腦並不知道有關於字串的訊息,所以你必須去將它轉換成數字格式
另外有些人又會納悶我都已經是數字那為什麼還要轉換成0~1的區間
這個道理很簡單我們都知道電腦做運算就是利用加減乘除的方式
今天希望它算1~100的所有數值相乘然後相加,你覺得先除上100在做運算跟直接做運算哪個比較快?
電腦做運算都是使用0、1來當標準,跟人類一樣當然要用熟悉的語言才會做得快啊
這就是為什麼我們即便是數值了,還要做轉換的原因

Exploring tf.transform

這次實驗室要使用TensorFlow內部的transform,來實作出特徵預處理、創造特徵等功能,並且有效率的處理大規模的串流數據,跟昨天一樣先創建bucket、notebooks接著切換至training-data-analyst> courses> machine_learning> deepdive> 04_features>taxifeateng 打開 tftransform.ipynb,開始進行實驗。

  1. 首先第一步當然是要安裝相關的套件,接著重新啟動kernel,並且輸入pip freezeflow\|beam中做比較,基本上兩邊要一樣,才不會有問題。

  2. 接著就設定相關位置與資訊,進行環境的建置。

import os
PROJECT = 'xxx' #改成自己的資訊
BUCKET = 'xxx' 
REGION = 'xxx' 
import os
os.environ['BUCKET'] = BUCKET
os.environ['PROJECT'] = PROJECT
os.environ['REGION'] = REGION
%%bash
gcloud config set project $PROJECT
gcloud config set compute/region $REGION
  1. 下一步驟當然是要抓取資料,這邊是到bigquery進行蒐集,基本上跟之前一樣都是使用出租車的數據集

    • 經過相關的篩選條件後,將資料依照訓練or驗證分開來。
    • 資料拿到後我們可以利用head()describe()來查看資料的分布與數量是否正確
      https://ithelp.ithome.com.tw/upload/images/20190924/20120289vKFBvEx5nz.png
  2. 接下來也就是實做tf.transform的功能

    • 首先第一步就是要將tensorflow-transform寫入requirements.txt中確保在dataflow裡都是一樣的版本
    %%writefile requirements.txt
    tensorflow-transform==0.8.0
    
    • 接著就要創建一個函數來確認從串流資料集中只返回在我們所要求的範圍內資料
    return (fare_amount >= 2.5 and pickup_longitude > -78 and pickup_longitude < -70 \ and dropoff_longitude > -78 and dropoff_longitude < -70 and pickup_latitude > 37 \ and pickup_latitude < 45 and dropoff_latitude > 37 and dropoff_latitude < 45 \ and passenger_count > 0)
    
    • 呼叫tft套件來進行資料的轉換
    tft.string_to_int # 字串轉換成數字
    tft.scale_to_0_1 # 縮放置0~1
    tf.cast # 更該資料型態
    
    • 依照輸入格式創造metadata後,開始建造Beam的架構
    raw_data_schema = 
        {
        colname : dataset_schema.ColumnSchema(tf.string, [],dataset_schema.FixedColumnRepresentation())
        for colname in 'dayofweek,key'.split(',')
        }
    
     raw_data_schema.update({
         colname : dataset_schema.ColumnSchema(tf.float32, [], dataset_schema.FixedColumnRepresentation())
        for colname in 'float 參數'.split(',')
        })
      raw_data_schema.update({
          colname : dataset_schema.ColumnSchema(tf.int64, [], dataset_schema.FixedColumnRepresentation())
          for colname in 'int 參數'.split(',')
        })
    
    • 接著進行讀取、過濾、分析與轉換、輸出的動作在train和test的資料集中
      https://ithelp.ithome.com.tw/upload/images/20190925/20120289XvsSGPclB7.png
  3. 最後將其檔案進行訓練

    • 完成後會再輸出資料夾中看到其模型
    • 將我們自製的json格式檔案寫入test.json內
    • 進行預測並輸出其結果

最後這邊在訓練的過程中有發生一點問題,所以就沒放上圖片,但基本上概念都跟我們之前講的利用雲端跟本地端的方法預測結果一樣,若有實驗成功的朋友也歡迎跟我分享。

今天是國慶日先祝台灣生日快樂、世界和平/images/emoticon/emoticon53.gif


上一篇
Day 23 Feature Crosses part 2 (特徵組合 on GCP)
下一篇
Day 25 The Art of ML and Hyperparameter Tuning(調整ML模型參數)
系列文
ML Study Jam -機器學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言