1. 程式人生 > >ML Day1資料預處理

ML Day1資料預處理

機器學習100天,每天進步一點點。跟著GitHub開始學習!

英文專案地址https://github.com/Avik-Jain/100-Days-Of-ML-Code

中文專案地址https://github.com/MLEveryday/100-Days-Of-ML-Code

1 匯入相應的庫

import numpy as np  #包含數學計算函式
import pandas as pd  #用於匯入和管理資料集

2 匯入資料集

dataset = pd.read_csv('../datasets/Data.csv')
X = dataset.iloc[ : , :-1].values  #iloc是取矩陣的某行某列,第一個冒號是所有行,第二個是除了最後一列的所有列
Y = dataset.iloc[ : , 3].values  #取所有行,最後一列為依賴變數

3 處理丟失資料

對缺失值進行處理的一般思路是使用這一列資料的“平均數”,“中位數”或“眾數”來填充。

missing_values:遺失部分的資料用NaN的方式填補;

strategy:可選擇mean,median,most_frequent,分別代表平均數 中間值 最常出現的數值;

axis:傳0或者1,0代表處理列 ,1代表處理行。

from sklearn.preprocessing import Imputer  #Imputer類對缺失資料進行處理
imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)  #用特徵列的均值替換缺失值
imputer = imputer.fit(X[ : , 1:3])  #用資料擬合X的前兩列
X[ : , 1:3] = imputer.transform(X[ : , 1:3])

4 解析分類資料

像Country和Purchased這兩列資料,其實質是分類,而不是數值大小,使用虛擬編碼對其進行處理。

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()  #LabelEncoder可將標籤分配一個0——n_class-1之間的編碼
X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])  #擬合與轉化所有行第0列
#Creating a dummy variable
onehotencoder = OneHotEncoder(categorical_features = [0])  #第0列進行獨熱編碼
X = onehotencoder.fit_transform(X).toarray()  #不加toarray()的話,輸出稀疏的儲存格式
labelencoder_Y = LabelEncoder()
Y =  labelencoder_Y.fit_transform(Y)

5 拆分資料集為訓練集和測試集

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, random_state = 0)  #訓練集與測試集的比例一般為4:1

6 特徵縮放

為了防止數值較大的自變數對數值較小的自變數的影響,或是為了在演算法中使得收斂速度更快進行特徵縮放。特徵縮放有兩種方法(標準化和正常化):

from sklearn.preprocessing import StandardScaler 
sc_X = StandardScaler()  #針對某一特徵維度進行標準化,經處理後的資料符合標準正態分佈,均值為0,標準差為1
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)