机器学习入门 9-6 在逻辑回归中使用多项式特征

2020-03-02 11:17:42 浏览数 (1)

人生就像一场旅行,不必在乎目地,在乎的是沿途的风景,以及看风景的心情。

全文字数:2957字

阅读时间:10分钟

前言

本系列是《玩转机器学习教程》一个整理的视频笔记。本小节主要介绍在逻辑回归算法中使用多项式特征以解决非线性数据的分类问题,并通过具体的编程实现。

a

在 逻 辑 回 归 中 使 用 多 项 式 特 征

上一小节介绍了对于分类问题比较重要的概念决策边界。逻辑回归的决策边界本质上相当于在特征平面上找到一根直线(逻辑回归的决策边界是一根直线),用这根直线分割所有样本相对应的两个类别。

▲逻辑回归算法以及决策边界

通过上面的图示也可以看出为什么逻辑回归算法只能解决二分类问题,因为逻辑回归的决策边界(也就是这根直线)只能将特征平面分成两个部分。上面的样本分布很简单,但是实际处理分类的样本分布有很多种情况,比如下面这种样本分布的情况:

▲非线性分布样本点

上图依然是在一个特征平面中分布了一些样本点,其中蓝色的样本点属于某一类,红色的样本点属于另外一类。由于这些蓝红相间的样本点呈现非线性的分布,因此不可能再通过一根直线来将这些样本点划分。事实上,对于上面的非线性分布的样本点可以非常容易的用一个圆形的决策边界来将这些样本点分割成两个部分。

▲使用圆形当做决策边界

到目前为止逻辑回归算法是无法得到这样一个圆形的决策边界。我们在解析几何中学到过,这种圆形的方程为x1^2 x2^2 - r^2 = 0,对于上面这种非线性分布的样本,我们的决策边界就应该是这种圆形(r用来描述圆的半径),我们能不能通过改进逻辑回归算法,让逻辑回归算法也能够学习到这样的决策边界?

回忆一下,其实在线性回归的时候做过近乎同样的事情,解决非线性数据的回归问题,为线性回归引入多项式项。如果我们把上面圆形决策边界表达式中x1方整体看作是一个特征,x2方整体看作是另外一个特征,那么相当于我们学习到了x1方前面的系数为1,x2方前面的系数也为1,相应的还有一个θ0为-r方,此时得到的这个决策边界针对x1方和x2方还是一个线性的决策边界,但是针对x1和x2这两个特征来说,它就变成了圆形非线性的决策边界了。换句话说,我们可以借鉴从线性回归转换为多项式回归的思路,为逻辑回归算法添加多项式项。

这里为了方便举了一个样本分布为圆形的例子,不过x1方和x2方的前面系数可以是不同的值,不同的系数对应着不同的椭圆形,与此同时,我们还可以添加x1x2这样的二次项,此时的圆心不一定在(0, 0)的位置,可以在坐标轴的任意位置。多项式项的degree可以是任意的正整数值,所以相应的可以构造出任意形状的决策边界。接下来就来使用添加多项式项的逻辑回归算法对上面非线性的数据进行编程实验。

b

具 体 编 程 实 现

创造虚拟的样本数据,X是从均值为0方差为1的正太分布中采样的200个拥有两个特征的样本点,y为0,1的类别标签向量,它是经过两个样本特征平方和小于1.5的布尔型True,False向量转换为整型0,1向量得到。

其中橙色的点是那些y = 1的样本点,蓝色的点是那些y = 0的样本点。

首先尝试一下,在不添加多项式项的情况下分类上面非线性分布的样本点,得到的分类结果以及决策边界是怎样的?

这里使用我们自己封装的LogisticRegression类,为了简单没有将样本划分成训练集和测试集,直接将整个数据集进行训练,在整个数据集上的分类准确度为60.5%,显然这个准确率比较低。

如果要绘制决策边界,可以直接使用上一小节的绘制函数。此时有了训练好的模型,接下来只需要传入axis坐标轴的范围。观察上面非线性样本分布图示中x和y轴范围都在(-4, 4)之间,因此将[-4, 4, -4, 4]传入绘制函数中。同时为了更清晰,将这些样本坐标点也绘制出来。

没有添加多项式的逻辑回归算法处理非线性数据的决策边界如上图所示。逻辑回归算法本身就是使用一根直线来对特征平面进行划分的,对于上面这样的非线性数据这根直线决策边界显然有非常多的错误分类,所以最终的模型的分类准确度只有60%左右。

接下来尝试为逻辑回归算法添加多项式项,回忆一下之前在为线性回归算法添加多项式项的时候,使用了管道Pipeline。我们同样使用管道Pipeline的方式为逻辑回归添加多项式项。

Pipleline管道中传入的是一个列表,列表中每一个元素代表一个步骤用一个元组来表示。其中元组中有两个元素,第一个元素用一个字符串来描述这一步具体做什么(清晰明了的命名即可),第二个元素就是相对应的操作类的实例化。为逻辑回归算法添加多项式项和线性回归类似也分成三个步骤:

  1. 实例化多项式类,将这个步骤命名为"ploy";
  2. 由于多项式对特征之间差值比较敏感,因此第二步添加标准化的步骤;
  3. 最后一步就是添加逻辑回归这个过程,因此最后一步来实例化逻辑回归类。

有了为逻辑回归添加多项式项的函数,接下来可以直接调用上面的函数,将degree值设置为2,返回的是管道对象。通过管道对象来拟合fit样本。

这里值得一提的是,此时的LogisticRegression类不是Sklearn提供的,而是我们自己封装实现的。不过通过上面输出结果可以发现,我们自己实现的这个逻辑回归类可以毫无障碍的传入到Sklearn管道类中,这是因为我们自己实现的逻辑回归类遵循Sklearn的设计标准的,对于Scklearn中每一个机器学习算法的标准就是要有构造函数、拟合fit函数、预测predict函数以及评分score函数等等。如果我们完全遵守这种设计标准,在使用Sklearn的其它模块的时候,Sklearn会认为这个模块和Sklearn自己定义的模块是一样的,它就能无缝的衔接起来,这也是为什么这个课程要全部使用Sklearn的标准来实现算法的原因。当然现在我们学习的还比较浅显,所以能够利用上这个机制优点的地方可能主要就是在使用管道的这部分,但是以后随着深入使用更多方法来解决复杂的问题,会慢慢的体会到这种机制的优点。

看看引入多项式的逻辑回归算法的分类准确度是多少?

分类准确度为95%,相比于只使用逻辑回归的60.5%要好很多。接下来绘制对应的决策边界。

此时的决策边界是一个圆形,它能够更好的对这样的非线性数据进行划分。

当然实际的情况下遇到的数据集分布不可能是这样的一个圆形,肯定会有各种奇奇怪怪的形状,所以degree这个参数就需要选择其它的一些值。在这里,我们继续基于这个圆形分布的数据集进行实验,将degree参数设置的大一些,设置为20。

绘制一下degree为20的决策边界。

对于上面的决策边界,两边非常奇怪。当然了,由于我们这个数据集很简单,即使对于degree为20这么大的参数值,决策边界也没有变的太离谱。出现这种情况当然不是我们想要的,而出现这种情况的根本原因就在于degree参数值设置的太大了,导致决策边界的形状非常的不规则。当添加多项式的逻辑回归中的多项式阶数也就是degree值越大,模型就会越复杂,模型更容易过渡的拟合训练数据,导致过拟合,而对应的决策边界就会越来越不规则。

前面学习了解决过拟合问题的一些思路,可以通过减小degree值进而简化模型,除此之外,还有一个非常通用的思路,就是进行模型正则化。实际上在使用逻辑回归算法进行分类的时候,由于真实的分类任务中很少有用一根直线就能够进行分类的情况,通常需要添加多项式项,那么此时模型的正则化就变的必不可少了。

在下一小节将会看到在逻辑回归算法中使用模型正则化这样的方式,与此同时,来看一下Sklearn中是如何封装逻辑回归算法的。通过Sklearn中对逻辑回归的封装就会发现,Sklearn建议我们使用逻辑回归算法的时候进行模型正则化的操作。

0 人点赞