機器學習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)

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM