常見的資料前處理
缺失值處理
- 丟棄
當資料有缺失時,必須把缺失的部分資料丟棄,這樣才不會影響Model的訓練,但前提是資料量要夠大
2. 補值
如果資料量不夠大,丟棄收集來的資料這會比較可惜,所以可以採用補值的方式。常見補值方式有補固定值、平均值、眾數、中位數。較進階的補值方法有最近差補法(在資料 中找與缺失樣本最接近的樣本來補足缺失的特徵)回歸方法(對帶有缺失的特徵根據其他的特 徵屬性來建立回歸模型補值),或是用插值法(拉格朗日插值法)
類別資料的處理
由於要在空間中表示點,所有的特徵都需要是數值,因此如果是類別的資料,像是XL,L,M,S,XS或是資 料類別為Male, Female, Not Specified,就需要轉成數值才能在空間中來表示。類別資料可分區為有序跟無序:
- 有序
類別屬性有大小順序之分,譬如: XL, L, M, S, XS,這就可以使用數值來表示
2. 無序
如果是Male, Female, Not Specified因為這三種都是等價的關係因此需要找一個方法讓這三個屬性距離原點是相同距離
解決無序的方法:
(一)One-hot encoding 單熱編碼
為每個類別新增一個欄位,用 0/1 表示是否
下面使用程式碼來說明:
tf.keras.utils.to_categorical(y, num_classes=None)
我這邊是使用tensorflow的keras裡面的一個叫做to_catgorical函式,此函式的用意是將一個類向量的(整數)轉換成二進位的類矩陣
(二)Label encoding
把每個類別 mapping 到某個整數,不會增加新欄位
大部分的模型都是基於數學運算,字串無法套入數學模型進行運算,在此先對其進行Label encoding編碼,下面用程式碼說明
資料特徵的縮放
特徵縮放是資料前處理的一個很重要的關鍵,只少有部分的Model不需要做特徵縮放,像是決策樹(decision tree)以及 隨機森林(Random Forests)。需要特徵縮放主要是因為Model背後是用空間中的距離來做區分,假設某一個特徵過大,該 Model的成本函數會被這個特徵所支配,方法如下:
1. Normalization(歸一化,常態化,區間縮放)
最常見的Normalization為0–1區間縮放,經過Normalization之後資料的範圍會介在0~1之間,原本的最大值 變為1,最小值變為0
2. Standardization(標準化)
經過Standardization資料的平均值會變為0, 標準差變為1
下面用程式碼說明:
下面是使用numpy的reshape(陣列重塑)
Domain Knowledge
We can use the same definition in data science to say — “Domain knowledge is the knowledge about the environment in which the data is processed to reveal secrets of the data”.
我們閱讀了一些data science和學習機器學習,使用了一些演算法像是回歸(regression),分類(classification)來預測測試資料,而當我們具備了一些Domain Knowledge,透過產業知識結合訓練出來的結果去做預測,這些演算法和資料才是真正對我們產生幫助,
參考資料:
- https://medium.com/jameslearningnote/%E8%B3%87%E6%96%99%E5%88%86%E6%9E%90-%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-%E7%AC%AC2-4%E8%AC%9B-%E8%B3%87%E6%96%99%E5%89%8D%E8%99%95%E7%90%86-missing-data-one-hot-encoding-feature-scaling-3b70a7839b4a
- https://towardsdatascience.com/data-preprocessing-concepts-fa946d11c825
- https://medium.com/better-programming/data-preprocessing-for-machine-learning-3822ace03ae6
- https://towardsdatascience.com/image-pre-processing-c1aec0be3edf
- https://medium.com/@anand0427/why-domain-knowledge-is-important-in-data-science-anand0427-3002c659c0a5