您的位置:首页 > 其它

用sklearn.preprocessing做数据预处理(六)——非线性特征

2019-03-02 17:18 411 查看

有时候线性的特征并不能做出完美的图形,这时候我们会尝试非线性。比如,将特征进行多项式展开

import numpy as np
from sklearn.preprocessing import PolynomialFeatures

x = np.arange(6).reshape(3,2)

x

[code]array([[0, 1],
[2, 3],
[4, 5]])

创建二次方的多项式,比如将两个特征 (X_1, X_2),它的平方展开式便转换成5个特征(1, X_1, X_2, X_1^2, X_1X_2, X_2^2).
poly = PolynomialFeatures(2)
poly.fit_transform(x)

[code]array([[ 1.,  0.,  1.,  0.,  0.,  1.],
[ 1.,  2.,  3.,  4.,  6.,  9.],
[ 1.,  4.,  5., 16., 20., 25.]])

也可以自定义选择只要保留特征相乘的项。 即将 (X_1, X_2, X_3) 转换成 (1, X_1, X_2, X_3, X_1X_2, X_1X_3, X_2X_3, X_1X_2X_3).

x = np.arange(9).reshape(3,3)
x

[code]array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])

poly = PolynomialFeatures(degree=3, interaction_only=True)
poly.fit_transform(x)

[code]array([[  1.,   0.,   1.,   2.,   0.,   0.,   2.,   0.],
[  1.,   3.,   4.,   5.,  12.,  15.,  20.,  60.],
[  1.,   6.,   7.,   8.,  42.,  48.,  56., 336.]])

自定义特征的转换函数,通俗的讲就是将原始的特征放进一个函数做转换,这个函数出来的值作为新的特征,比如对数log转换、倒数转换等,FunctionTransFormer可以实现这个功能。

import numpy as np
from sklearn.preprocessing import FunctionTransformer
transformer = FunctionTransformer(np.log1p)        # log1p := log(x+1),即ln(x+1)
x = np.array([[0,1],[2,3]])
x

[code]array([[0, 1],
[2, 3]])

transformer.transform(x)

[code]array([[0.        , 0.69314718],
[1.09861229, 1.38629436]])

 

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: