作者:Afroz Chakure
翻譯:瘋狂的技術宅
未經允許嚴禁轉載
機器學習的核心是處理資料。你的機器學習工具應該與資料的品質一樣好。本文涉及清理資料的各個步驟。你的資料需要經過幾個步驟才能用于預測。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICN5MTPoZyMxcTP39jbMFVdiZlYvw1Ztl2Lc12bj5CdsVXYmRnbl12ZlN3Lc9CX6MHc0RHaiojIsJye.jpg)
資料預處理涉及的步驟:
導入所需的庫
導入資料集
處理缺失的資料。
編碼分類資料。
将資料集拆分為測試集和訓練集。
特征縮放。
那麼讓我們逐一學習這些步驟。
步驟1:導入所需的庫
你先需要下載下傳此資料集:Data.csv
每次我們制作新模型時,都會要求導入 Numpy 和 Pandas。 Numpy 是一個包含數學函數的庫,用于科學計算,而 Pandas 用于導入和管理資料集。
import pandas as pd
import numpy as np
在這裡我們導入 pandas 和 Numpy 庫并分别命名名 “pd” 和 “np”。
第2步:導入資料集
資料集以 .csv 格式提供。 CSV 檔案以純文字格式存儲表格資料。該檔案的每一行都是一個資料記錄。我們使用 pandas 庫的 read_csv 方法将本地 CSV 檔案讀取為資料幀(dataframe)。
dataset = pd.read_csv('Data.csv')
在仔細檢查資料集之後,我們将在資料集(X)中建立一個特征矩陣,并建立一個依賴向量(Y)及其各自的觀察結果。我們用 pandas 的 iloc (用于修複索引以進行選擇)讀取列,它包含兩個參數 — [行選擇,列選擇]。
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 3].values
步驟3:處理缺失的資料
我們得到的資料很少是同質的。有時資料可能會丢失,是以需要對其進行處理,以免降低機器學習模型的性能。
我們需要用整列的 Mean 或 Median 替換缺失的資料。為此,我們将使用 sklearn.preprocessing 庫,其中包含一個名為 Imputer 的類,它将幫助我們處理丢失的資料。
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)
我們的對象名稱是 imputer。 Imputer 類可以采用如下參數:
missing_values : 它是缺失值的占位符。所有出現的 missing_values 都将被估算。我們可以給它一個整數或 NaN 來查找缺失值。
strategy : 這是插補政策 —— 如果是"mean",則使用沿軸的平均值(列)替換缺失值。其他政策包括"median"(中位數)和"most_frequent"(最常見)。
axis : 可以指定 0 或 1,0 沿列插入,1沿行插入。
現在将 imputer 對象與我們的資料相比對。
imputer = imputer.fit(X[:, 1:3])
接着用 transform 方法将缺失值替換為列的平均值。
X[:, 1:3] = imputer.transform(X[:, 1:3])
步驟4:編碼分類資料
任何非定量的變量都是分類的。例如頭發顔色、性别、研究領域、大學就業、政治派别、疾病感染狀況等。
但是為什麼要編碼?
我們不能在模型的數學方程中使用“男性”和“女性”等值,是以需要将這些變量編碼為數字。
為此,我們從 sklearn.preprocessing 庫導入 LabelEncoder 類,并建立 LabelEncoder 類的對象labelencoder_X。之後在分類特征上使用 fit_transform 方法。
在編碼之後,有必要區分同一列中的變量,為此我們将使用 sklearn.preprocessing 庫中的 OneHotEncoder 類。
獨熱編碼(One-Hot Encoding)
獨熱編碼将分類特征轉換為更适合分類和回歸算法的格式。
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])
onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)
步驟5:将資料集拆分為訓練集和測試集
現在我們将資料分成兩組,一組用于訓練模型,稱為訓練集,另一組用于測試模型的性能,稱為測試集。它們的比例通常是 80/20。為此,我們導入 sklearn.model_selection 庫的 train_test_split 方法。
from sklearn.model_selection import train_test_split
現在建立訓練集和測試集,我們将建立 4 套 ——
X_train(訓練部分特征矩陣),
X_test (測試特征矩陣的一部分),
Y_train (訓練與 X 集相關的因變量的一部分,是以也是相同的索引),
Y_test(測試與 X 測試集相關的因變量的一部分,是以也測試相同的索引)。
我們将為它們配置設定 test_train_split,它接受參數 arrays(X和Y)test_size(指定分割資料集的比率)。
X_train, X_test, Y_train, Y_test = train_test_split( X , Y , test_size = 0.2, random_state = 0)
第6步:特征縮放
大多數機器學習算法在其計算中使用兩個資料點之間的歐幾裡德距離。是以,高幅度特征在距離計算中的權重将比低幅度的特征更重。為了避免這種功能,使用标準化或 Z-score 标準化。這是通過使用 StandardScaler 類 sklearn.preprocessing 來完成的。
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
此外,我們将轉換 X_test 集合,同時需要适應并轉換 X_train 集合。
轉換函數将所有資料轉換為相同的标準化比例。
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)
到此為止,你已經學習了資料預處理所涉及的基本步驟。
現在,你可以嘗試在某些實際資料集上應用這些預處理技術。
歡迎掃碼關注公衆号:硬核智能