Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >[机器学习实战札记] Logistic回归

[机器学习实战札记] Logistic回归

作者头像
云水木石
发布于 2019-07-02 06:58:30
发布于 2019-07-02 06:58:30
61100
代码可运行
举报
运行总次数:0
代码可运行

这段时间里,我一直在尝试将open_nsfw加入到手机,给手机浏览器增加色情图片检测功能,这个分阶段进行,在前面的几篇文章中,都谈到了这方面的尝试:

  1. 我的第一个caffe C++程序
  2. 我的第一个caffe Android程序
  3. 利用人工智能检测色情图片

然而,当我将open_nsfw移植到手机上运行时(源码已上传码云 - https://gitee.com/mogoweb/dpexamples.git ),现实无情的击碎了我的梦想,不是因为识别效果差,而是速度太慢。我在nexus 4手机上进行了测试,检测一张图片大约需要3秒钟时间。虽然nexus 4的硬件配置现在看来有些落伍,但是3秒钟的时间还是远远超过了我的预期。要知道,加载一个网页,图片可能有十几张。网上虽然有人对caffe做了一些优化,但并非出自官方,性能和兼容性难以保证。所以这件事情先暂时搁置,正在考虑换TensorFlow,因为TensorFlow是Google出品,按理应该会对自家的Android移动平台做优化。

还是回到机器学习上来,最新学习的章节是Logistic回归。

线性回归

假设现在有一些数据点,我们用一条直线对这些点进行拟合(该线称为最佳拟合直线),这个拟合过程就称作回归。使用更加严谨的数学定义为:给定由d个属性描述的示例x=(x1;x2;…;xd),其中xi是x在第i个属性上的取值,线性模型试图学得一个通过属性的线性组合来进行预测的函数,即

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f(x) = w1x1 + w2x2 + ... + wdxd + b

线性模型形式简单、易于建模,但却蕴涵着机器学习中一些重要的基本思想。许多功能更为强大的非线性模型可在线性模型的基础上通过引入层级结构或高维映射而得。此外,由于w直观表达了各属性在预测中的重要性,因此线性模型有很好的可解释性。

吴恩达的Machine Learning课程介绍的第一个机器学习算法就是线性回归,课程非常浅显易懂,免费且有中文字母,值得学一学。

基于Logistic回归和Sigmod函数的分类

在Machine Learning课程中,对于线性回归是以房价预测为例子进行说明的,但若要做的是分类任务该怎么办?答案在广义线性模型中:只需找一个单调可微函数将分类任务的真实标记y与线性回归模型的预测值联系起来。

利用Logistic回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。

考虑二分类任务,其输出标记y = {0, 1},而线性回归模型产生的预测值z是实值,于是,我们需将实值z转换为0/1值。最理想的是“单位阶跃函数”(又称为海维塞德阶跃函数):

然而,海维塞德阶跃函数的问题在于:该函数在跳跃点上从0瞬间跳跃到1,这个瞬间跳跃过程有时很难处理。

幸好,另一个函数也有类似的性质,且数学上更易处理,这就是Sigmoid函数,计算公式如下:

当x为0时,Sigmoid函数值为0.5,随着x的增大,对应的Sigmoid值将逼近于1,而随着x的减小,Sigmoid值将逼近于0。单位阶跃函数与Sigmoid函数如下图所示,可以看出Sigmoid函数看起来很像一个阶跃函数。

梯度上升法

在线性回归中,向量w就是我们要找的最佳参数(系数),为了寻找该最佳参数,需要用到最优化理论的一些知识。

其中的一个最优化算法叫做梯度上升法。梯度上升法基于的思想是:要找到某函数的最大值,最好的方法是沿着该函数的梯度方向探寻。这段有点不太容易理解,通俗一些理解就是先给出一组w值,然后通过迭代更新这组w值,直至达到某个停止条件为止,比如迭代次数达到某个指定值或算法达到某个可以允许的误差范围。梯度上升算法的迭代公式公式如下:

注:梯度下降算法与梯度上升算法是一样的,只是公式中的加法需要变成减法。梯度上升算法用来就函数的最大值,而梯度下降算法用来求函数的最小值。

实现

《机器学习实战》一书中给出了梯度上升算法的具体实现,关于最佳参数的迭代,代码为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
h = sigmoid(dataMatrix * weights)
error = (labelMat - h)
weights = weights + alpha * dataMatrix.transpose() * error

书中并没有给出公式的推导,通常情况下,我们也不需要知道。如果需要进一步了解,可以参考Machine Learning课程。

梯度上升算法在每次更新回归系数时都需要遍历整个数据集,该方法在处理1000个左右的数据集尚可,但如果有数十亿样本和成千上万的特征,那么该方法的计算复杂度太高。一种改进方法是一次仅用一个样本来更新回归系数,该方法成为随机梯度上升算法。

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

本文分享自 云水木石 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
常见面试算法:Logistic回归、树回归
Logistic 回归 或者叫逻辑回归 虽然名字有回归,但是它是用来做分类的。其主要思想是: 根据现有数据对分类边界线(Decision Boundary)建立回归公式,以此进行分类。
机器学习AI算法工程
2019/10/28
7530
常见面试算法:Logistic回归、树回归
Logistic回归基础篇之梯度上升算法
本文从Logistic回归的原理开始讲起,补充了书上省略的数学推导。本文可能会略显枯燥,理论居多,Sklearn实战内容会放在下一篇文章。自己慢慢推导完公式,还是蛮开心的一件事。
小白学视觉
2022/09/28
3610
[机器学习实战札记] 线性回归
在前面的时间,我学习了Logistic回归,这是用来进行二分类学习的一种算法。虽然按照书上的介绍,编写了算法实现代码,但对其原理并不清楚,总感觉没有理解透。于是我又找到吴恩达的Marchine Learning课程,再次学习了线性回归和Logistic回归。
云水木石
2019/07/02
7230
[机器学习实战札记] 线性回归
Python3《机器学习实战》学习笔记(六):Logistic回归基础篇之梯度上升算法
版权声明:本文为博主原创文章,未经博主允许不得转载。个人网站:http://cuijiahua.com。 https://blog.csdn.net/c406495762/article/details/77723333
Jack_Cui
2019/05/25
7390
机器学习 学习笔记(6) Logistic 回归
线性模型可以进行回归学习,但是若要做分类任务该怎么办,只需要找一个单调可微函数将分类任务的真实标记y与线性回归的预测值联系起来。
2018/09/03
6010
机器学习 学习笔记(6) Logistic 回归
简单易学的机器学习算法——Logistic回归
一、Logistic回归的概述     Logistic回归是一种简单的分类算法,提到“回归”,很多人可能觉得与分类没什么关系,Logistic回归通过对数据分类边界的拟合来实现分类。而“回归”也就意味着最佳拟合。要进行最佳拟合,则需要寻找到最佳的拟合参数,一些最优化方法就可以用于最佳回归系数的确定。 二、最优化方法确定最佳回归系数     最优化方法有基于梯度的梯度下降法、梯度上升发,改进的随机梯度下降法等等。基于梯度的优化方法在求解问题时,本身对要求解的问题有要求:即问题本身必须是可导的。其次,基于梯度
felixzhao
2018/03/16
1.5K1
简单易学的机器学习算法——Logistic回归
机器学习实战 - 读书笔记(05) - Logistic回归
机器学习实战 - 读书笔记(05) - Logistic回归 解释 Logistic回归用于寻找最优化算法。 最优化算法可以解决最XX问题,比如如何在最短时间内从A点到达B点?如何投入最少工作量却获得最大的效益?如何设计发动机使得油耗最少而功率最大? 我们可以看到最XX问题,有寻找最小(最短时间)和最大等。 解决最小类问题会使用梯度下降法。可以想象为在一个山坡上寻找最陡的下坡路径。 同理,解决最大类问题会使用梯度上升法。可以想象为在一个山坡上寻找最陡的上坡路径。 寻找最优化算法,可以通过试图找到一个阶跃
绿巨人
2018/05/17
9740
【机器学习实战】第5章 Logistic回归
本文介绍了如何使用机器学习算法对马匹进行疾病预测。首先介绍了数据集构建和预处理,然后详细阐述了基于逻辑回归的疾病预测模型。最后,通过实验证明了该模型在预测马匹疾病方面的可行性。
片刻
2018/01/05
1.3K0
【机器学习实战】第5章 Logistic回归
机器学习实战之Logistic回归
写在前面 Logistic回归涉及到高等数学,线性代数,概率论,优化问题。本文尽量以最简单易懂的叙述方式,以少讲公式原理,多讲形象化案例为原则,给读者讲懂Logistic回归。如对数学公式过敏,引发不适,后果自负。 Logistic回归原理与推导 Logistic回归中虽然有回归的字样,但该算法是一个分类算法,如图所示,有两类数据(红点和绿点)分布如下,如果需要对两类数据进行分类,我们可以通过一条直线进行划分(w0 * x0 + w1 * x1+w2 * x2)。当新的样本(x1,x2)需要预测时,带入直线
罗罗攀
2018/07/03
2840
机器学习实战之Logistic回归
Logistic回归涉及到高等数学,线性代数,概率论,优化问题。本文尽量以最简单易懂的叙述方式,以少讲公式原理,多讲形象化案例为原则,给读者讲懂Logistic回归。如对数学公式过敏,引发不适,后果自负。
罗罗攀
2018/06/24
5080
《机器学习》笔记-线性模型(3)
作者:刘才权 编辑:李文臣 写在前面 1 如今机器学习和深度学习如此火热,相信很多像我一样的普通程序猿或者还在大学校园中的同学,一定也想参与其中。不管是出于好奇,还是自身充电,跟上潮流,我觉得都值得试一试。对于自己,经历了一段时间的系统学习(参考《机器学习/深度学习入门资料汇总》),现在计划重新阅读《机器学习》[周志华]和《深度学习》[Goodfellow et al]这
机器学习算法工程师
2018/03/06
1K0
《机器学习》笔记-线性模型(3)
python实现逻辑logistic回归:预测病马的死亡率
假设现在有一些数据点,我们用一条直线对这些点进行拟合(该线称为最佳拟合直线),这个拟合过程就称为回归。训练分类器就是为了寻找最佳拟合参数,使用的是最优化算法。 这就是简单的线性回归问题,可以通过最小二乘法求解其参数,最小二乘法和最大似然估计。 但是当有一类情况如判断邮件是否为垃圾邮件或者判断患者癌细胞为恶性的还是良性的,这就属于分类问题了,是线性回归所无法解决的。这里以线性回归为基础,讲解logistic回归用于解决此类分类问题。 python代码的实现 (1) 使用梯度上升找到最佳参数 from num
机器学习AI算法工程
2018/03/14
1.6K0
python实现逻辑logistic回归:预测病马的死亡率
机器学习(十五) ——logistic回归实践
机器学习(十五)——logistic回归实践 (原创内容,转载请注明来源,谢谢) 一、概述 logistic回归的核心是sigmoid函数,以及分类方式。当sigmoid值大于0.5时,判断结果为1,小于0.5时判断结果为0。公式为g(z)=1/(1+e-z)。其中,z=w0x0+w1x1…+wnxn,w为x的权重,其中x0=1。 决策边界是用于区分分类结果的一条线,线的两边代表分类的两种结果。 之前提到logistic,是使用梯度下降算法,用于获取代价函数J最小值时的参数。现在使用梯
用户1327360
2018/03/07
7250
机器学习(十五) ——logistic回归实践
基于Logistic回归和Sigmoid函数的分类(一)
假设现有一些二维数据点,我们用一条线(直线或者曲线)对这些点进行拟合,这个拟合的过程就称作回归。如果用直线拟合,就是线性回归。
用户6021899
2019/08/14
2.4K0
理解Logistic回归算法原理与Python实现
本文介绍了逻辑回归算法的基本原理和实现,并通过实例演示了如何使用逻辑回归算法进行二元分类。同时,还介绍了如何利用Python中的sklearn库来实现逻辑回归算法,以及使用该算法对鸢尾花数据集进行分类。
chaibubble
2018/01/02
1.6K0
理解Logistic回归算法原理与Python实现
Python3《机器学习实战》学习笔记(七):Logistic回归实战篇之预测病马死亡率
版权声明:本文为博主原创文章,未经博主允许不得转载。个人网站:http://cuijiahua.com。 https://blog.csdn.net/c406495762/article/details/77851973
Jack_Cui
2019/05/25
8900
简单易学的机器学习算法——因子分解机(Factorization Machine)
       因子分解机(Factorization Machine, FM)是由Steffen Rendle提出的一种基于矩阵分解的机器学习算法。
felixzhao
2019/02/13
6130
《机器学习实战》 - Logistic回归
Sigmoid 函数是一种阶跃函数(step function)。 在数学中,如果实数域上的某个函数可以用半开区间上的指示函数的有限次线性组合来表示,那么这个函数就是阶跃函数。而数学中指示函数(indicator function)是定义在某集合X上的函数,表示其中有哪些元素属于某一子集A。 两种坐标尺度下的Sigmoid函数图 如下:
yiyun
2022/04/01
7380
《机器学习实战》 - Logistic回归
机器学习-对数几率回归(逻辑回归)算法
对数几率回归(Logistic Regression),也称逻辑回归,虽然名字中含有回归,但其实是一种分类算法。找一个单调可微函数将分类任务中的真实标记与线性回归模型的预测值联系起来,是一种广义线性回归。
唔仄lo咚锵
2023/05/23
8970
机器学习-对数几率回归(逻辑回归)算法
机器学习系列(四)Logistc 回归
一切数据都可以分为两种,即定性数据和定量数据。 定性数据: 没有数值特征,不能进行数学运算,分为分类数据和顺序数据两类, (1)分类数据如反映“性别”、“职业”等现象的属性特点的数据,只能用来区分事物,而不能用来表明实物之间的大小、优劣关系。 (2)顺序数据,是只能归于某一有序类别的非数字型数据。顺序数据虽然也是类别, 但这些类别是有序的。比如将产品分为一等品、二等品、三等品、次品等 ,相应的观察结果就是顺序数据,顺序数据的数据之间虽然可以比较大小,却无法计算相互之间的大小、高低或优劣的距离。 定量数据: 反应“考分”、“收入”等可以用数值表示的变量,具有明确的数值含义,不仅可以分类还可以具体计算大小和差异。 之所以介绍两种数据类型,是因为还有一个概念是线性回归,线性回归分析的是定量数据,而逻辑回归分析的是分类数据,属于定性数据。
Minerva
2020/05/25
4060
相关推荐
常见面试算法:Logistic回归、树回归
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验