資料預處理

深度學習專案成敗, 資料預處理佔一部分

在模擬買賣房子時, 先做點房屋總價預測的故事裡, 我們虛構要用 [交易年月, 總面積, 主建物, 型態, 屋齡, 樓別/樓高, 建物格局, 管理組織] 來預測總價.

現在動點腦筋進行資料預處理, 這時候需要點 Python 以及 Numpy, Pandas 套件的基本知識. 對於安裝開發環境要求並特別要求, 最快的方式登入 Google 帳號使用 colab, colab 不只 Jupyter Notebook開發環境設定好, 還提供免費的 GPU 計算資源. 連接到 https://colab.research.google.com/ , 按 [新增筆記本] 即可開發測試 包含 Tensorflow 的應用,Numpy, Pandas 也都預安裝了.

我們一項一項來分析

  • [管理組織]: 就 <有/無> 兩個值, Python 可用 True/False 作為特徵值對應.

  • [建物格局]: 資料是以字串形式表達. 我們需要用程式拆解成 x 房, y 廳, z 衛, 其中 (x,y,z) 均為整數, 取得三個整數特徵

  • [樓別/樓高] 就需要動點腦筋進行資料預處理. 我們先假設:

    • 樓高因為樓層蓋的越高, 成本越高, 售價也因成長, 所以我們用整數值來當特徵

    • 樓別的數值高低似乎很難與售價直接關聯. 例如: 四樓可能比二, 三樓便宜. 而一樓店面又可能比五, 六樓貴. 所以我們與其把樓別當作整數處理, 倒不如把它多做 類別特徵 (Categorical Feature) 處理. 但這也是假想而已, 如果時間充裕, 應當改用整數值來做個比較.

類別型特徵與數值型特徵最大的差異是: 數值 1 與 5 有五倍的關係; 但是 (類別 1) 與 (類別 5) 應該無法用倍數來表達差異. 這時候我們可以考慮先one-hot encoding編碼. 不過當有太多類別時, 利用 one-hot 會將一個特徵變成多維, 例如: 以台灣為例 最高樓別 101 樓, 光是樓別單一個特徵就必須用 101 維來記錄. 這對模型訓練來說, 計算資源需求也相應大幅提升.

one-hot encoding 衍生模型輸入的維度大幅增加問題, 以自然語言相關問題 (自動翻譯, 問答, 語意分析等等) 為例, 就有 word-embedding 方法來處理, 這跟資料的型態有絕對的關係, 我們簡化問題就先不處理它.