欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

逻辑回归及正则化

程序员文章站 2022-07-14 11:50:35
...
"逻辑回归算法”(分类算法)

在这个算法里,我们的假设函数逻辑回归及正则化长这样:逻辑回归及正则化

简化一下,把逻辑回归及正则化叫做Z,那么原函数就变成了逻辑回归及正则化

图示如下:

逻辑回归及正则化是不是感觉长得很像累计分布函数啊……

逻辑回归及正则化(第二个图是累计分布函数的)

嗯。反正差不多,所以高数的知识可以直接拿过来用了。

逻辑回归算法,计算目的是为了分类。按照图中所示,当逻辑回归及正则化的时候,逻辑回归及正则化大于0.5,那么假如你要分类,1为在某类,0为不在某类,那逻辑回归及正则化四舍五入就是1个1……。同理,z<0时,g(z)<0.5,四舍五入到0……(当然实际不是这么做的,实际做法是用数学方法使z的绝对值超过一个界限,使得逻辑回归及正则化和1或者0很近。)

我们可以把g(z)=0.5,也就是z=0的时候,称为决策边界。假设y为结果,y的值是1或者0。

那么,z=0,也就是逻辑回归及正则化=0的时候为边界。逻辑回归及正则化时y=1。逻辑回归及正则化时y=0。分类就靠这个……

然后继续,机器学习嘛,根据前两周的经验,肯定有那个J,代价函数。逻辑回归算法的代价函数如下:

逻辑回归及正则化(m是y总数,嫌麻烦的话,和第二周一样,如果你把那个加和符号去掉,那么这里x和y就变成向量了也就是:逻辑回归及正则化。)

然后因为y只有0和1两个取值,这里就可以分两种情况讨论,让y从函数中去掉:

y=0:逻辑回归及正则化

y=1:逻辑回归及正则化

然而我们发现,这样拿出来的函数,因为y一会儿是1,一会儿是0,得到的图像如下(左边的)然而左边的凹凸不平(非凸),不方便梯度下降,我们想要的是右边那种滑溜溜(凸)的图像。:

逻辑回归及正则化
所以我们假设有个函数cost,逻辑回归及正则化

原函数J变成了逻辑回归及正则化

反正我们要的是逻辑回归及正则化符合决策边界的条件就可以了,反正都把结果四舍五入成1或者0了,也没必要非得是某个函数对吧?

所以它是什么函数无所谓。只要(它的函数处理了x以后,得到的y)符合决策边界的条件即可。而现在我们希望得到一个滑溜溜的凸函数。那么我们就假设(注意,这是假设出来的,符合条件的函数之一,没说非得这样。然而这是已有的函数中最好的。):

y=1的时候,逻辑回归及正则化

y=0的时候,逻辑回归及正则化

它们的图像如下:

逻辑回归及正则化

符合条件。那么这时候还有一个问题,大家都很懒对吧,懒得分情况讨论,那么如何做呢?

你看,由于y只有1和0两个值,所以我们就直接把两种情况的cost函数相加,然后分别乘以y和y-1即可:

逻辑回归及正则化

看,是不是很方便呢?

于是原来的那个代价函数J就变成了:

逻辑回归及正则化

然后照旧,我们目的是拿x和y训练样本得到逻辑回归及正则化嘛!所以对这玩意求导,然后取个α,然后不断重复梯度下降……以得到逻辑回归及正则化,就是下面这个玩意:

(repeat:)逻辑回归及正则化

这坨玩意里,我们需要计算逻辑回归及正则化,直接照搬之前笔记里的,逻辑回归及正则化即可。只不过这里的逻辑回归及正则化

于是我们最终得到的

(repeat:)逻辑回归及正则化

逻辑回归函数就是这样了。

然后是拟合问题,下面是3种情况:

逻辑回归及正则化

第一种是欠拟合,通常是因为特征量选少了。第二种是我们想要的,第三个是过拟合,通常是因为特征量选多了。

欠拟合的解决方法是增加特征量。

过拟合的解决方法是减少特征量或者正则化。

比如我们的逻辑回归函数,不选个自定义的函数,就用我们那个类似泰勒展开式的函数来做的画,这货长得凹凸不平的

逻辑回归及正则化,一点都不光滑。那么,按照这货拟合回来的函数,十有八九也是过拟合了。于是我们就会得到一个类似这样的决策边界(蓝色线)显然,这条决策边界很……不实用。逻辑回归及正则化

我们想要的,是一根滑溜溜的凸函数,但是我们又不能确定哪些特征量该去掉,所以我们就选择正则化的方式解决过拟合。

正则化的方法,就是给代价函数后面加个“惩罚项”……来降低它对数据的拟合能力。

于是我们的逻辑回归及正则化

就变成了:逻辑回归及正则化(这里n表示特征量的总数,意思就是让所有的n个正义的逻辑回归及正则化为了解决过拟合问题,大喊一声“合体!”然后一起来惩罚那个过度拟合了的函数……逻辑回归及正则化是正规化参数,决定了你惩罚得有多狠。你要惩罚狠点,你就把逻辑回归及正则化提高一点,逻辑回归及正则化过高会变得欠拟合,逻辑回归及正则化过小无法解决过拟合。)

那么我们的逻辑回归及正则化就顺利变成了:

逻辑回归及正则化 ~→

逻辑回归及正则化

注意,当逻辑回归及正则化的时候,由于逻辑回归及正则化=1,所以这一项不会欠拟合也不会过拟合,所以不惩罚它。

然后,如果你用的不是线性回归,而是正规方程的话,同理,给

逻辑回归及正则化加个惩罚项就好了。这里加的惩罚项为逻辑回归及正则化,逻辑回归及正则化是一个n+1阶的单位矩阵把第一项变成0(因为第一项不惩罚),我们把逻辑回归及正则化写作varsigma,代码差不多就是下面这个:
varsigma =ones(n+1,n+1); #没有ones方法的自己写个循环给列表赋值,非常简单。
varsigma [0,0]=0 #python,c,php等编程的话,等这里是0,0
varsigma [1,1]=0 #matlab等这里是1,1,因为一个从0开始计数,一个从1开始计数。真是……就不能统一一下么,老因为这个引起一群嘴强王者的唇战。
写出来差不多就是这样一个矩阵:
[
0,0,0,0,0,0,0,0,...,0,0
0,1,0,0,0,0,0,0,...,0,0
0,0,1,0,0,0,0,0,...,0,0
0,0,0,1,0,0,0,0,...,0,0
0,0,0,0,1,0,0,0,...,0,0
0,0,0,0,0,1,0,0,...,0,0
0,0,0,0,0,0,1,0,...,0,0
0,0,0,0,0,0,0,1,...,0,0
.                     .
.                     .
.                     .
0,0,0,0,0,0,0,0,...,0,1
]

得到的正规化后的公式为逻辑回归及正则化

转载:https://zhuanlan.zhihu.com/p/21378251