前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习入门 9-7 scikit-learn中的逻辑回归

机器学习入门 9-7 scikit-learn中的逻辑回归

作者头像
触摸壹缕阳光
发布2020-02-29 17:16:30
9590
发布2020-02-29 17:16:30
举报

前言

本系列是《玩转机器学习教程》一个整理的视频笔记。本小节主要介绍使用sklearn实现逻辑回归算法以及添加多项式项的逻辑回归算法,sklearn为逻辑回归自动封装了正则化,通过调整C和penalty以解决模型过拟合的问题。

a

新 的 正 则 化 表 达 式

上一小节介绍了在逻辑回归中添加多项式项能够生成相对不规则的决策边界,因而能够很好的应对非线性数据集的分类任务。不过引入多项式项可能会使模型变的非常复杂,模型越复杂越容易发生过拟合(过渡的拟合训练样本,将训练样本中的噪声也学习了,导致模型对未知样本的泛化能力降低)。通过之前的学习知道解决过拟合的问题最常规的手段就是为模型添加正则项。

为模型添加正则项就是在原来损失函数J(θ)的基础上添加一个新的项。

▲L1和L2正则化

新添加的这一项可以是一个α×L1,此时就是L1正则项,也可以是α × L2,此时就是L2正则项。使用这些添加正则项的新式子作为整体的损失函数来进行优化,在优化的过程中一方面涉及到原来的损失函数J(θ)(分类的准确度),另一方面涉及到正则化项(限制所有参数θ值不要太大,L1正则项让一部分系数θ为0,L2正则项让所有的系数θ尽可能的小),超参数α用于调节损失函数J(θ)和正则化项之间的重要程度。

  • 当超参数α值越大,表示在优化过程中正则项比较重要,优先优化正则项,对于L1正则项尽量多的将所有的参数θ值变为0,对于L2正则项则是尽量将所有参数θ值变小;
  • 当超参数α值越小,表示在优化过程中损失函数J(θ)比较重要,优先优化J(θ),也就是尽可能将损失函数J(θ)变的越小越好;

在这一小节来看一个新的正则化表示方式:

▲两种正则化表示方式

上图中左边就是原来的正则化表示,右边是新的正则化表示。新旧两种不同的正则化表示主要的区别在超参数的位置上,但是它们的作用是一样的,都是用来调节J(θ)和正则项在优化过程中的重要程度。新的正则化表示将超参数放在了J(θ)的前面,通常称为C。

  • 当超参数C值越大,表示在优化过程中J(θ)比较重要,优先优化J(θ),也就是尽可能将损失函数J(θ)变的越小越好;
  • 当超参数C值越小,表示在优化过程中正则项比较重要,优先优化正则项,对于L1正则项尽量多的将所有的参数θ值变为0,对于L2正则项则是尽量将所有参数θ值变小;

总的来说,在J(θ)损失函数前面加上C从某种程度上可以理解成在正则项前面加上的超参数α的倒数,从上面的分析可以看出来,C和α在确定J(θ)和正则项的重要程度上效果是相反的(C越大,J(θ)越重要;α越小,J(θ)越重要)。

sklearn中实现逻辑回归以及后续会介绍的SVM在进行模型正则化的时候,更偏向于使用在J(θ)前面加上超参数C的这种新的正则化表达式。这是因为对于像逻辑回归和SVM等这些比较复杂算法,sklearn在实现的时候强迫我们使用模型正则化,而在J(θ)前面加入超参数C的方式让我们在实现算法的时候不得不进行模型的正则化。

▲sklearn使用CJ(θ) + L1或L2的方式

b

使 用 sklearn 实 现 逻 辑 回 归

接下来首先使用sklearn来实现逻辑回归,然后实现引入多项式的逻辑回归。在这一小节依然使用我们自己生成的数据集进行试验。

生成的数据集中X是通过均值为0方差为1的正太分布随机生成的200个样本,其中每一个样本都有两个特征x0和x1,而对应生成的类别标签y与前几个小节有所不同,它是将样本的第一个特征x0的平方加上第二个特征x1,然后让结果小于1.5(此时的样本分布曲线是一个抛物线),得到的布尔向量依然需要转换成对应的整型向量,其中True变成1False变成0,最终的类别标签y是一个只有0,1的向量。

由于这一小节还需要进行模型正则化的实验,所以我们随机的选择20个样本点,将这些样本点的类别强制变为1,实质上就是人为的添加了一些噪声。接来下就可以绘制一下我们自己生成的样本分布。

橙色的点在整体上呈现抛物线的形状,其中还有一些比较杂乱的点,这些点就是前面加入的噪声。在使用sklearn实现逻辑回归之前,先将数据集划分为训练集和测试集。

接下来就可以使用sklearn来实现逻辑回归:

使用逻辑回归进行分类时候的决策边界只能是一根直线,这也说明了逻辑回归本质还是一种线性模型,因此需要在linear_model模块下导入LogisticRegression类。之后的操作和其它算法一致,实例化对象,调用fit函数拟合训练数据集。

调用fit函数的时候会返回对象本身,此时打印输出的对象字符串中包含着创建对象的参数信息。在这些参数中penalty(处罚的意思)参数值为字符串"L2",由于我们在创建对象的时候没有对penalty进行赋值,因此这里的返回的是默认值,也就是说sklearn默认使用的是L2正则项来对模型进行正则化,与此同时参数C(权衡J(θ)和正则项的重要程度)默认值为1.0,这里的C就是在J(θ)前面添加的超参数C。

接来下看看此时模型在训练集上的预测结果是怎样的?

训练好的模型在训练数据集上的分类准确率为80%左右,很显然这不是一个非常高的结果。当然结果非常正常,因为我们自己生成的样本分布呈现抛物线的形状,而逻辑回归的决策边界是一根直线,在处理非线性数据的分布肯定不会得到比较好的分类效果。

在没有看见过的测试集上看一看模型的预测结果也就是模型的泛化能力是怎样的?

最终模型在测试集上的分类准确度为86%左右。下面绘制一下此时的决策边界。

上面的图示就是逻辑回归算法针对现在的样本数据得到的决策边界。

接下来使用sklearn实现添加多项式项的逻辑回归算法对上面的样本数据进行试验。

同样在训练集和测试集上分别看一看模型的分类准确度。

无论是在训练集上还是在测试集上,模型整体的表现非常好。接下来绘制一下添加多项式项后的逻辑回归算法的决策边界。

此时的决策边界能够比较准确的对所有样本进行分类。

c

模 型 正 则 化 超 参 数 C

为了验证模型正则化超参数C的效果,先将前面添加多项式项的逻辑回归算法中的degree值设置大一点为20,故意让模型过拟合。

模型在训练集上的准确度为94%,在测试集上的分类准确度为92%,相比于上面的结果稍微低了一点,这是因为我们创建的数据集无论是数据的维度还是整个数据集的分布情况相对都比较简单,所以这个过拟合不够明显,不过通过这个数据我们依然可以看出来它有一定过拟合现象。接下来绘制一下此时的决策边界。

上图中的决策边界明显比较不规则,弯弯曲曲的,模型发生了过拟合。

接下来就可以尝试使用C这个参数来进行模型正则化。因为需要传入参数C,所以这里覆盖一下上面实现的函数,新加入一个参数C。

degree值还设置为20,将J(θ)前面的超参数C先设置为0.1,这相当于让模型正则化的项起更大的作用,而分类的准确度相应的损失函数起的作用小一些。

模型在训练集上的分类准确度为85%,在测试集上的分类准确度依然是92%,由于我们的数据比较简单,所以这个效果并不是太明显,不过通过这个途径也可以看出当C = 0.1的时候模型在测试集上的分类准确度也就是模型泛化能力并没有降低。相应的绘制一下此时模型的决策边界。

虽然此时的决策边界看起来依然很奇怪,有两个部分,但是和C为默认值1.0时候的决策边界相比,不那么弯弯区区了,中间部分看起来更倾向于degree为2的决策边界。

前面默认使用的都是L2正则项,接下来尝试一下使用L1正则项,首先还是要覆盖一下函数,为函数添加新的参数penalty。

这里还将degree设置为20,C设置为0.1,不过这里使用L1正则项,也就是将penalty设置为'l1'。

模型在训练集上的分类准确度为83%,在测试集上的分类准确度为90%,看起来比较低,依然是我们的这个数据集比较简单,所以这个过拟合发生的不够明显,反而我们使用正则项之后,分类的准确度降低了。不过在这里,我们主要通过决策边界来看正则化的效果,下面绘制一下此时的决策边界。

上面的决策边界已经非常接近原始生成数据的形状。当degree传入20的时候,会有很多多项式项,而L1正则化做的事情就是让这些多项式项前面的系数变为0,使得决策边界不会弯弯曲曲,也不会像L2正则项那样产生很奇怪的决策边界。

由于我们本身知道数据是使用二阶的多项式生成的,所以在degree为20的时候再怎么使用正则化的方式都不能达到degree为2的分类效果。当然这里只是一个向大家展示模型正则化意义的例子。在面对真实数据的时候是不知道此时的degree阶数取多少最合适,对于degree、C以及penalty这些超参数都需要使用网格搜索这样的方式来寻找最适合此时样本数据的参数值。

这一小节介绍了如何在sklearn中使用逻辑回归算法,同时也注意到了sklearn中的LogisticRegression类自动封装上了模型正则化的功能,我们使用的时候只需要调整对应的C以及penalty超参数即可。在开始介绍逻辑回归算法的时候提到过逻辑回归只能解决二分类问题,不过我们可以通过一些技术手段来扩展逻辑回归算法应用到多分类任务中,下一小节将会介绍如何让逻辑回归算法解决多分类的问题。

推荐阅读

(点击标题可跳转阅读)

机器学习入门 8-8 模型泛化与岭回归

机器学习入门 8-9 lasso

机器学习入门 9-5 决策边界

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI机器学习与深度学习算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档