機器學習 | 特征工程(一)- 數據預處理


本文將以iris數據集為例,梳理數據挖掘和機器學習過程中數據預處理的流程。在前期階段,已完成了數據采集、數據格式化、數據清洗和采樣等階段。通過特征提取,能得到未經處理的特征,但特征可能會有如下問題:
  - 不屬於同一量綱  通常采用無量綱化進行處理;
  - 信息冗余
  - 定性特征不能直接使用  通常使用啞編碼的方式將定性特征轉換為定量特征;
  - 存在缺失值
  - 信息利用率低  不同的機器學習算法和模型對數據中信息的利用是不同的,之前提到在線性模型中,使用對定性特征啞編碼可以達到非線性的效果。類似地,對定量變量多項式化,或者進行其他的轉換,都能達到非線性的效果。
 
首先導入iris數據集,
from sklearn.datasets import load_iris

#導入IRIS數據集
iris = load_iris()

#特征矩陣
iris.data

#目標向量
iris.target

1 無量綱化

無量綱化使不同規格的數據轉換到同一規格。常見的無量綱化方法有標准化和區間縮放法。標准化的前提是特征值服從正態分布,標准化后,其轉換成標准正態分布。區間縮放法利用了邊界值信息,將特征的取值區間縮放到某個特點的范圍,例如[0, 1]等。

1.1 標准化

標准化需要計算特征的均值和標准差,公式表達為:
使用preproccessing庫的StandardScaler類對數據進行標准化的代碼如下:
from sklearn.preprocessing import StandardScaler
 
#標准化,返回值為標准化后的數據
StandardScaler().fit_transform(iris.data)
1.2 區間縮放法
區間縮放法的思路有多種,常見的一種為利用兩個最值進行縮放,公式表達為:
使用preproccessing庫的MinMaxScaler類對數據進行區間縮放的代碼如下:
from sklearn.preprocessing import MinMaxScaler
 
#區間縮放,返回值為縮放到[0, 1]區間的數據
MinMaxScaler().fit_transform(iris.data)
1.3 歸一化
簡單來說,標准化是依照特征矩陣的列處理數據,其通過求z-score的方法,將樣本的特征值轉換到同一量綱下。歸一化是依照特征矩陣的行處理數據,其目的在於樣本向量在點乘運算或其他核函數計算相似性時,擁有統一的標准,也就是說都轉化為“單位向量”。歸一化類型包括:線性歸一化、標准差歸一化和非線性歸一化。規則為l2的歸一化公式如下:
 
使用preproccessing庫的Normalizer類對數據進行歸一化的代碼如下:
from sklearn.preprocessing import Normalizer

#歸一化,返回值為歸一化后的數據
Normalizer().fit_transform(iris.data)

2 對定量特征二值化

定量特征二值化的核心在於設定一個閾值,大於閾值的賦值為1,小於等於閾值的賦值為0,公式表達如下:
使用preproccessing庫的Binarizer類對數據進行二值化的代碼如下:
from sklearn.preprocessing import Binarizer

#二值化,閾值設置為3,返回值為二值化后的數據
Binarizer(threshold=3).fit_transform(iris.data)

3 對定性特征啞編碼

one-hot編碼是指將一個無序的類別變量k個值就轉換成k個虛擬變量。
使用preproccessing庫的OneHotEncoder類對數據進行啞編碼的代碼如下:
from sklearn.preprocessing import OneHotEncoder

#啞編碼,對IRIS數據集的目標值,返回值為啞編碼后的數據
OneHotEncoder().fit_transform(iris.target.reshape((-1,1)))

4 缺失值計算

使用preproccessing庫的Imputer類對數據進行缺失值計算的代碼如下:
from numpy import vstack, array, nan
from sklearn.preprocessing import Imputer

#缺失值計算,返回值為計算缺失值后的數據
#參數missing_value為缺失值的表示形式,默認為NaN
#參數strategy為缺失值填充方式,默認為mean(均值)
Imputer().fit_transform(vstack((array([nan, nan, nan, nan]), iris.data)))

5 數據變換

常見的數據變換有基於多項式的、基於指數函數的、基於對數函數的。
使用preproccessing庫的PolynomialFeatures類對數據進行多項式轉換的代碼如下:
from sklearn.preprocessing import PolynomialFeatures

#多項式轉換
#參數degree為度,默認值為2
PolynomialFeatures().fit_transform(iris.data)
基於單變元函數的數據變換可以使用一個統一的方式完成,使用preproccessing庫的FunctionTransformer對數據進行對數函數轉換的代碼如下:
 
from numpy import log1p
from sklearn.preprocessing import FunctionTransformer

#自定義轉換函數為對數函數的數據變換
#第一個參數是單變元函數
FunctionTransformer(log1p).fit_transform(iris.data)

6 sklearn數據包功能總結

功能
說明
StandardScaler
無量綱化
標准化,基於特征矩陣的列,將特征值轉換至服從標准正態分布
MinMaxScaler
無量綱化
區間縮放,基於最大最小值,將特征值轉換到[0, 1]區間上
Normalizer
歸一化
基於特征矩陣的行,將樣本向量轉換為“單位向量”
Binarizer
二值化
基於給定閾值,將定量特征按閾值划分
OneHotEncoder
啞編碼
將定性數據編碼為定量數據
Imputer
缺失值計算
計算缺失值,缺失值可填充為均值等
PolynomialFeatures
多項式數據轉換
多項式數據轉換
FunctionTransformer
自定義單元數據轉換
使用單變元的函數來轉換數據
  整理的特征工程其它部分內容請見:
   0 引言
   4 總結
 


免責聲明!

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



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