数据预处理--生成多项式特征(PolynomialFeatures)

使用 scikit-learn提供的PolynomialFeatures 这个类可以进行特征的构造, 例如有两个特征a和b,由这两个特征构造的特征项为[1, a, b, a2, a*b, b2]。

PolynomialFeatures 这个类有 3 个参数:

degree:控制多项式的次数;
interaction_only:默认为 False,如果指定为 True,那么就不会有特征本身和本身结合的项,组合的特征中没有 a2 和 b2
include_bias:默认为 True 。如果为 True 的话,那么结果中就会有 0 次幂项,即全为 1 这一列。

下面通过几个例子进行说明:
构造一个3*2维的特征值

import numpy as np
from sklearn.preprocessing import PolynomialFeatures

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

输出:

array([[0, 1],
       [2, 3],
       [4, 5]])
pf = PolynomialFeatures(2)
pf.fit_transform(X)

输出

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

通过powers_属性可以看出上面的输出是怎么由这些特征组合的:

pf.powers_

输出:

array([[0, 0],
       [1, 0],
       [0, 1],
       [2, 0],
       [1, 1],
       [0, 2]], dtype=int64)

可以看到,pf.powers_输出的第一行是[0, 0],对应的是上面pf.fit_transform(X)的[1, 1, 1]这一列。意思是上面的3*2维特征的第一列的0次幂加上第二列的0次幂,剩下的以此类推。

可以设置include_bias=False,这时就没有 0 次幂项(两个特征组合一起的0次幂没有,如a0*b0,但一个特征的0次幂是存在的,如a0*b1),即全为 1 这一列。

pf = PolynomialFeatures(include_bias=False)
pf.fit_transform(X)

输出

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

此时pf.powers_输出:

array([[1, 0],
       [0, 1],
       [2, 0],
       [1, 1],
       [0, 2]], dtype=int64)

官方文档:
https://scikit-learn.org/stable/modules/preprocessing.html#preprocessing

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值