在平常处理回归模型的时候,大部分是涉及到的是简单线性和多元线性,那么非线性的要怎么表达呢?这就要引进sklearn.preprocessing.PolynomialFeatures,在建模过程中专门生成多项式特征,并且多项式包含的是相互影响的特征集,比如:一个输入样本是2维的。形式如[a,b] ,则二阶多项式的特征集如下[1,a,b,a^2,ab,b^2]。
官网文档:http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeatures.html
参数:degree : integer,多项式阶数,默认为2;
interaction_only : boolean, default = False,如果值为true(默认是false),则会产生相互影响的特征集;
include_bias : boolean,是否包含偏差列。
示例:
>>> X = np.arange(6).reshape(3, 2)
>>> X
array([[0, 1],
[2, 3],
[4, 5]])
>>> poly = PolynomialFeatures(2) #设置多项式阶数为2,其他的默认
>>> poly.fit_transform(X)
array([[ 1., 0., 1., 0., 0., 1.],
[ 1., 2., 3., 4., 6., 9.],
[ 1., 4., 5., 16., 20., 25.]])
>>> poly = PolynomialFeatures(interaction_only=True)#默认的阶数是2,同时设置交互关系为true
>>> poly.fit_transform(X)
array([[ 1., 0., 1., 0.],
[ 1., 2., 3., 6.],
[ 1., 4., 5., 20.]])
上面的数组中,每一列是一个特征。可以看到当interaction_only=False时,它的多项式输出矩阵就是[1,a,b,a^2,ab,b^2]。现在将interaction_only=True。这时就是只找交互作用的多项式输出矩阵。例如[a,b]的多项式交互式输出[1,a,b,ab],不存在自己与自己交互的情况如;a^2或者a*b^2之类的。
至此就可以用转换后的数据输入回归模型进行非线性回归建模和训练了。
网友评论