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 代码时,将 PolynomialFeatures
与 sklearn.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-3]:scikit-learn模型地图与模型选择
“OneVsRestClassifier”(Scikit-learn)和“Binary Relevance”(Scikit-multilearn)有啥区别?