本系列是《玩转机器学习教程》一个整理的视频笔记。在上一小节介绍了多项式回归的基本思想,本小节主要介绍sklearn是如何对多项式进行封装的,之后介绍一种类似Linux中"|"管道的Pipeline类。
01
sklearn中的多项式回归
同样使用上一小节具有一个特征的虚拟数据集,X以及对应的y。
在上一小节介绍的多项式回归中,我们只是在调用线性回归之前改造了我们的数据集X,在原来样本特征的基础上添加了一些多项式特征,根据sklearn的封装原则将添加多项式特征这个过程添加到了sklearn的preprocessing这个包中,在前面对数值进行归一化的时候也使用了preprocessing包,这个包中包含了对样本数据进行预处理的方法。从上一小节中也可以看出,其实多项式本质上就是为样本添加一些特征,当然这也是对样本数据集的预处理过程,因此如果想在sklearn中使用多项式回归,需要导入sklearn中的preprocessing包。
同样是对数据进行预处理的过程,因此与之前进行归一化的StandardScaler类使用方法一样。
这里需要注意创建对象的时候需要指定degree参数,这个参数表示的是要对原本的数据集最多添加几次幂的特征,在上一小节添加多项式特征的过程相当于最多添加了二次幂,因此将degree参数设置为2,原来特征是一次幂特征,之后添加二次幂的特征。
接下来打印输出看一下添加的多项式特征。
打印转换添加多项式后样本的shape,并不是100 * 2的矩阵,而是100 * 3的矩阵,打印添加多项式后样本X2的前5行:
通过sklearn的PolynomialFeatures,获得了多项式特征相应的数据集。有了多项式数据集,下面的过程就非常简单了,只需调用线性回归模型对添加多项式的数据集进行回归分析即可。
这里需要注意的打印输出的系数中第一个值为0,表示样本特征中第一列所有的数据拟合的结果为0,最终得到的系数以及截距和我们生成数据时基本吻合。
这里还需要注意一下,PolynomialFeatures这个类的使用的方式是fit之后transform,在前面StandardScaler以及PCA使用的也使用fit,transform这样类似的方式,他们的本质其实都是针对现有的样本数据X,进行相应的变形。这种类似的过程都被sklearn封装成了fit,transform的使用方法。
到现在为止举的所有例子都是针对拥有一个特征的样本数据,现在稍微复杂一下,假设此时样本数据中有两个特征。
将数据集转X换成最多包含二次幂的数据集X2。接下来打印输出一下新的数据集。
数据集的shape从原来的(5, 2)变成了现在的(5, 6)。对于这6个特征列而言:
因此对于二次幂的特征,如果原来样本中有x1和x2两个特征的话,那么最终会生成三列二次幂的特征,分别是x1的平方,x2的平方以及x1* x2。
如果量degree参数设置为3的话,添加的多项式特征就会越多。
下面来分析一下会有那些项:
也就是说原始样本经过PolynomialFeatures之后,生成的样本数据中的多项式特征将呈现指数级的增长,这样的特性本身会使PolynomialFeatures非常的强大,因为他涉及到了所有可能的多项式特征,不过与此同时也会带来一些问题,在下一小节中会介绍。
02
pipeline管道
本小模块介绍一个在具体编程实践的时候,可以非常方便的使用多项式回归的方式,也就是所谓的Pipeline。Pipeline的中文是"管道"的意思,有点类似于Linux中的"|"管道符号。
使用多项式回归的过程:
多项式回归分为多项式的特征,数据的归一化以及线性回归三个步骤。而Pipeline可以帮助我们将这三个步骤合在一起,使得我们每一次在具体的调用的时候,不需要不停的重复着三个步骤。
创建Pipeline对象的时候传入的参数是一个列表,这个列表传入的就是这个管道相应的每一个步骤对应的那个类,这个类是以元组的形式传入的,元组对应着两个元素:
使用Pipeline创建了一个多项式回归poly_reg的管道,传给poly_reg管道的数据就会沿着三步依次的进行下去,Pipeline的使用方式和sklearn中的其他算法是一样的,直接使用fit函数就可以了。使用这种管道的方式,将多项式回归的三个步骤合在了一起,可以非常方便的直接这样调用,而不用每一次都依次的进行三个步骤,相对来说还是非常方便的。
sklearn中并没有提供多项式回归相应的类,而通过Pipeline这个方式可以很方便直接的创建我们自己的多项式回归的类。在后面的课程中为了让代码更加简洁,对于多项式回归很多时候会直接使用Pipeline这种方式。有了多项式回归,就可以对非线性数据进行拟合,不过这个拟合的过程是有陷阱的,下一小节会介绍这个陷阱具体是什么,从而引出对于机器学习中最为重要的~模型泛化相关的知识。
本文分享自 AI机器学习与深度学习算法 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!