我正在使用scikit-learn. 我使用以下内容将预测器功能居中:
X = sklearn.preprocessing.StandardScaler().fit_transform(X)
我将使用以下代码来创建多项式特征:
poly = PolynomialFeatures(degree=2)
poly.fit_transform(X)
我的问题是我是否应该在创建多项式特征之前或之后将数据居中。这有关系吗?
我正在使用scikit-learn. 我使用以下内容将预测器功能居中:
X = sklearn.preprocessing.StandardScaler().fit_transform(X)
我将使用以下代码来创建多项式特征:
poly = PolynomialFeatures(degree=2)
poly.fit_transform(X)
我的问题是我是否应该在创建多项式特征之前或之后将数据居中。这有关系吗?
如果多项式拟合包含截距,它将考虑居中工作。如果没有,最好在将数据传递给模型之前将其居中。
这是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