线性回归、逻辑回归算法原理推导及python代码实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangyuanshun/article/details/80997720

线性回归算法

       线性回归算法是机器学习中最基本的一个算法,但是该算法的思想、原理相当重要。本文将详细从原理上讲解线性回归算法

       从一个例子引入:想象一下,假如我要去银行贷款,银行会问我两个问题,一是工资、二是年龄。根据我的回答,银行将计算出能贷多少给我。

       目标:预测银行会贷给我多少钱(贷款额度),标签;是一个具体的值,属于回归问题。

       数据:工资和年龄这两个特征

       考虑:工资和年龄都会最终影响到贷款额度,那么工资和年龄对贷款额度的影响权重是多少?

如下表:

x0 工资 x1 年龄 x2 贷款额度 y
1 4000 25 20000
1 8000 30 70000
1 5000 28 35000
1 7500 33 50000
1 12000 40 85000

此表有5个样本(5行),特征x1表示工资,特征x2表示年龄,预测贷款额度y(具体数据),特征x0为方便矩阵计算而插入的数据(可以这样理解,1x任何数=任何数,只是起到占位的功能)

通俗的解释就是输入x1、x2(工资、年龄),输出银行的贷款额度y。即画出一条"线,面"来拟合我们的数据点。如下图:

如何拟合出这样一条最合适的“线,面”呢?上图中,红色点为真实值,每一个红色点到面的距离为一个误差,线段的长短表示误差的绝对值,面上或面下的红色点分别表示了误差的正负。 数学推导来了!直接上图片吧

备注:偏置项参数对结果的影响小于权重参数对结果的影响。对第三行化简得到的式子解释一下,有多少个特征x有多少个参数theta

误差,这是一个非常核心的概念,贯穿整个机器学习的过程

1000个样本就有1000个误差,10000个样本就有一万个误差,误差是独立并且有相同分布,并且都服从均值为0的高斯分布,由误差组成的矩阵为实对称矩阵,实对称矩阵的平方=该矩阵的转置x该矩阵本身。这是概率论的知识。

独立:张三和李四一起来贷款,他俩没有任何关系(独立的两个样本)。

同分布:他俩都来的是我们假定的这家银行(贷款金额计算规则一样)。

高斯分布:银行可能会多给,也可能会少给,但绝大多数情况下这个浮动不会太大,极小情况下浮动会比较大,符合正常情况。高斯分布大概长成这样:

接着上面的数学推导


似然函数:通俗讲,假设我去赌场赌博,可是我不知道我今天能不能赢钱(不知道今天赌场服从什么规则),于是我堵在赌场门口,出来一个人问一个人,总共问了10个人,有9个人都说赢钱了,1个人输了。这时我就能认为,只要我进去赌钱,90%的概率能够赢钱,赌场的规则对于每个样本是一样的。似然函数就是通过样本估计参数的值,也就是参数估计,通过观察一批样本就可以推导出赌场服从theta参数的规则。

得到如下的似然函数:

似然函数解释:什么样的参数跟我们的数据组合后恰好是真实值(样本估计参数)。

对数似然函数:计算机处理加法效率高于乘法。乘积的对数=对数的和,取对数并化简得到如下图所示:

似然函数是越大越好,对数似然函数也是越大越好,要想让对数似然越大,只需让目标函数J(Θ)越小,即:

最小二乘法相当重要,全称为最小化误差的平方和,使得拟合对象无限接近真实对象。

这里解释一个很重要的问题,为什么是平方的问题

答:上面的推导是通过求解极大似然函数而得到了平方,下面从几何的角度直观的解释这个问题。假设有一条直线y=ax+b,要在直线上找到一个点,使得该点到定点(x0,y0)的距离最短。

        1、如果用绝对值得方法寻找,也就是取min(|y-y0|+|x-x0|),由于绝对值最小为0,所以最小的情况就是x=x0或者y=y0处,如下图所示:

        2、如果采用平方和的方法寻找,就是取点到直线的垂直距离,也就是数学中最常见的数学的概念。如下图所示:

因此,相比于绝对值的方法,取平方的方法可以得到更短的距离,使得拟合函数接近真实值。这是从范数的角度回答了这个问题,绝对值对应的范数是1,平方(最小二乘法)对应的范数是2。完美的解释了最小二乘法为什么能应用到线性回归中,知其然也知其所以然。

面试必问:1、为什么要引入似然函数?

                  2、为什么要对似然函数进行对数变换?

                  3、为什么要让目标函数越小越好?

                  4、为什么范数是2不是1?

接下来就是对目标函数J(Θ)的求解,什么样的Θ能使目标函数最小,解Θ。

接下来涉及到矩阵的求偏导公式,简单的有四个,如下:

Y = A * X --> DY/DX = A'
Y = X * A --> DY/DX = A
Y = A' * X * B --> DY/DX = A * B'
Y = A' * X' * B --> DY/DX = B * A'

按照公式带入求解就可得到如下图:

根据高数知识,要求最小值,只需令偏导数等于零(方程两端乘以对应的逆矩阵),即可解出Θ,如下图,矩阵X,Y已知,可得出Θ向量

现在我们把Θ解出来得到一个三行一列的列向量(具体数据我也没带入计算),解出了两个权重参数和一个偏置项参数

接下来谈谈这样做的不足:

1、这与机器学习本身有矛盾,机器学习应该是一个逐步求解优化的过程,而不是一下得到精确答案的过程(当然上面的解法没有错,只是线性回归是数学上的一个巧合,刚好可以解出最精确的答案,不需要一步一步迭代求解)。

2、由结果可以看出,前提得要求(X的转置乘以X)可逆,否则无法解出结果。

既然有不足(或者局限性),就需要改进,采用梯度下降的策略将很好的解决这个问题。如下

梯度下降

引入:当我们得到一个目标函数后,如何进行求解?

           直接求解?(并不一定可行,线性回归可以当做是一个特例,有一定局限性)

常规套路:机器学习的套路就是交给机器一堆数据,然后告诉它沿着什么样的学习方式是对的(目标函数),让它朝着这个方向去做。

如何优化:一口吃不成个胖子,我们要静悄悄的一步步地完成迭代过程(每次优化一点点,积累起来就是大成绩了)。

现在的目标函数是(除以了样本个数m):

目标函数函数图像如图:

现在的目的就是寻找上图的最低点,也就是我们目标函数的终点(什么样的参数能使目标函数达到极值点)

(梯度下降)下山分几步走呢?(更新参数)

1、找到当前最合适的方向。

2、走一小步,步子走大了该“跌倒”了。

3、按照方向与步伐去更新我们的参数。

梯度下降的三种策略:批量梯度下降、随机梯度下降、小批量梯度下降。优劣如下图:

梯度下降学习率对结果的影响,如下图:

学习率初始化策略:先用0.01,不行再小,学习率可以随着迭代次数的增加而变小。

批处理数量初始化策略:一般用2的倍数,可以先用64,多大的处理量能最大满足你在时间上的容忍程度,批处理数量越大,耗时越久;同时稳定程度也越高。

逻辑回归(Logistic regression)

首先明确,逻辑回归是分类任务,是最经典、最牛x的二分类算法,也支持多分类任务。

机器学习中,分类算法的选择:先用逻辑回归,再用复杂的,能用简单的还是尽量用简单的算法,简单高效就行。

逻辑回归的决策边界:可以是非线性的。

提到逻辑回归,当然不得不讲到Sigmoid函数,如下图:

上图已经很好地解释了Sigmoid函数。

将线性回归的输入数据带入到Sigmoid函数中得到预测函数如图:

对于二分类任务,如图:

接下来和之前一样的套路,就是取似然函数,再取对数似然,此时的对数似然函数是梯度上升问题,一般都会转化为梯度下降问题。就是要想求对数似然函数的最大值,需要求目标函数的最小值(目标函数=(-1/m)*对数似然函数),如下图:

然后对目标函数J(Θ)求偏导,注意是对每一个Θj求偏导,有多少个特征就有多少个Θj。推导过程如下图,建议拿笔亲自推导一下:

综上,以上就是我对线性回归算法、逻辑回归算法的理解,希望对你有所帮助,机器学习小白,有误之处,万望谅解,喜欢博主就关注一波吧,会持续更新相关内容!

猜你喜欢

转载自blog.csdn.net/wangyuanshun/article/details/80997720