4.4 生成多项式和交互特征
问题描述
创建多项式特征和交互特征。
解决方案
虽然有些人选择自己手动创建多项式特征和交互特征,但其实scikit-learn提供了一个内置的方法:

degree参数决定了多项式的最高阶数。例如,degree=2会创建阶数最高为2的特征:

degree=3则会创建阶数最高为3的特征:

此外,默认情况下PolynomialFeatures包含交互特征:x₁x₂通过设置interaction_only为True,可以强制创建出来的特征只包含交互特征:

讨论
当特征和目标值(预测值)之间存在非线性关系时,就需要创建多项式特征。例如,年龄可能和身体状况有很大的关系,一般年龄越大身体状况越差,但是它们之间的关系不是线性关系,所以需要对特征x编码——生成这个特征的更高阶的形式(x² 、x³ 等)——以此表示对目标值造成的非线性影响。
另外,有时我们会遇到一个特征需要依赖于另一个特征才能对目标值造成影响的情况。举一个简单的例子,要预测一杯咖啡是否是甜的,要考虑两个特征:咖啡是否被搅拌过;咖啡是否加了糖。单独看二者中的任何一个,都无法确定这杯咖啡是甜的,但是把它们结合在一起,就能确定了。咖啡只有在加糖并且搅拌后才是甜的,这两个特征对目标值(咖啡是甜的)的作用是相互依赖的。生成一个交互特征(将两个特征相乘),我们就可以为这种关系编码。



本书评论