Scikit Learn PolynomialFeatures - include_bias 选项的用途是啥?

Posted

技术标签:

【中文标题】Scikit Learn PolynomialFeatures - include_bias 选项的用途是啥?【英文标题】:Scikit Learn PolynomialFeatures - what is the use of the include_bias option?Scikit Learn PolynomialFeatures - include_bias 选项的用途是什么? 【发布时间】:2020-04-30 17:08:54 【问题描述】:

在 scikit-learn 的 PolynomialFeatures 预处理器中,有一个 include_bias 选项。这实际上只是将一列添加到数据框中。我想知道这样做有什么意义。当然,您可以将其设置为 False。但从理论上讲,有或没有一列以及生成的多项式特征如何影响回归。

这是文档中的解释,但我似乎无法从中得到任何有用的信息,说明为什么应该使用它。

include_bias : 布尔值

如果为 True(默认),则包括一个偏差列,其中的特征 所有多项式幂为零(即一列一 - 充当 线性模型中的截距项)。

【问题讨论】:

【参考方案1】:

假设您要执行以下回归:

y ~ a + b x + c x^2

其中x 是一个通用示例。最佳系数a,b,c 是通过简单的矩阵演算计算得出的。首先,让我们用X = [1 | X | X^2] 表示一个有 N 行的矩阵,其中 N 是样本数。第一列是一列 1,第二列是一列值x_i,对于所有样本 i,第三列是一列值 x_i^2,对于所有样本 i。让我们用 B 表示以下列向量B=[a b c]^T 如果 Y 是所有样本 i 的 N 个目标值的列向量,我们可以将回归写为

y ~ X B

这个等式的i-th 行是y_i ~ [1 x_i x^2] [a b c]^t = a + b x_i + c x_i^2

训练回归的目标是找到B=[a b c] 使得X B 尽可能接近y

如果您不添加 1 列,则您先验地假设 a=0,这可能不正确。

在实践中,当您编写 Python 代码时,将 PolynomialFeaturessklearn.linear_model.LinearRegression 一起使用,后者会默认添加一列 1(因为在 LinearRegression 中,fit_intercept 参数为 @987654340 @ 默认情况下),因此您不需要在PolynomialFeatures 中也添加它。因此,PolynomialFeatures 中通常会保留include_bias=False

如果你使用statsmodels.OLS而不是LinearRegression,情况就不同了

【讨论】:

谢谢,你回答的最后一部分正是我想要的。 就像 Anup 一样,我喜欢你如何将最后两段包含在内以消除任何混淆。

以上是关于Scikit Learn PolynomialFeatures - include_bias 选项的用途是啥?的主要内容,如果未能解决你的问题,请参考以下文章

[机器学习与scikit-learn-2]:如何学习Scikit-learn

scikit-learn学习基础知识四

[机器学习与scikit-learn-3]:scikit-learn模型地图与模型选择

scikit-learn:如何使用拟合概率模型?

“OneVsRestClassifier”(Scikit-learn)和“Binary Relevance”(Scikit-multilearn)有啥区别?

Python中计算TF-IDF(scikit-learn)