公号:码农充电站pro

主页:https://codeshellme.github.io

上一篇文章介绍了线性回归模型,它用于处理回归问题。

这次来介绍一下 Logistic 回归,中文音译为逻辑回归,它是一个非线性模型,是由线性回归改进而来(所以逻辑回归的名字中带有“回归”二字)。

虽然 Logistic 回归的名字中也有回归二字,但是该算法并非用于回归问题,而是用于处理分类问题,主要用于处理二分类问题,也可以用于处理多分类问题。

1,Logistic 回归模型

Logistic 回归模型将一个事件出现的概率适应到一条S 型曲线上,这条曲线称为 Logistic 曲线

Logistic 回归函数也叫做 Sigmoid 函数,其基本形式如下:



其中:

  • g(z) 的范围为 (0, 1)
  • z 的范围为 (-∞, +∞)

g(z) 公式中的自变量 z 就是我们之前介绍的线性模型公式:

2,画出 Logistic 曲线

NumPy 库中的 linspace(start, stop, num) 方法在 [start, stop] 范围内生成 num 个等距的数字,比如:

>>> import numpy as np
>>>
>>> np.linspace(2.0, 3.0, num=5) # 在[2.0, 3.0] 范围生成 5 个数字
array([2. , 2.25, 2.5 , 2.75, 3. ])
>>>
>>> np.linspace(2.0, 3.0, num=6) # 在[2.0, 3.0] 范围生成 6 个数字
array([2. , 2.2, 2.4, 2.6, 2.8, 3. ])

为了画出 Logistic 曲线,定义 x,y 如下:

x = np.linspace(-10, 10, 1000)     # 在[10, -10] 范围生成 1000 个数字
y = [1/(1+np.exp(-i)) for i in x] # 根据 Sigmoid 函数求出 y

Matplotlib 画出折线图:

import matplotlib.pyplot as plt

plt.plot(x, y)
plt.show()

S 型曲线如下:

其中橙色的直线是我添加上去的。从上图可以直观的看出S 型曲线的走势,当 x 值在 [-6, 6] 之外时,y 的值变化非常小。

Logistic 回归用于二分类问题时,分类为 0 和 1,当 g(z) 大于0.5 时,归入1 类;当 g(z) 小于0.5 时,归入0 类。

3,Logistic 回归的实现

sklearn 库中的 LogisticRegression 类是Logistic 回归的实现。

LogisticRegression 类的原型如下:

LogisticRegression(penalty='l2',
dual=False, tol=0.0001, C=1.0,
fit_intercept=True, intercept_scaling=1,
class_weight=None, random_state=None,
solver='lbfgs', max_iter=100,
multi_class='auto', verbose=0,
warm_start=False, n_jobs=None,
l1_ratio=None)

来看下其中比较重要的几个参数:

  • penalty:惩罚项,可取的值有 l1l2elasticnetnone,默认为 l2

    • l2:当模型参数满足高斯分布的时候,使用 l2。支持 l2 的优化方法有 newton-cgsaglbfgs
    • l1:当模型参数满足拉普拉斯分布的时候,使用 l1。在0.19 版本中,sag 支持 l1
    • elasticnet:仅 liblinear 支持 elasticnet
    • none:表示不使用正则化(liblinear 不支持)。
  • solver:代表的是逻辑回归损失函数的优化方法。有 5 个参数可选,分别为:
    • liblinear:coordinate descent (CD),坐标下降法。适用于数据量小的数据集。
    • lbfgs:为默认值,在0.22 版本中改为 liblinear
    • newton-cg:牛顿CG法。
    • sag:平均梯度下降法,适用数据量大的数据集。
    • saga:随机平均梯度下降法,适用数据量大的数据集。
  • max_iter:算法收敛的最大迭代次数,默认为 10。
  • n_jobs:拟合和预测的时候 CPU 的核数,默认是 1。

关于上面的一些参数,也可以参考这里

4,对鸢尾花数据集进行分类

下面我们使用 Logistic 回归对鸢尾花数据集进行分析。

首先加载数据集:

from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)

构建 Logistic 回归模型:

from sklearn.linear_model import LogisticRegression
clf = LogisticRegression() # 创建对象
clf.fit(X, y) # 拟合模型

对模型的准确率进行评分:

>>> clf.score(X, y)
0.97

可以看到,用 Logistic 回归对鸢尾花数据集进行分类,最终的准确率为 97%,可见效果还是不错的。

5,Logistic 回归处理多分类

Logistic 回归多用于二分类问题,但也可以用于多分类,就像上面对鸢尾花数据集的分析。要让 Logistic 回归处理多分类问题,就要做出一些改进。

一种改进方式是通过多次二分类实现多分类的目的。假如一个数据集有 N 个分类,那就需要训练 N 个二分类模型。对于一个新的特征数据,就需要用这 N 个分类器都对其进行处理,最终选择概率最大的那个分类作为多分类的结果。

另一种方法是将 Logistic 回归改进为 Softmax 回归,Softmax 回归给出的是实例在每一种分类下出现的概率,从而处理多分类任务。

6,总结

Logistic 回归模型是线性回归的改进,用于处理分类问题。实际应用中,Logistic 回归广泛用于广告系统预估点击率,生物统计等领域。

(本节完。)


推荐阅读:

线性回归-如何对数据进行回归分析

AdaBoost 算法-分析波士顿房价数据集

如何用Python 制作词云-对1000首古诗做词云分析

EM 算法-对鸢尾花数据进行聚类

Apriori 算法-如何进行关联规则挖掘


欢迎关注作者公众号,获取更多技术干货。

Logistic 回归-原理及应用的更多相关文章

  1. 机器学习(1):Logistic回归原理及其实现

    Logistic回归是机器学习中非常经典的一个方法,主要用于解决二分类问题,它是多分类问题softmax的基础,而softmax在深度学习中的网络后端做为常用的分类器,接下来我们将从原理和实现来阐述该 ...

  2. logistic回归原理和公式

    转自:http://blog.csdn.net/ariessurfer/article/details/41310525 Logistic回归为概率型非线性回归模型,是研究二分类观察结果与一些影响因素 ...

  3. Logistic回归原理及公式推导[转]

    原文见 http://blog.csdn.net/acdreamers/article/details/27365941 Logistic回归为概率型非线性回归模型,是研究二分类观察结果与一些影响因素 ...

  4. 转载:Logistic回归原理及公式推导

    转载自:AriesSurfer 原文见 http://blog.csdn.NET/acdreamers/article/details/27365941 Logistic回归为概率型非线性回归模型,是 ...

  5. 【机器学习实战】第5章 Logistic回归

    第5章 Logistic回归 Logistic 回归 概述 Logistic 回归虽然名字叫回归,但是它是用来做分类的.其主要思想是: 根据现有数据对分类边界线建立回归公式,以此进行分类. 须知概念 ...

  6. 05机器学习实战之Logistic 回归

    Logistic 回归 概述 Logistic 回归 或者叫逻辑回归 虽然名字有回归,但是它是用来做分类的.其主要思想是: 根据现有数据对分类边界线(Decision Boundary)建立回归公式, ...

  7. logistic回归和线性回归

    1.输出: 线性回归输出是连续的.具体的值(如具体房价123万元) 回归 逻辑回归的输出是0~1之间的概率,但可以把它理解成回答“是”或者“否”(即离散的二分类)的问题 分类 2.假设函数 线性回归: ...

  8. 【机器学习实战】第5章 Logistic回归(逻辑回归)

    第5章 Logistic回归 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/ ...

  9. 【Spark机器学习速成宝典】模型篇02逻辑斯谛回归【Logistic回归】(Python版)

    目录 Logistic回归原理 Logistic回归代码(Spark Python) Logistic回归原理 详见博文:http://www.cnblogs.com/itmorn/p/7890468 ...

随机推荐

  1. css3系列之text-shadow 浮雕效果,镂空效果,荧光效果,遮罩效果

    text-shadow 其实这东西,跟  box-shadow 差不多,没啥好说的不懂的话,点这里→  css3系列之详解box-shadow  . 它只有 四个参数 x(第一个值设置x位置) y(第 ...

  2. nginx学习sub_filter模块

    用户替换html中的字符 location / { root /opt/app/code/; random_index on; index index.html index.htm; sub_filt ...

  3. 【干货】linux使用nginx一个80端口部署多个项目(spring boot、vue、nuxt、微信小程序)

    本人只有一个阿里云的ip和一个已经解析过的域名,然后想用80端口部署多个项目,比如输入: www.a.com和www.b.com与www.c.com就能访问不同项目,而不用输入不同端口号区分. 1.这 ...

  4. Linux 学习笔记02丨Linux 概述、常用快捷键、apt命令

    Chapter 1. Linux 概述 Linux 是一种自由和开放源码的 Unix 操作系统, 是一个基于 POSIX 和 UNIX 的多用户.多任务.支持多线程和多CPU的操作系统.只要遵循 GN ...

  5. Matlab 条件循环函数

    条件判断 if 表达式 语句 elseif 表达式 语句 -. else 语句 end 这个与c语言不同的就是 1:要多一个end 2:还有没有括号 3:else if连在一起 for 循环 for ...

  6. Java基础教程——安装JDK

    视频讲解:https://www.bilibili.com/video/av48196406/?p=3 使用[jdk-8u144-windows-x64.exe] 下载地址: 链接:https://p ...

  7. Beta冲刺随笔——Day_Two

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Beta冲刺 作业正文 正文 其他参考文献 无 今日事今日毕 林涛: ...

  8. JZOJ8月4日提高组反思

    JZOJ8月4日提高组反思 被一堆2018&2019&2020的巨佬暴打 又是愉快的爆0的一天呢 T1 看了看题 没想法 暴力走起 求个质因数呀,二分呀-- 然后就炸了 正解预处理加二 ...

  9. Spring Boot + Redis 初体验

    本文测试环境: Spring Boot 2.1.4.RELEASE + Redis 5.0.4 + CentOS 7 让程序先 run 起来 安装及配置 Redis 参考: How To Instal ...

  10. .NET Core集成SkyWalking+SkyAPM-dotne实现分布式链路追踪

    .NET Core集成SkyWalking+SkyAPM-dotnet实现分布式链路追踪 SkyWalking是一款APM(应用性能管理),其他的还有Cat.Zipkin.Pinpoint等. 随着微 ...