特徵錦囊:怎麼進行多項式or對數的數據變換?

今日錦囊

怎麼進行多項式or對數的數據變換?

數據變換,這個操作在特徵工程中用得還是蠻多的,一個特徵在當前的分布下無法有明顯的區分度,但一個小小的變換則可以帶來意想不到的效果,而這個小小的變換,也就是今天給大家分享的小錦囊。

多項式變換

按照指定的degree,進行多項式操作從而衍生出新變數(當然這是針對每一列特徵內的操作)。

舉個栗子:

from sklearn.datasets import load_iris  #導入IRIS數據集  iris = load_iris()  iris.data[0]    # Output: array([ 5.1,  3.5,  1.4,  0.2])  
tt = PolynomialFeatures().fit_transform(iris.data)  tt[0]    # Output: array([  1.  ,   5.1 ,   3.5 ,   1.4 ,   0.2 ,  26.01,  17.85,   7.14, 1.02,  12.25,   4.9 ,   0.7 ,   1.96,   0.28,   0.04])  

因為PolynomialFeatures()方法默認degree是2,所以只會進行二項式的衍生。

一般來說,多項式變換都是按照下面的方式來的:

f = kx + b 一次函數(degree為1) f = ax^2 + bx + w 二次函數(degree為2) f = ax^3 + bx^2 + cx + w 三次函數(degree為3)

這類的轉換可以適當地提升模型的擬合能力,對於在線性回歸模型上的應用較為廣泛。

對數變換

這個操作就是直接進行一個對數轉換,改變原先的數據分布,而可以達到的作用主要有:

1)取完對數之後可以縮小數據的絕對數值,方便計算;

2)取完對數之後可以把乘法計算轉換為加法計算;

3)還有就是分布改變帶來的意想不到的效果。

numpy庫里就有好幾類對數轉換的方法,可以通過from numpy import xxx 進行導入使用。

log:計算自然對數

log10:底為10的log

log2:底為2的log

log1p:底為e的log

程式碼集合

from sklearn.datasets import load_iris  #導入IRIS數據集  iris = load_iris()    #多項式轉換  #參數degree為度,默認值為2  from sklearn.preprocessing import PolynomialFeatures  PolynomialFeatures().fit_transform(iris.data)    #對數變換  from numpy import log1p  from sklearn.preprocessing import FunctionTransformer  #自定義轉換函數為對數函數的數據變換  #第一個參數是單變元函數  FunctionTransformer(log1p).fit_transform(iris.data)  

以上的變換操作,夠我們衍生出一堆變數了,開始用起來吧!

原創不易,如果覺得這種學習方式有用,希望可以幫忙隨手轉發or點下「在看」,這是對我的極大鼓勵!阿里嘎多!?