No.6 特徵工程之數據預處理
【導讀:當今人類即將或者已然了進入智能時代,這是·情報通·人工智慧科普系列第[6]篇文章,歡迎閱讀和收藏!】
1 基本概念
「數據和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已」,這裡的數據指的就是經過特徵工程得到的數據。特徵工程指的是把原始數據轉變為模型的訓練數據的過程,它的目的就是獲取更好的訓練數據特徵,最大限度地從原始數據中提取特徵以供演算法和模型使用,使得機器學習模型逼近這個上限。特徵工程能使得模型的性能得到提升,有時甚至在簡單的模型上也能取得不錯的效果。
數據是實現機器學習的重要輸入,而數據(特徵)預處理是最基本的一個步驟,本文重點介紹數據預處理的方法。
2 術語解釋
特徵?:一個客體或一組客體特性的抽象結果。
啞編碼?:假設有 N 種定性值,則將這一個特徵擴展為 N 種特徵,當原始特徵值為第 i 種定性值時,第 i 個擴展特徵賦值為 1 ,其他擴展特徵賦值為 0 。
正態分布?:也稱常態分布或高斯分布,是連續隨機變數概率分布的一種,自然界、人類社會、心理和教育中大量現象均按正態形式分布,例如能力的高低,學生成績的好壞等都屬於正態分布。它隨隨機變數的平均數、標準差的大小與單位不同而有不同的分布形態。
量綱?:物理量的基本屬性。
標準差?:在概率統計中最常使用作為統計分布程度( statistical dispersion )上的測量。標準差定義是總體各單位標準值與其平均數離差平方的算術平均數的平方根。它反映組內個體間的離散程度。
範數( Norm )?:是數學中的一種基本概念,常常被用來度量某個向量空間(或矩陣)中的每個向量的長度或大小。
定量?:以數量形式存在著的屬性,並因此可以對其進行測量。
定性?:通過非量化的手段來探究事物的本質。其概念與定量相對應。
中位數?:對於有限的數集,可以通過把所有觀察值高低排序後找出正中間的一個作為中位數。如果觀察值有偶數個,通常取最中間的兩個數值的平均數作為中位數。
眾數?:一組數據中出現次數最多的數值。
3 數據預處理的背景
通過特徵提取,我們能得到未經處理的特徵數據,這時的數據可能有以下問題:
?不屬於同一量綱:即各特徵的規格不一樣,不能夠放在一起比較。無量綱化可以解決這一問題。
?信息冗餘:對於某些定量特徵,其包含的有效信息為區間劃分,例如學習成績,假若只關心「及格」或「不及格」,那麼需要將定量的考分,轉換成「 1 」和「 0 」表示及格和未及格。二值化可以解決這一問題。
?定性特徵不能直接使用:某些機器學習演算法和模型只能接受定量特徵的輸入,那麼需要將定性特徵轉換為定量特徵。最簡單的方式是為每一種定性值指定一個定量值,但是這種方式過於靈活,增加了調參的工作。通常使用啞編碼的方式將定性特徵轉換為定量特徵,啞編碼的方式相比直接指定的方式,不用增加調參的工作,對於線性模型來說,使用啞編碼後的特徵可達到非線性的效果。
?存在缺失值:缺失值需要補充。
?信息利用率低:不同的機器學習演算法和模型對數據中信息的利用是不同的,在線性模型中,使用對定性特徵啞編碼可以達到非線性的效果。類似地,對定量變數多項式化,或者進行其他的轉換,都能達到非線性的效果。
4 數據預處理的方法
4.1 Python 庫的安裝
Python 中存在現成的包可以進行特徵工程的預處理:sklearn.preprocessing ,該庫可以解決數據預處理中的問題。
但安裝時出現很多錯誤,安裝方法:
1 、版本號特別重要,一定不要通過 pip install 直接安裝,而是要在此網站中下載本 python 版本的安裝包,逐一安裝;
2 、先安裝 numpy mkl ;
3 、安裝 scipy ;
4 、安裝 kiwisolver ;
5 、安裝 matplotlib ;
6 、最後安裝 sklearn 。
sklearn.preprocessing 庫中的類說明:
4.2 無量綱化
無量綱化使不同規格的數據轉換到同一規格。常見的無量綱化方法有標準化和區間縮放法。標準化的前提是特徵值服從正態分布,標準化後,其轉換成標準正態分布。區間縮放法利用了邊界值信息,將特徵的取值區間縮放到某個特點的範圍,例如 [0, 1] 等。
4.2.1 標準化( z-score )
1 、求出樣本特徵 x 的均值 mean (所有 x 的樣本值相加除以 x 的樣本個數)和標準差 std (一組數據中的每一個數與這組數據的平均數 mean 的差的平方的和再除以數據的個數,再取平方根)。
mean= ( x 1 x 2 …… x m ) /m
2 、可以通過如下公式進行數據標準化:
x_norm=(x- mean)/std
通過 Python 代碼實現:
from sklearn.preprocessing import StandardScaler
StandardScaler().fit_transform(x)
4.2.2 區間縮放( max-min 標準化)
1 、得出最大值和最小值;
2 、通過如下公式進行數據的縮放:
x_ scaler =(x- min)/(max-min)
通過 Python 代碼實現:
from sklearn.preprocessing import MinMaxScaler
MinMaxScaler().fit_transform(x)
4.2.3 歸一化( L1/L2 範數標準化)
歸一化是依照特徵矩陣的行處理數據,其目的在於樣本向量在點乘運算或其他核函數計算相似性時,擁有統一的標準,也就是說都轉化為「單位向量」。
L1 範數則是將上述公式的除數改為向量中各個元素絕對值之和。通常情況下,範數標準化首選 L2 範數標準化。
通過 Python 代碼實現:
from sklearn.preprocessing import Normalizer
Normalizer().fit_transform(x)
4.3 對定量特徵二值化
定量特徵二值化的核心在於設定一個閾值,大於閾值的賦值為 1 ,小於等於閾值的賦值為 0 ,公式表達如下:
通過 Python 代碼實現:
from sklearn.preprocessing import Binarizer
Binarizer(threshold=3).fit_transform(iris.data)
4.4 對定性特徵啞編碼
假設有 N 種定性值,則將這一個特徵擴展為 N 種特徵,當原始特徵值為第 i 種定性值時,第 i 個擴展特徵賦值為 1 ,其他擴展特徵賦值為 0 。
通過 Python 代碼實現:
from sklearn.preprocessing import OneHotEncoder
OneHotEncoder().fit_transform(iris.target.reshape((-1,1)))