close

 拿到資料的預處理是進行機器學習的第一步,因為在現實生活中取得的資料往往不完整,或是不符合機器學習的需求,所以我們必須先經過資料預處理來將資料「改造」成機器學習喜歡的樣子。本章節最後會提供一個data preprocessing的模板(both Python and R),以後每個章節一開始都用這個模板來預處理資料。

練習用的資料在 https://www.superdatascience.com/machine-learning/ 的Part 1。

Step 1: Import Library

簡單來說呢,機器學習非常複雜,我們不可能任何東西都自己手刻一份code出來,很多函式都可以直接用別人寫好的就行,所以我們常常會需要import library。這部分就先import一些會一直用到的library放在最上面這樣。

Python:

import numpy as np

import matplotlib.pyplot as plt

import pandas as pd

相信有用過Python的人多少用過或聽過numpy,它提供了非常多好用的數學函式,這裡也常常需要用到他。matplotlib.pyplot則是在資訊視覺化(visualization)時常用到,拿來畫圖表等等。而pandas可以說是資料處理分析的神器,很多步驟沒有他也都完成不了!

R語言這裡不用引入任何標頭檔。

 

Step 2: Missing Data

真實情況中拿到的資料庫不一定每一格資料都是完整的,可能會有空缺。為了處理這件事情,一個最簡單的想法是直接刪去不完整的該筆資料,但有可能那些筆資料含有重要資訊,因此這樣的做法基本上是不被接受的,常用的作法是將空缺的格子以整體該欄數據平均/中位數/眾數代替

Python: from sklearn.preprocessing import Imputer

 

Step 3: Categorical Data

有些資料是屬於「類別型」的(例如顧客的國籍、性別等等),機器學習不可能吃非數據型的資料,因此我們有時必須將類別型的資料轉換為數據型的資料。現在假設有A, B, C三個國家好了,一個最簡單的轉換方法就是分別將A, B, C用1, 2, 3替代,但這樣是不行的。這是因為1, 2, 3有大小關係,而三個國家之間應無大小關係,為了避免機器學習學到錯誤的資訊我們必須換一個轉換法。Dummy Variables是這個問題的解決方法,一樣使用三個國家當例子,這次使用三個欄位來進行encode,國家A在三個欄位分別對應到1, 0, 0,國家B則是對應到0, 1, 0,國家C對應到0, 0, 1。這樣就解決了大小關係的問題了!而在只有兩種類別的情況下則不需要使用Dummy Variables,只需要用0, 1進行轉換即可

Python: from sklearn.preprocessing import LabelEncoder, OneHotEncoder

 

Step 4: Splitting the dataset into training set and test set

這部分很簡單,就是把所有資料分成兩部分。一部分當作training set(讓機器學習),另一部分當作test set(檢測學習的成果)。 因為如果學習全部的話,可能會過度而不當的理解資料之間的關係,對於新進的資料的判斷可能會不精準,這稱為overfitting。一般來說隨機抽取20%~30%總資料量來當test set,剩下的當作training set。

Python: from sklearn.cross_validation import train_test_split

R: install.packages('caTools')

library(caTools)←the purpose of this line is to activate it (or one can also simply check the box in the packages tab) 

 

Step 5: Feature Scaling

這部分簡單來說就是要讓所有數據的「尺度」是一樣的,因為機器學習過程中很多時候會用到數據點與數據點之間的歐氏距離來當作計算或判斷的依據,現在假設有一些顧客資料包含年齡與薪資,年齡的範圍為0~100而薪資的範圍則是0~1000000,因此薪資差別的影響可能完全蓋過年齡差別的影響,故我們需要將兩個變數的尺度變得相同。另一個原因是做feature scaling有助於讓機器學習的運算時間大幅縮短。有以下兩種method:

1. Standardization:  x_stand = (x-mean(x))/sd(x) ,其中mean(x)指的是平均而sd(x)則是標準差

2. Normalization: x_norm = (x-min(x))/(max(x)-min(x)),其中max(x)指的是最大值而min(x)則是最小值

Python: from sklearn.preprocessing import StandardScaler

那先前提過的Dummy Variables需要標準化嗎?答案是it depends。各有其好處,如果標準化的話,所有東西都在同一個scale上本來就比較好;但是不標準化的話保持0/1的狀態更能看出其意義(ex代表的國家)

​​​​​​​

 

arrow
arrow
    文章標籤
    data preprocessing
    全站熱搜

    李晴 發表在 痞客邦 留言(0) 人氣()