sklearn中的多项式回归
废话不多说,直接上代码。
那么为什么当我们传入 d e g r e e = 3 degree=3 degree=3 时,得出来有 10 项呢?下面我就进行解释。
如果原始的样本有两个特征
x
1
x_1
x1 和
x
2
x_2
x2,传入的
d
e
g
r
e
e
=
3
degree=3
degree=3,相应的,我们最后会得到 10 列,下面我们来分析 10 列是怎么得到的。
那么,我们可以得出一个结论。当
d
e
g
r
e
e
=
i
degree = i
degree=i 时,我们的
P
o
l
y
n
o
m
i
a
l
F
e
a
t
u
r
e
s
PolynomialFeatures
PolynomialFeatures 将自动的生成所有的
d
e
g
r
e
e
degree
degree 小于等于
i
i
i 相应的所有的多项式的项。也就是说,经过
P
o
l
y
n
o
m
i
a
l
F
e
a
t
u
r
e
s
PolynomialFeatures
PolynomialFeatures 之后,我们的样本的总的特征数将会呈指数级的增长。那么这样的一个特性本身会使我们这个
P
o
l
y
n
o
m
i
a
l
F
e
a
t
u
r
e
s
PolynomialFeatures
PolynomialFeatures 非常的强大,因为它涉及到了所有的可能的多项式的这种特征。不过与此同时,也会带来一些问题。
Pipeline(管道)
在具体编程实践的时候,我们使用 s k l e a r n sklearn sklearn 可以非常容易的实现这种多项式回归,也就是所谓的 P i p e l i n e Pipeline Pipeline。
P i n e l i n e Pineline Pineline 意为管道,那么我们这里是怎么利用管道的呢?
可以想象一下,如果我们使用多项式回归,这个过程是怎么样的?我们首先对于原始的样本数据通过 P o l y n o m i a l F e a t u r e s PolynomialFeatures PolynomialFeatures 这个类生成多项式特征的样本的数据,这是一步。而且我们之前进行多项式回归都是将生成的多项式的样本数据直接送给了 L i n e a r R e g r e s s i o n LinearRegression LinearRegression,但如果我们的 d e g r e e degree degree 非常大的话,比如说 100,我们的样本生成的特征它们的数据之间的差距就会非常大,毕竟 1的1次幂 和 10的100次幂 之间的差距太大了。
再回忆一下,我们在进行线性回归的时候,使用梯度下降法来搜索相应的结果,由于我们的数据 s c a l e scale scale 数据的分布太不均衡,会导致我们的搜索过程非常的慢,此时我们最好进行数据的归一化,也就是使用 S t a n d a r d S c a l e r StandardScaler StandardScaler,然后再送给线性回归。
回顾整个过程,我们进行了3步,多项式的特征,数据的归一化,线性回归。而 P i p e l i n e Pipeline Pipeline 方式就可以帮助我们将这三步合在一起,使得我们每一次具体调用的时候,不需要不停的重复这三步。
下面我们回到程序中。
结束
我们有了多项式回归这样一种强有力的武器,就可以非常方便的来对非线性这样的数据进行拟合,不过这个拟合的过程是有陷阱的,我们不能高兴的太早。下一篇博客将会介绍这个陷阱到底是什么?
具体代码见 42 sklearn中的多项式回归.ipynb