一般通過特徵提取或者資料集給出的特徵,可能都有如下問題:
不屬於同乙個量綱:即不同特徵可能由於單位不一致或者分布區間不一致而導致數值上的差異,所以不能直接放在一起進行比較;
特徵資訊存在冗餘:有可能不同特徵實質上描述的是同乙個我們想關注的特徵,因此對於特定問題可能存在多餘的特徵;
定性特徵不能直接使用:定性特徵最直觀的理解就是資料集中用字串表示的特徵(當然這只是一種片面的理解),所以需要將其轉換成定量特徵進行描述,one-hot編碼是一種常用的方法;
存在缺失值:有可能某些特徵的某些個體存在缺失的記錄,這時候需要通過分析選擇進補全或者捨棄;
資訊利用率低:其實對於不同任務不同模型,特徵的選擇應該是不同的,換句話說,對於特徵的利用程度是不同的,所以可以通過人工篩選、one-hot編碼或者定量變數多項式化來提高特徵的利用率。
由於存在上述問題,因此在我們設計演算法和模型之前,我們需要相對資料進行預處理,下面通過sklearn中的preprocessing模組並基於iris資料集來介紹不同的資料預處理。
匯入iris資料集。
from sklearn.datasets importload_iris
iris = load_iris()
下面給出preprocessing中對應不同資料預處理過程的方法,以便於查詢,具體的使用後面部分將詳細展開
類 功能
說明standardscaler
無量綱化
標準化,基於特徵矩陣的列,將特徵值轉換至服從標準正態分佈
minmaxscaler
無量綱化
區間縮放,基於最大最小值,將特徵值轉換到[0, 1]區間上
normalizer
歸一化基於特徵矩陣的行,將樣本向量轉換為「單位向量」
binarizer
二值化基於給定閾值,將定量特徵按閾值劃分
onehotencoder
啞編碼將定性資料編碼為定量資料
imputer
缺失值計算
計算缺失值,缺失值可填充為均值等
polynomialfeatures
多項式資料轉換
多項式資料轉換
functiontransformer
自定義單變元函式轉換
使用單變元的函式來轉換資料
2.1 - 標準化
標準化的公式為$x^=\frac}$,**如下:
from sklearn.preprocessing importstandardscaler
standardscaler().fit_transform(iris.data)
2.2 - 區間放縮
區間放縮的公式為$x^=\frac}-x_}$,**如下:
from sklearn.preprocessing importminmaxscaler
minmaxscaler().fit_transform(iris.data)
無量綱化是依據特徵矩陣的列來處理資料,而歸一化是依據特徵矩陣的行來處理資料,其公式為$x^=\frac}$,**如下:
from sklearn.preprocessing importnormalizer
normalizer().fit_transform(iris.data)
設定乙個閾值,大於閾值的賦值為1,小於等於閾值的賦值為0,其公式為
$$x^=\left\1,x>threshold\\0,x\leq threshold\end\right.$$
**如下:
from sklearn.preprocessing importbinarizer
binarizer(threshold=3).fit_transform(iris.data)
假如有乙個定性特徵具有n個離散值,則可以將其編碼為長度為n的向量,對於具有第i個離散值的特徵,將向量的第i位置為1,其餘置為0,**如下:
from sklearn.preprocessing importonehotencoder
onehotencoder().fit_transform(iris.target.reshape((-1, 1)))
由於iris資料集不存在缺失值,所以直接對資料集增加乙個樣本,4個特徵之均賦值為nan,而後通過缺失值計算計算出這四個特徵之,**如下:
from numpy importvstack, array, nan
from sklearn.preprocessing import
imputer
imputer().fit_transform(vstack((array([nan, nan, nan, nan]), iris.data)))
常見的資料變換有基於多項式的、基於指數函式的、基於對數函式的。對於iris資料集的4個特徵,做度數為2的多項式轉換公式如下:
$$\begin(x^_,x^_,x^_,x^_,x^_,x^_,x^_,x^_,x^_,x^_,x^_,x^_,x^_,x^_,x^_)\\
=(1,x_,x_,x_,x_,x^_,x_*x_,x_*x_,x_*x_,x^_,x_*x_,x_*x_,x^_,x_*x_,x^_)
\end$$
**如下:
from sklearn.preprocessing importpolynomialfeatures
polynomialfeatures().fit_transform(iris.data)
可以通過基於單變元的資料變化來轉換特徵,**如下:
from numpy importlog1p
from sklearn.preprocessing import
functiontransformer
functiontransformer(log1p).fit_transform(iris.data)
資料預處理
現實世界中資料大體上都是不完整,不一致的髒資料,無法直接進行資料探勘,或挖掘結果差強人意。為了提前資料探勘的質量產生了資料預處理技術。資料預處理有多種方法 資料清理,資料整合,資料變換,資料歸約等。這些資料處理技術在資料探勘之前使用,大大提高了資料探勘模式的質量,降低實際挖掘所需要的時間。一 資料清...
資料預處理
常見的資料預處理方法,以下通過sklearn的preprocessing模組來介紹 變換後各維特徵有0均值,單位方差。也叫z score規範化 零均值規範化 計算方式是將特徵值減去均值,除以標準差。sklearn.preprocessing scale x 一般會把train和test集放在一起做標...
資料預處理
用cut函式分箱 有時把數值聚集在一起更有意義。例如,如果我們要為交通狀況 路上的汽車數量 根據時間 分鐘資料 建模。具體的分鐘可能不重要,而時段如 上午 下午 傍晚 夜間 深夜 更有利於 如此建模更直觀,也能避免過度擬合。這裡我們定義乙個簡單的 可復用的函式,輕鬆為任意變數分箱。def binni...