在数据居中之后或之前计算多项式特征?

机器算法验证 回归 预言 scikit-学习 标准化 多项式
2022-04-05 15:58:56

我正在使用scikit-learn. 我使用以下内容将预测器功能居中:

X = sklearn.preprocessing.StandardScaler().fit_transform(X)   

我将使用以下代码来创建多项式特征:

poly = PolynomialFeatures(degree=2)
poly.fit_transform(X)

我的问题是我是否应该在创建多项式特征之前或之后将数据居中。这有关系吗?

1个回答

如果多项式拟合包含截距,它将考虑居中工作。如果没有,最好在将数据传递给模型之前将其居中。

这是R中的一个演示,其中红线是没有截距的模型。

set.seed(3)
x=runif(10)+3
y=runif(10)
fit1=lm(y~poly(x,2))
plot(x,y,ylim=c(0,1))
lines(seq(-5,5,0.01),predict(fit1,data.frame(x=seq(-5,5,0.01))))

fit2=lm(y~poly(x,2)-1)
lines(seq(-5,5,0.01),predict(fit2,data.frame(x=seq(-5,5,0.01))),col=2)

在此处输入图像描述

此外,如果您使用正交多项式,它不仅会为您居中,而且在数值上也是稳定的。

这是演示

> set.seed(0)
> x=runif(100)
> colMeans(poly(x,2,raw=F))
            1             2 
 3.971433e-18 -4.330303e-18
> colMeans(poly(x,2,raw=T))
        1         2 
0.5207647 0.3434324