機器學習A-Z_Part 1 數據預處理

當我們蒐集到一組數據後,我們必須先針對數據內容作預先的處理,目的是讓電腦能正確的讀取數據並使用。

數據預處理第一步:將數據轉存為csv

csv檔案這是一種通用且簡單的格式,能讓各種軟體間無阻礙的傳輸資料。

因此常用的做法是先把蒐集到的數據轉成csv檔案,在python中即可快速的導入數據。

數據預處理第二步:導入標準庫

python及R語言內建許多標準函式庫,為了減輕程式編寫軟體的運行,大部份的函式庫都是尚未啟用的,因此需要導入各式各樣的標準庫。

首先會用到的是下列幾項,說明如後方註解

import numpy as np                  #多維數列與矩陣運算用,最常搭配matplotlib使用
import matplotlib.pyplot as plt     #視覺化套件,只有一張圖的話使用全域 pyplot 很方便 
import pandas as pd                 #數據分析用
import os                           #預設工作路徑,避免每次重新開啟檔案就要手動設置路徑

數據預處理第三步:導入數據集

首先先設置工作路徑,方便導入已蒐集的數據

方法1:可以以手動方式點選spyder程式介面右上角設定資料所在文件夾

方法2:直接於程式碼中寫入

os.chdir("D:你的資料文件夾位置")

設置完工作路徑後,要導入我們的資料,因此打上以下程式碼

dataset = pd.read_csv('dataname.csv')

導入的數據名稱隨後會變成dataset,之後於程式中處理皆會以dataset的方式處理而導入的檔案名稱在這邊則為dataname.csv

接著我們要選擇那些數據要留著,那些不需要,在做機器學習時,我們會將數據做各種的統計分析,但並非所有的數據都適合,或是能合理的分析數據,為了減少不必要的時間浪費,我們會把完全無關或者說我們不感興趣的數據刪除,僅留下我們要分析的數據資料。

以右邊的數據為例,我們想要預測的結果為年齡與收入影響購買意願的關係,因此不需要用到國家的數據,我們用以下的程式,X只取第1跟2列的數據當作自變數。

Y則取第3列為應變數。

X = dataset.iloc[:, [1,2]].values   
Y = dataset.iloc[:, 3].values

數據預處理第三之一步:導入數據後處理遺失數據

此步驟為處理資料中的遺失數據,通常是資料缺失,或是未能蒐集到完整數據時,可以於python中做處理。

處理方式以這邊的例子為,使用各組數據的平均數。程式碼如下

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values =np.nan, strategy= 'mean')
imputer.fit(X[:, 0:1])
X[:, 1:2] = imputer.transform(X[:, 0:1])

數據預處理第四步:分類數據

當數據為字串形式時,如國家、性別、各種屬性等等的,需要轉成數字形式表示。

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values =np.nan, strategy= 'mean')
#以平均數代替遺失數據

imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])

數據預處理第五步:將數據分成訓練集跟測試集

將整理好的數據,分為訓練集以及測試集,如果數據量夠大,通常會分成8成的訓練集,2成測試集,以確保足夠的訓練數量,如果數據過少,可適度提高訓練集數據數量。程式如下:

from sklearn.model_selection import train_test_split  #自動將變數分為訓練集及測試集
X_train, X_test, Y_train, Y_test = train_test_split(X,Y, test_size = 0.2)

數據預處理第六步:特徵標準化

每個自變量有各自的數據特徵,如果其中一個變量特徵特別明顯,就會嚴重影響到分析的結果,因此需要將所有變量標準化。(並非每次的數據都需要特徵標準化,還是得依照我們所要解決的問題來更換成最適合的方法。)

from sklearn.model_selection import train_test_split  #自動將變數分為訓練集及測試集
X_train, X_test, Y_train, Y_test = train_test_split(X,Y, test_size = 0.2)

以上六步驟將視數據以及欲預測目標做調整,並不一定要遵照此規則。

發表留言