前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >轻松玩转 Scikit-Learn 系列 —— 逻辑回归是回归 ?

轻松玩转 Scikit-Learn 系列 —— 逻辑回归是回归 ?

作者头像
小小詹同学
发布2018-12-27 11:38:43
8190
发布2018-12-27 11:38:43
举报
文章被收录于专栏:小詹同学小詹同学

加星标 ,不迷路 !?

前言

逻辑回归,咋一听这名字,真的跟一个正儿八经的回归模型似的,实际上从原理上讲他是一个如假包换的分类器,英文名是 Logistics regression,也叫 logit regression,maximum-entropy classification,或者 log-linear classifier。

在逻辑回归中,会将样本的所有特征与样本属于某个种类的概率联系起来,即使每个特征都对应一个模型参数,通过训练不断修正模型参数,最后使用 logistic function (也叫 sigmoid 函数,该函数使输入从(-inf, inf)映射到输出(0,1),其图形如下)建模求出样本属于某个种类的概率。

下图是 Kaggle 上出现的统计在各个行业使用机器学习方法的使用率的情况。从图中可以看出,逻辑回归以领先第二名13.6%的绝对优势牢牢地占据了第一位。逻辑回归之所以能够坚挺在 C 位,绝对有与之相匹配的实力,我们会在代码实战中看到相关证明。

在 scikit-learn 中封装的逻辑回归,可以用来解决二分类和基于 OvR 和 OvO 的多分类问题。逻辑回归的损失函数是一个凸函数,存在全局最优解,为避免模型过拟合,常需要对模型进行正则化。所以,scikit-learn 中逻辑回归的实现的损失函数常加有惩罚项来对模型正则化。加上 L1 正则化项的损失函数为:

加上 L1 正则项的损失函数为:

实战

下面我们就用代码具体的展示下 scikit-learn 中,逻辑回归的使用、性能、以及进行一定的调参后的表现。

默认模型的表现好像很差劲呐,还不如去抛硬币呢!那我们接下来就介绍下 scikit-learn 中封装的逻辑回归的一些超参数,并进行一定的调整,看看能提高多大程度的性能。

可调整的超参数:

penalty: str 类型,可取 ‘l1’ 或者 ‘l2’,默认值为 ‘l2’,用于明确损失函数惩罚项的正则类型;

tol: float 类型,默认值为 1e-4,表示容差,用于决定是否停止搜索;

C: float 类型,默认值为1.0,表示正则项的系数,用来决定模型需要正则化的程度;

solver: str 类型,默认取 'liblinear',可取{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’} 中任一个,表示在优化过程中所使用的算法;

max_iter: int 型,默认取100,表示在优化收敛的过程中最大迭代的次数;

更多超参数,更详细的说,请小伙伴们查阅官方文档。我们先变化下两个超参数,令 C=0.1,penalty='l1' 试试:

这精度还是不行,稍微分析下数据可知,样本的标签值是与样本的特征有多项式关系,这就很容易想到可以用 scikit-learn 中的 PolynomialFeatures 类对数据进行预处理,这个过程可以用 Pipeline 进行简化处理。实现如下:

这回还不错,模型的精度达到了97%,为了进行比较,我们又引入两个其他模型———kNN 和 ANN,虽然都有两个 NN ,但这两个模型的确是没什么血缘关系,唯一的共同点估计就是都在分类领域有着不错的性能了吧!kNN 是 k 近邻算法,ANN 是人工神经网络,下面我们先看下 kNN 的表现。

kNN 精度还不错,再看 ANN 的:

经过100轮(EPOCHES=100)的训练,ANN的精度为 85%,还行,但不是特别的出色,相比已经达到百分之九十多的 kNN 和多项式回归来说。不过当训练500轮时,模型的准确率可以达到100%,但随之增长的是计算代价。

这次分享就到这里,小伙伴们下次再见。

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

本文分享自 小詹学Python 微信公众号,前往查看

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

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

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