特徵錦囊:怎麼進行多項式or對數的數據變換?
- 2020 年 1 月 2 日
- 筆記
怎麼進行多項式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點下「在看」,這是對我的極大鼓勵!阿里嘎多!?