1. 程式人生 > >機器學習100天——資料預處理(第一天)

機器學習100天——資料預處理(第一天)

有個叫Avik Jain的老外在github上發起了一個100天學習機器學習的專案,每天花一個小時學習機器學習,學習內容由淺入深。今天是第一天,內容是如何進行資料預處理。該教程的程式語言是Python。 資料預處理分為6步: 第一步:匯入NumPy和Pandas庫。NumPy和Pandas是每次都要匯入的庫,其中Numpy包含了數學計算函式,Pnadas是一個用於匯入和管理資料集(Data Sets)的類庫。 第二步:匯入資料集。資料集一般都是.csv格式,csv檔案以文字形式儲存資料。每一行資料是一條記錄。我們使用pandas類庫的read_csv方法讀取本地的csv檔案作為一個dataframe。然後從datafram中分別建立自變數和因變數的矩陣和向量。 第三步:處理缺失的資料。我們得到的資料很少是完整的。資料可能因為各種原因丟失,為了不降低機器學習模型的效能,需要處理資料。我們可以用整列的平均值或者中間值替換丟失的資料。我們用sklearn.preprocessing庫中的Inputer類完成這項任務。 第四步:對分類資料進行編碼。分類資料指的是含有標籤值而不是數字值得變數。取值範圍通常是固定的。例如“YES”和“NO”不能用於模型的數學計算,所以需要編碼成數字。為數顯這一功能,我們從sklearn.preprocessing庫中匯入LabelEncoder類。 第五步:拆分資料集為測試集合和訓練集合。把資料集拆分成兩個,一個是用來訓練模型的訓練集合,另一個是用來驗證模型的測試集合。兩種比例一般是80:20。我們匯入sklearn.crossvalidation庫中的train_test_split()方法。 第六步:特徵縮放。大部分模型演算法使用兩點間的歐式近距離表示,但此特徵在幅度、單位和範圍姿態問題上變化很大。在距離計算中,高幅度的特徵比低幅度特徵權重大。可用特徵標準化或Z值歸一化解決。匯入sklearn.preprocessing庫的StandardScalar類。

程式碼如下:

 1 1: 匯入類庫
 2 
 3 import numpy as np
 4 import pandas as pd
 5 
 6 2: 匯入資料集
 7 dataset = pd.read_csv('Data.csv')
 8 X = dataset.iloc[ : , :-1].values
 9 Y = dataset.iloc[ : , 3].values
10 
11 3: 處理缺失的資料
12 from sklearn.preprocessing import Imputer
13 imputer = Imputer(missing_values = "
NaN", strategy = "mean", axis = 0) 14 imputer = imputer.fit(X[ : , 1:3]) 15 X[ : , 1:3] = imputer.transform(X[ : , 1:3]) 16 17 Step 4:編碼分類資料 18 from sklearn.preprocessing import LabelEncoder, OneHotEncoder 19 labelencoder_X = LabelEncoder() 20 X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])
21 Creating a dummy variable 22 23 onehotencoder = OneHotEncoder(categorical_features = [0]) 24 X = onehotencoder.fit_transform(X).toarray() 25 labelencoder_Y = LabelEncoder() 26 Y = labelencoder_Y.fit_transform(Y) 27 28 Step 5: 切分資料整合訓練資料和測試資料 29 from sklearn.cross_validation import train_test_split
30 X_train, X_test, Y_train, Y_test = train_test_split( X , Y , test_size = 0.2, random_state = 0) 31 32 Step 6: 特徵縮放 33 from sklearn.preprocessing import StandardScaler 34 sc_X = StandardScaler() 35 X_train = sc_X.fit_transform(X_train) 36 X_test = sc_X.fit_transform(X_test)

本教程的測試資料請關注本人的公眾號獲取: