神经网络的基础-逻辑回归

练习数据和代码那必须是每一期都有的,文末查看获取方式。

大家好,今天给大家介绍的算法叫做逻辑回归

从名字入手,逻辑回归嘛,它肯定是回归的一种,还记得我们之前讲过的线性回归吧,原理上这两个算法是一样的。那什么叫逻辑呢,在计算机里,逻辑常常被理解为0、1值,也就是说我们得到的结果不能像线性回归一样得到一些任意的值,逻辑回归的结果应该是0或者1,这也就导致逻辑回归最适用的场景是二分类问题

回顾一下线性回归,我们要做的是求一组参数θ和b,然后利用Y=θx + b这个函数根据x的值预测Y的值(θ和b都可以是向量)。现在我们对这个式子进行一个变形,使得预测的结果在0到1之间:

y=h(z)

z=θx + b

这个过程呢相当于先对数据进行线性回归,然后对回归的结果进行一种函数变换使得结果在0-1之间。我们的函数h是这样的:

函数h叫做“sigmoid函数”或者“S型函数”,里面的e叫自然对数,是一个常量,值大约为2.7多,函数长这个样子:

我们可以看到当自变量为0时,该函数的函数值为0.5,自变量大于0时函数值迅速向1靠拢,小于0时函数值迅速向0靠拢。

至于我们为什么要在逻辑回归里选择这个函数,大家不必深究,只需要知道他的样子和公式就可以,实际上这个函数的选择不仅可以满足我们对输出结果取值范围的要求,也为我们计算提供了很多方便。

这样经过一个下线性回归,再把线性回归的结果用sigmoid函数进行处理,得到0-1之间的值,就完成了逻辑回归的过程。当然这样得到的逻辑回归值可能是0-1之间的任意值,对于二分类问题的话,我们把两个类别分别叫做“0类”和“1类”,比较回归值与0.5之间的大小关系,大于0.5的话就把当前样本分类为1类,否则分类结果为0类。

整个的思路和过程就是这样,我们再来看看想要实现这个模型需要哪些东西吧。

再次回顾线性回归,我们在使用数据对模型进行参数确定的时候是定义了一个代价函数L(θ,b),通过最小化L得到的两个参数的拟合值。同样地,我们在逻辑回归里也需要这样一个代价函数L。其实,在今后的算法中大家也可以细心观察,许多算法的思路都是这样的,确定思路,找到一个合适的代价函数L,使用数据去拟合参数使得L取的最小值,最终就得到了结果。

那么逻辑回归的代价函数应该怎么确定呢,先给出答案:

其中m为训练集中样本的个数,yi表示样本i的真实类别(0或者1),hi(z)是我们逻辑回归运算的结果。

我们来分析一下函数L,对于一个样本来说,如果他的真实分类应该是0,也就是yi=0,那么对这个样本来说,Li=- log(1-hi(z))。而对于一个样本yj=1,来说,Lj=- log(hj(z))。

我们来看一下log函数:

a表示底数,我们在文中省略掉了,默认使用的底数是e,也就是前面提到的自然对数。

在我们这里呢,由于h(z)的结果是在0-1之间的,所以log函数的值总是小于0的,这也就是为什么我们在L函数中有一个负号。这样的话对于上述的样本i来说,预测的hi(z)越接近0,Li就越小;同理对样本j,预测的hj(z)越接近1,Lj就越小。这就验证了我们代价函数选择的合理性,同样的,代价函数为什么是这个形状大家完全可以不必考虑,数学上可以有很多解释来支持他,我们只要知道他是合理的、易于计算的一种形式就可以啦。

Ok,现在我们有了代价函数,有了训练数据,下一步该做什么呢?

这里就可以用我们之前讲过的利器-梯度下降法求解。

我们把函数L对θ和b分别求导:

有微积分基础的同学看懂这个应该不难,当然没有的同学也不必纠结,如果只是应用层面的去理解这个算法的话,直接记住结果绝对是最实用的解决措施。

好啦,大家可以自己回顾一下梯度下降算法的主要思路,完成对参数的优化。

最后,对一个待分类的样本,将其属性输入到逻辑回归模型中,将得到的数与0.5进行比较就可以啦!

不论是对代码还是对教程有疑问的话可以随时在后台提问!

为了方便大家进一步的学习,在接下来的几次文章中我会讲述一些机器学习方面需要的数学基础,大家敬请期待!

本文来自企鹅号 - 全球大搜罗媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏linux驱动个人学习

高通spi 屏幕 -lk代码分析

2273
来自专栏函数式编程语言及工具

SDP(5):ScalikeJDBC- JDBC-Engine:Streaming

  作为一种通用的数据库编程引擎,用Streaming来应对海量数据的处理是必备功能。同样,我们还是通过一种Context传递产生流的要求。因为Streamin...

2574
来自专栏飞扬的花生

timestamp时间戳的应用(微信小程序开发也一样)

      在微信小程序开发时发现一个timestamp的时间戳的变量 比如获取微信运动步数时候 ? timestamp是如何形成的在JS中 是这么形成的 va...

2259
来自专栏专知

2018年SCI期刊最新影响因子排行,最高244,人工智能TPAMI9.455

2018年6月26日,最新的SCI影响因子正式发布,涵盖1万2千篇期刊。CA-Cancer J Clin 依然拔得头筹,其影响因子今年再创新高,达244.585...

842
来自专栏西安-晁州

nodejs封装mssql

对mssql操作Sqlserver数据库的基本封装: 记录一下: /** * Created by chaozhou on 2015/9/18. */ va...

3300
来自专栏函数式编程语言及工具

PICE(4):MongoDBStreaming - gRPC Protobuf conversion

   前两篇我们介绍了JDBC和Cassandra的gRPC streaming实现。相对MongoDB来说,JDBC和Cassandra支持字符类型的quer...

770
来自专栏Youngxj

[教程]创建一个整人的vbs程序

1113
来自专栏腾讯数据中心

敬请收藏:数据中心常用标识的中英文对照

中国的数据中心在不断走向国际化,同时数据中心内的关键标识也逐渐采取了中英文双语标识。 今天,我们整理出腾讯数据中心内部使用的中英文标识对照。敬请收藏以备后续参考...

3154
来自专栏.net core新时代

Spire.Doc组件读取与写入Word

  之前写了一篇开源组件DocX读写word的文章,当时时间比较匆忙选了这个组件,使用过程中还是有些不便,不能提前定义好模版,插入Form表单域进行替换。最近无...

20410
来自专栏王磊的博客

Express调用mssql驱动公共类dbHelper

直接上代码: /** * Created by chaozhou on 2015/9/18. */ var mssql = require('mssql')...

3397

扫码关注云+社区