特征锦囊:怎么进行多项式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点下“在看”,这是对我的极大鼓励!阿里嘎多!?