练习数据和代码那必须是每一期都有的,文末查看获取方式。
大家好,今天给大家介绍的算法叫做逻辑回归。
从名字入手,逻辑回归嘛,它肯定是回归的一种,还记得我们之前讲过的线性回归吧,原理上这两个算法是一样的。那什么叫逻辑呢,在计算机里,逻辑常常被理解为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进行比较就可以啦!
不论是对代码还是对教程有疑问的话可以随时在后台提问!
为了方便大家进一步的学习,在接下来的几次文章中我会讲述一些机器学习方面需要的数学基础,大家敬请期待!
本文来自企鹅号 - 全球大搜罗媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文来自企鹅号 - 全球大搜罗媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。