機器學習入坑指南(二):數據預處理

機器學習初步:數據預處理

機器學習離不開大量的數據。在對這些數據進行分析前,咱們先學習一下在 Python 中如何導入數據並對它進行預處理。html

1 導入須要的庫

利用 Python 進行數據分析所必須的庫有兩個。python

NumPy 包含了各類數學計算函數。git

Pandas 用於導入和管理數據集。github

一般咱們使用如下形式導入這兩個庫:算法

import numpy as np
import pandas as pd

2 導入數據集

數據集一般是 .csv 格式。CSV 以純文本形式保存表格數據,文件的每一行是一條數據記錄。咱們使用 Pandas 的 read_csv 方法讀取本地 .csv 文件做爲一個數據幀(dataframe),而後從數據幀中製做自變量和因變量的矩陣和向量。dom

示例數據地址:GitHub - Avik-Jain/100-Days-Of-ML-Code/datasets機器學習

可將數據下載到本地,放在 Jupyter Notebook 工做目錄下,或經過 upload 導入。函數

dataset = pd.read_csv(Data.csv)
# X 獲取全部行從第0列到倒數第1列的數據(從0起算)
X = dataset.iloc[ : ,:-1].values
# Y 獲取全部行第3列的數據
Y = dataset.iloc[ : , 3].values

iloc 的做用是經過行列號來獲取數據,而 loc 則是經過標籤索引數據。性能

導入後,dataset 的數據以下學習

3 處理丟失數據

咱們獲得的數據可能因爲各類緣由存在缺失。爲了避免下降機器學習模型的性能,咱們能夠經過一些方法處理這些數據,好比使用整列數據的平均值或中位數來替換丟失的數據。

可使用 sklearn.preprocessing 庫中的 Imputer 類來完成這項任務。

from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)
# 訓練模型,擬合出做爲替換值的均值
imputer = imputer.fit(X[ : , 1:3])
# 處理須要補全的數據
X[ : , 1:3] = imputer.transform(X[ : , 1:3])

Imputer 參數解釋:

missing_values:缺失值,能夠爲整數或 NaN ,默認爲 NaN

strategy:替換策略,默認用均值 'mean' 替換,還能夠選擇中位數 'median' 或衆數 'most_frequent'

axis:指定軸數,默認 axis = 0 表明列,axis = 1 表明行

4 解析分類數據

分類數據是具備標籤值而不是數值的變量,取值範圍一般固定(相似枚舉值),不能用於模型的數學計算,須要解析成數字。爲實現這個功能,咱們從 sklearn.preprocessing 庫中導入 LabelEnconder 類。

通過編碼以後的變量稱爲虛擬變量啞變量(Dummy Variable)

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
# 對 X 中的標籤數據編碼
X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])
# 使用 onehotencoder 對通過標籤編碼的第0行數據進行獨熱編碼
onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()
# 對 Y 中的標籤數據編碼
labelencoder_Y = LabelEncoder()
Y =  labelencoder_Y.fit_transform(Y)

關於獨熱編碼,參考博客園 - OneHotEncoder獨熱編碼和 LabelEncoder標籤編碼

5 分割數據集

咱們須要把數據集拆分紅用來訓練模型的訓練集和用來驗證模型的測試集。二者的比例通常是 80:20。這裏須要導入 sklearn.crossvalidation 庫中的 train_test_split()方法。

from sklearn.cross_validation import train_test_split
# 分割數據集
X_train, X_test, Y_train, Y_test = train_test_split( X , Y , test_size = 0.2, random_state = 0)

6 特徵縮放

許多機器學習算法在計算中使用數據點之間的歐氏距離,數據的某一特徵值的量級在很大程度上決定了距離的大小。(特徵縮放做用的體現參見 lwbeyond 的文章—— K-近鄰算法 )

所以,應該把每一個特徵的取值限定在某一範圍內,稱爲特徵縮放。經常使用的方法有調節比例、標準化等。這裏咱們導入 sklearn.preprocessing 庫的 StandardScalar 類。

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.fit_transform(X_test)

歡迎關注 Evan 的博客

相關文章
相關標籤/搜索