13.2 处理特征之间的影响
问题描述
一个特征对目标变量的影响取决于另一个特征,现在要处理两个特征之间的影响。
解决方案
使用scikit-learn的PolynomialFeatures创建多项式特征,对这种依赖关系建模:


讨论
有时某个特征对目标向量的影响部分取决于另一个特征。想象一个与冲咖啡有关的简单例子。我们有两个二元特征——是否加糖(sugar)和是否搅拌(stirred),现在想要预测咖啡是不是甜的。只把糖加入咖啡中(sugar=1,stirred=0)不会使咖啡变甜(所有的糖都沉在底部),只搅拌咖啡而不加糖(sugar=0,stirred=1)也不会让它变甜。但是,把糖放入咖啡中并搅拌(sugar=1,stirred=1)将使咖啡变甜。加糖和搅拌对咖啡变甜的影响是相互依赖的。在这种情况下,可以说加糖和搅拌之间存在相互作用。
将存在相互作用的一组特征的乘积作为新特征加入模型中,就可以对这种特征(交互特征)进行建模,其公式如下:

其中,x₁和x₂分别是sugar和stirred的值,x₁x₂代表两者之间的相互作用。
本解决方案使用的是仅包含两个特征的数据集。以下是第一个样本的两个特征:

要创建一个交互特征,只需将每个样本的这两个特征相乘即可:

然后,可以查看第一个样本的交互特征:

虽然我们经常有充分的理由相信两个特征之间存在相互作用,但有时并不是这样。在这种情况下,使用scikit-learn的PolynomialFeatures为所有的特征组合创建交互项(交互特征)会很有用,然后就可以使用模型选择策略找出能产生最佳模型的特征和交互项的组合。
要使用PolynomialFeatures创建交互特征,必须设置3个重要的参数。最重要的一个是interaction_only,设置interaction_only = True会告诉PolynomialFeatures只返回交互特征(而不是多项式特征,对于多项式特征,我们将在13.3节中讨论)。默认情况下,PolynomialFeatures将添加一个叫作偏差的特征(值全部为1),我们可以使用include_bias = False来阻止加入偏差。最后,degree参数用于确定最多用几个特征来创建交互特征(允许创建包含三个特征的交互特征)。在本解决方案中,可以通过观察第一个样本的特征与交互特征是否与我们人工计算的结果相同,来检查PolynomialFeatures是否正常工作:




本书评论