课前测验

本文所用数据免费下载

在本文中,你将学习:

0 用于数据可视化的新库

1 逻辑回归原理及技术

目录

一、内容介绍

二、理论知识

1.分类与回归的区别

2.逻辑回归与其他回归的区别

3.逻辑回归的数学原理

①逻辑回归基本原理

②sigmod函数

③分类阈值选择

④其他逻辑回归分类

4.精度评定

①混淆矩阵

②常用精度系数

③ROC曲线与AUC系数

三、项目实战

1.提出问题

2.数据查看及整理

3.数据可视化

①网格散点图

⑥分簇散点图

③小提琴图

4.模型构建及特征选择

①数据拆分

②构建模型

5.精度评定

①构建混淆矩阵

②计算常用性能指标

③ROC曲线与AUC系数

四、全文总结


一、内容介绍

在前面的文章中,我们介绍了不同线性回归模型的数学原理,可视化了数据间的相关性,并构建了6个不同的模型,将相关系数提升到了0.96。在本文中,我将介绍逻辑回归模型,它常常被用于二分类问题。诸如判断邮件是否为垃圾邮件,这种疾病是否具有传染性?该客户是否会选择此产品?

二、理论知识

1.分类与回归的区别

我们可以按照提出问题的种类,将任务分为回归任务和分类任务。那这两者的区别是什么呢?

按照较官方些的说法,输入变量与输出变量均为连续变量的预测问题是回归问题,输出变量为有限个离散变量的预测问题成为分类问题。

通俗一点讲,我们要预测的结果是一个数,比如要通过一个人的饮食预测一个人的体重,体重的值可以有无限多个,有的人50kg,有的人53kg,在50和53之间也有无限多个数。这种预测结果是某一个确定数,而具体是哪个数有无限多种可能的问题,我们会训练出一个模型,传入参数后得到这个确定的数,这类问题我们称为回归问题。预测的这个变量(体重)因为有无限多种可能,在数轴上是连续的,所以我们称这种变量为连续变量。

我们要预测一个人的性别,预测他是否患有糖尿病,预测明天是否下雨,这种结果只有2个值或者多个值的问题,我们可以把每个值都当做一类,预测对象到底属于哪一类.这样的问题称为分类问题.如果一个分类问题的结果只有两个,比如"是"和"否"两个结果,我们把结果为"是"的样例数据称为"正例",将结果为"不是"的样例数据称为"负例",对应的,这种结果的变量称为离散型变量。

2.逻辑回归与其他回归的区别

从名字来理解逻辑回归。在逻辑回归中,逻辑一词只是logistics 的音译字,并不是因为这个算法是突出逻辑的特性。

至于回归,我们前一段提到回归任务是结果为连续型变量的任务,逻辑回归是用来做分类任务的,为什么叫回归呢?那我们是不是可以假设:逻辑回归就是用回归的办法来做分类呢

假设刚刚的思路是正确的,逻辑回归就是在用回归的办法做分类任务,那有什么办法可以做到呢,此时我们就先考虑最简单的二分类:结果是正例或者负例的任务。

按照多元线性回归的思路,我们可以先对这个任务进行线性回归,学习出这个事情结果的规律;比如根据南瓜的大小、销售日期、产地等条件预测南瓜颜色为"橙色"或者"非橙色",可以先通过回归任务来预测南瓜颜色的预测值大小,取一个平均值作为阈值

假如平均值为Y,颜色大小超过Y为橙色,小于等于Y的,为非橙色。这样通过线性回归加设定阈值的办法,就可以完成一个简单的二分类任务。如下图1所示:

图1 逻辑回归

3.逻辑回归的数学原理

在前文中我们已经知道其他线性回归的数学原理,通过拟合直线方程,或者曲线方程来预测回归值,但逻辑回归本身是为了分类,它的数学原理与前者稍有不同,我将详细讲解。

①逻辑回归基本原理

选择两个与问题相关性较高的特征,进行逻辑回归。寻找数据的相关性方法我在上一篇文章中有提到。

图2 二分类

上图中,橙色的线是拟合出来的回归线,橙色样本区域是“橙色”南瓜,蓝色样本区域是“非橙色”南瓜。绿色直线是我们用于分类的阈值,阈值左边的区域为是“橙色”南瓜,右侧区域是区域是“非橙色”南瓜。只有少数样本被分类错误。

预测南瓜颜色本质还是一个回归问题,得到的结果也是一个连续变量。通过设定阈值,就成功将回归问题转化为了分类问题。但是,这样做还存在一个问题:

我们上面的假设依赖于所有的南瓜颜色都不会特别离谱,如果有多个异常值(错分)在我们的例子中,阈值就很难设定。

继续取平均大小为阈值,则会出现下图3的情况:

图3 错分过多

其中大量样本被错误分类,这样的分类精度对问题的解决已经失去了意义。

从上边的例子可以看出:使用线性的函数来拟合回归线后取阈值的办法是行不通的。原因在于:

拟合的函数太直,离群值(也叫异常值)对结果的影响过大,但是我们的整体思路是没有错的,错的是用了太“直”的拟合函数,如果我们用来拟合的函数是非线性的,不那么直,将异常值的影响降到最低是不是就好一些呢?就像前文中回归一样思考!

所以我们下面来做两件事:

0 找到一个不那么直的拟合函数

1 选定一个阈值

②sigmod函数

逻辑回归常用的拟合函数是Sigmoid函数,Sigmoid函数是一个在生物学中常见的S型函数,也称为S型生长曲线。 在信息科学中,由于其单增以及反函数单增等性质,Sigmoid函数常被用作神经网络的激活函数,其将变量映射到[0,1]之间。其公式如下:

当x趋近于负无穷时,y趋近于0;当x趋近于正无穷时,y趋近于1;当x=0时,y=1/2。

该函数具有很强的鲁棒性(鲁棒是Robust的音译,指健壮和强壮),它将函数的输入映射到了输出的(0,1)之间使其具有概率意义。简而言之:将一个样本输入到我们学习到的函数中,输出0.7,意思就是这个样本有70%的概率是正例,1-70%就是30%的概率为负例

查看其图像,我们可以发现,增加总输入,可以使Sigmoid函数越来越趋近于阈值函数,或者叫阶梯函数。将总输入变为原来的5倍,则Sigmoid函数变为如下的形式:

图4 Sigmoid函数图像

因此,我们选择Sigmoid函数作为逻辑回归函数以后,再根据错分率调整Sigmoid函数的参数来选择阈值,就能大幅度降低错分的影响。

③分类阈值选择

采用Sigmoid函数作为回归函数的情况下,当我选阈值为0.5,那么小于0.5的一定是负例,哪怕他是0.49。此时我们判断一个样本为负例一定是准确的吗?

不一定,因为它还是有49%的概率为正的。但是即便正例的概率为0.1,我们随机选择1万个样本来做预测,还是会有接近100个预测它是负例。

所以无论怎么选,误差都是存在的。我们选定阈值的时候就是在选择可以接受误差的程度。

我们现在知道了Sigmoid函数预测结果为一个0到1之间的小数,选定阈值的第一反应,大多都是选0.5,其实实际工作中并不一定是0.5,阈值的设定往往是根据实际情况来判断的。并不会有一个万能的答案。

④其他逻辑回归分类

还有其他类型的逻辑回归,包括多项式和序数:

0 多项式,涉及多个类别 - “橙色,白色和条纹”

1 序数,它涉及有序的类别,如果我们想要按逻辑顺序对结果进行排序,就像我们的南瓜按有限数量的大小(mini,sm,med,lg,xl,xxl)排序一样,会很有用

4.精度评定

①混淆矩阵

混淆矩阵是针对机器学习分类问题的性能度量,其中输出可以是两个或更多类。该表包含4种不同的预测值和实际值组合。

“混淆矩阵”(或“误差矩阵”)是一个矩阵表,用于表示模型的分类结果的分布,从而衡量预测的准确性。

图5 混淆矩阵

其中的参数意义如下:

真正(True Positive , TP)被模型预测为正的正样本;

假负(False Negative , FN)被模型预测为负的正样本;

假正(False Positive , FP)被模型预测为正的负样本;

真负(True Negative , TN)被模型预测为负的负样本。

相关延伸参数计算公式为:

P = TP + FP

N = FN + TN

T = TP + FN

F = FP + TN

②常用精度系数

1 准确率(Accuracy)

公式:

  Acc = ( TP + TN ) / ( P +N )

参数意义见上段,准确率的确可以在一些场合,从某种意义上得到一个分类器是否有效,但它并不总是能有效的评价一个分类器的工作。对于正负样本不均衡的情况下,accuracy作为评判标注不合适。

2 精确率(Precision)

公式:

Pec = TP / (TP + FP)

指的是所有被判定为正类(TP+FP)中,真实的正类(TP)占的比例。

3 召回率(Recall)

公式:

Rec = TP / (TP + FN)

指的是所有真实为正类(TP+FN)中,被判定为正类(TP)占的比例。

4 F1分数(F1-score)

公式:

F1 = (2 * Pec * Rec) / (Pec + Rec)

F1是Precision和Recall加权调和平均,它综合考虑了Pec和Rec的结果,当F1较高时则能说明试验方法比较有效。

其他指标:

0 支持度(Support):表示某个项集出现的频率,也就是包含该项集的交易数与总交易数的比例。

1 Macro Avg:计算每个标签的未加权平均指标,而不考虑标签不平衡。

2 Weighted Avg:计算每个特征标签的平均指标,通过按其支持(每个标签的真实样本数)对标签不平衡进行加权来考虑标签不平衡。

③ROC曲线与AUC系数

ROC的全名叫做Receiver Operating Characteristic,中文名字叫“受试者工作特征曲线”,其主要分析工具是一个画在二维平面上的ROC 曲线。

图6 ROC曲线

如图,平面的横坐标是false positive rate(FPR),纵坐标是true positive rate(TPR)。对某个分类器而言,我们可以根据其在测试样本上的表现得到一个TPRFPR点对。这样,此分类器就可以映射成ROC平面上的一个点。调整这个分类器分类时候使用的阈值,我们就可以得到一个经过(0, 0),(1, 1)的曲线,这就是此分类器的ROC曲线。

一般情况下,这个曲线都应该处于(0, 0)和(1, 1)连线的上方。因为(0, 0)和(1, 1)连线形成的ROC曲线实际上代表的是一个随机分类器。

虽然用ROC 曲线来表示分类器的性能很直观好用。可是,人们总是希望能有一个数值来标志分类器的好坏。于是Area Under roc Curve(AUC)就出现了。顾名思义,AUC的值就是处于ROC 曲线下方面积的大小。通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的性能。AUC(Area Under roc Curve)是一种用来度量分类模型好坏的一个标准。

Scikit-learn库中我们可以通过调用roc_curve()函数和roc_auc_score()函数来实现ROC曲线的绘制与AUC系数的计算。

三、项目实战

1.提出问题

在了解了南瓜数据结构之后,我们现在对它足够熟悉,我们意识到我们可以使用一个二元类别:color

在给定某些变量的情况下,让我们尝试构建一个逻辑回归模型来预测给定的南瓜可能是什么颜色(橙色)。

机器学习系列7 基于Python的Scikit-learn库构建逻辑回归模型相关推荐

  1. R语言glm拟合logistic回归模型实战:基于glm构建逻辑回归模型及模型系数统计显著性分析、每个预测因子对响应变量的贡献

    R语言glm拟合logistic回归模型实战:基于glm构建逻辑回归模型及模型系数统计显著性分析.每个预测因子对响应变量的贡献 目录

  2. 机器学习系列8 基于Python构建Web应用以使用机器学习模型

    课前测验 本文所用数据及源码免费下载 目录 一.内容介绍 二.应用构建 1.构建机器学习Web应用的思考 ①思考问题 ②几种构建机器学习模型 Web 应用的方法. 2.工具安装 3.数据预处理 ①数据 ...

  3. python自动测试优惠券过期_python逻辑回归模型-使用优惠券预测

    最近疫情严重,宅在家里给自己充电,修改简历,心里还是有点担忧的,疫情肯定会对招聘产生影响,今年春招的竞争肯定要比以往几年都要大. 于是打算在我的知乎专栏里也囤点"货". #希望大家 ...

  4. 【ML】基于机器学习的心脏病预测研究(附代码和数据集,逻辑回归模型)

    心脏病是人类健康的头号杀手, 全球大约1/3的人口死亡是由心脏病引起的.而我国,每年大概有几十万人口死于心脏病.如果我们可以通过提取人体相关的指标(既往病史.家族病史.血压情况.血糖情况等等),通过数 ...

  5. R语言构建ElasticNet回归模型实战:基于mtcars数据集

    R语言构建ElasticNet回归模型实战:基于mtcars数据集 目录 R语言构建ElasticNet回归模型实战:基于mtcars数据集 #ElasticNet回归

  6. python交叉验证函数_python – 在sklearn中使用交叉验证和AUC-ROC作为逻辑回归模型...

    我正在使用sklearn包来构建逻辑回归模型,然后对其进行评估.具体来说,我想使用交叉验证,但无法通过cross_val_score函数找出正确的方法. 根据我看到的documentation和exa ...

  7. python笔迹识别_python_基于Scikit learn库中KNN,SVM算法的笔迹识别

    之前我们用自己写KNN算法[网址]识别了MNIST手写识别数据 [数据下载地址] 这里介绍,如何运用Scikit learn库中的KNN,SVM算法进行笔迹识别. 数据说明: 数据共有785列,第一列 ...

  8. 机器学习系列4 使用Python创建Scikit-Learn回归模型

    本文中包含的案例jupyter笔记本可在我的资源中免费下载: 机器学习系列4 使用Python创建Scikit-learn线性回归模型.ipynb 图1 使用Python和Scikit-learn库实 ...

  9. 人脸识别学习一(Keras: 基于 Python 的深度学习库)

    只是把一些文字部分复制出来方便看,完整还是参考源地址,参考文章https://keras.io/zh/ 写在前面: 第一次接触Keras,用自己的话简单概括一下什么事Keras,(不准确之处欢迎批评指 ...

最新文章

  1. percona xtrabackupd定期做全备,增量备份shell脚本
  2. 双系统隐藏d盘linux,如何实现双系统的相互隐藏
  3. 从DUMP函数说开去
  4. qt找不到打印机_Qt无法调起打印机问题(QPrintDialog: Cannot be used on non-native printers)解决...
  5. python基础之内置异常对象
  6. 创建一个发布型的空白站点
  7. 关于nginx keep-alive 参数的验证和心得
  8. Easyui 弹出加载中的遮罩的两种方法
  9. 一秒钟世界上会发生多少事_一秒之中会发生什么
  10. 【LeetCode】题解合集(JavaScript版)
  11. 36-基于51单片机的LED彩灯控制器设计
  12. C语言--《C专家编程》C语言申明的优先级规则
  13. 百度360争推1TB永久网盘
  14. PHP将PPT文件转成图片
  15. AM调制解调matlab实验报告,基于MATLAB的AM调制解调系统仿真报告
  16. 绘制自己的人际关系图_matlab能绘制人际关系网络图吗?
  17. 说说Stack Overflow和Quora
  18. vivox70pro怎么拍出好看的月亮
  19. Python分析抖音数据,让视频爆起来!
  20. java swing 多行文本,Java Swing JTextArea

热门文章

  1. 快速学习java学习的秘籍
  2. Android7.0上Gallery2中长按缩略图后选择edit会闪退的问题修复
  3. 关闭脚本运行慢的提示
  4. 联通4g满格但是网速慢_联通手机上网慢 联通4g满格但是网速慢
  5. 帕金森定律在时间上的运用—《可以…
  6. 嵌入式Linux能提供最小延时,嵌入式Linux的实时性分析和改进
  7. 制造“空间魔术”:为未来取暖的腾讯多媒体实验室
  8. 自考计算机专业哪个最容易通过,自考哪个专业比较容易通过
  9. NBUT - 1457 Sona (莫队)
  10. PCIe系列专题之三:3.0 数据链路层概述