1.线性回归与非线性回归(外加推导出逻辑回归)

 线性回归用于解决多元(单元)线性,预测回归值的线性问题。这一回归值是连续值,比如分类问题的回归值是离散的值。

线性回归模型一般形式:

但是一般用向量形式写成:

在这里说一下对模型的一些解释:

  1. n维向量等价于n*1维矩阵,所以向量和n*1维矩阵两种形式等价。
  2. 参数都是向量形式,例如x。

定义代价函数(损失函数):

改错 :二分之一应该在乘一个m(样本数)。

对损失函数的一些解释:

  1. 又称“最小二乘法”,均方误差代价函数。
  2. 二分之一出现的目的,就是为了方便后面的求导,没有什么实际的意义。
  3. 任务:通过最小化代价函数,可以求得最优的模型参数,也就等价求出了理论的最优的模型。(不考虑泛化能力情况下)
  4. x和y上的i代表第i个样本,一般下面的数为j代表样本的第j个特征变量。

优化代价函数引出梯度下降方法:

对于代价函数很容易对二元线性模型画图(从X0开始,有x0,x1,且x0=1),发现是一个凸函数,就可以逐步进行梯度下降迭代优化直到收敛。

参数更新的公式可以由导数乘一个步长来进行表示:

  1.  注意该表达式已经进行了求导,你可以对他进行还原!
  2. 算法思想就是:给定两个参数的初始化值(步长也称学习率),然后对所有样本进行计算,更新一次参数值,重复迭代直到参数值收敛。(设学习率不变)
  3. 导数在多元情况下变为求偏导,也就是梯度(求导是斜率),沿着梯度方向函数下降最快。

对学习率的选取:

  1. 学习率取值过大:那么在初始值上可能一下跳过了最低点,并且代价函数还不减反增,那么在这之后代价函数就会离最低点越来越远,代价函数就会越来越大。(因为每次都会上升一点高度)
  2. 学习率取值过小:那么你每一步都会迈出很小,那么收敛速度会非常慢。但是一定是会收敛的!
  3. 学习率是否需要变化:先分析导数,在不断迭代优化参数的过程中,导数是不断逼近最低点的(导数为0),所以说导数是不断减小的所以,你学习率还需要在进行变化吗?(肯定是不需要的了,因为能简化的工作就不要复杂化,这也是阿卡姆剃刀原理的思想)。
  4. 学习率怎样选取:首先可以根据图像来进行分析(x轴为迭代次数,y轴为代价函数的值),可以先取一个大一点的值,如果损失越来越多那么就逐渐减小学习率(可以每次1/3倍),直到学习率可行(损失函数的值是逐渐减小的)。

梯度下降法的时间优化:

(batch)梯度下降每次迭代需要计算所有的样本,这样在实际中可能效率会比较低。

正定(负定)矩阵:你需要知道它的行列式的值一定为正或者(负)!加一个半字那么就可能等于0了要注意!

  1.  mini-batch梯度下降法:每次随机的从样本中选出若干值进行计算处理。
  2. 随机梯度下降法:每次只选一个样本进行计算,看起来不可行,但是在实际中的结论却挺好,所以实际中可以偏向于这种方法。
  3. 直接求解析解:,这个公式是由对代价函数用极大似然估计来求解(具体的也不懂)。但是可以介绍下极大似然估计,概率角度来看,样本既然出现了就认为出现的概率大那么使样本出现概率最大化,认为这样的模型才是最好。。
  4. 解析解不可逆情况:可能是特征数(xj)太多样本数太少(行列差异过大,使矩阵达不到满秩,那么矩阵的值就是零就不可逆了,在这里还要说一下,线代上说矩阵只有方阵才可能是可逆,也即是说不是方阵就一定不是可逆,但是广义来说没有这个要求的),可能是特征之间的相关性太大,可能就会相抵消,导致行列式的值为零,也就不可逆了。在这里可以求它的伪逆矩阵(可以增加一项来使矩阵正定),通常在各大语言中有现成的包来调用,也对此处理的很好。
  5. 解析解和梯度下降的比较:解析解在对特征特别多的情况下比如10000往上。由于要求矩阵的逆这个复杂度是n的平方接近三次方的复杂度,所以也是有缺陷的,在特征过多的情况下效率不如梯度下降的迭代。梯度下降在对特征特别多的情况下表现非常好,可能是百万,亿万的特征维度,但在特征不是特别多的情况下还是解析解效率快!
  6. 梯度下降特征缩放(压缩):假设两个特征x1,x2如果两个特征的值相差过大,那么在二元情况下等高线图就会变成十分狭长的椭圆,那么进行梯度优化时就会额外需要迭代很多次才可收敛(因为从一条等高线到另外一条,距离可能变狭长了),如果等高线图近似为一个圆的话,那么梯度下降耗时往往就会减少,一般使用公式:特征的值/特征的最大值-最小值,这样基本就可以近似的放缩到 [0,1]上,也就达到目的了。

线性(非线性)回归的过拟合和欠拟合问题:

过拟合:模型太复杂,对训练数据拟合的太过精准,对测试样本表现很差(泛化误差太大)

欠拟合:模型太过简单,对训练数据和测试数据都表现的很差。

以下只对过拟合来进行说明:

1.尽量减少特征数(因为特征维数过高,而数据数量达不到要求)(例如:两个线性相关的特征可以只保留一个)

2.加入正则化项(惩罚项):简单来说当模型太过复杂,说明在模型中高阶系数(参数 )过大表达能力过强,那么就加入惩罚项,公式:可以先简单认为就是任意系数乘高阶系数,然后对损失函数加上这个惩罚项,那么要最小化损失函数,就要尽可能减少高阶系数(参数)的值,用极限的思想来说就是让高阶系数趋近于零那么它的作用就不如低阶系数(参数)那么模型不就变简单了吗,曲线不就变平缓了嘛。

  • 对梯度下降来说模型变为:然后在求导,写成参数更新的式子,在进行整合其实就相当于每次对初始参数在乘上一个小于1大于0的系数在进行梯度下降。(注意:正则化项的特征参数选取从1开始而不是0,这个在实际中从0还是1是基本不影响的(所以可以忽略),但是按照惯例通常是从1开始的。)
  • 对正规方程求解析解来说好处更加明显,对于原来不可逆的问题变得可逆了(x乘x的转置再加上正则化项的矩阵形成的矩阵变得正定了[上面也提到过]  所以就直接可以求逆了)

一般实际中可能数据比较复杂,所需要的模型也就要复杂,因为简单的线性模型不能很好的进行拟合数据了。这里就有非线性回归问题的引出。

非线性回归问题:

一般思路是把非线性问题转化为线性问题,在运用最小二乘法(代价函数)来进行求解。对于不可转化为线性问题的模型通常用泰勒级数展开来表达模型,再把问题转化为线性问题。(也称为高斯-牛顿法)

 1.多项式回归:使用这个模型来进行拟合达到线性化,在通过最小二乘来进行处理。

如果对于特定的数据集类似于数据集中在两堆(也可以多堆),那么用线性回归或者非线性拟合的效果往往是不好的,这其实可以类似于预测离散值的回归问题,通常把该问题描述为分类问题,所以在这里引出Logistic回归(逻辑回归)

逻辑回归一般用于做分类的问题,回归的预测值是离散的,而且是概率形式,代表着该样本属于某个类别的概率大小。其实也可看做概率模型。

逻辑回归模型:

原来的线性回归模型不能很好的解决离散值问题(分类问题),通过sigmoid函数(值域[0,1])把线性回归模型变为了逻辑回归模型(类似于概率模型):sigmoid函数,z是一个实数那么把线性模型带入

这就是逻辑回归模型。(假设为二分类的问题)

代价函数(损失函数):

代价函数(可以想象成样本点到决策面的距离),可以先试试线性回归的代价函数,发现这个复杂的函数一定不是个凸函数,或

许它的曲线很陡,有很多个局部最优点,那么这一定是不可行的,梯度下降你一定不能用的。所以我们一定要另外找一个代价函数你发现log函数是凸的,加上log函数后cost函数也变为凸的了!

(cost函数在给定y,样本x,初始参数后才可行)你会发现对它求log他变成凸函数了(画一个图就可以直接看出来:要注意定义域[0,1]范围内),就是他可以进行优化了,于是直接定义代价函数:

,接下来只需要最优化这个代价函数即可,梯度下降法直接解决(因为不管在y=0 or 1情况下代价函数都是标准的凸函数)!并且写出梯度下降的式子后可以发现经过求导后,逻辑回归与线性回归参数更新的形式是一样的!!

再次引出梯度下降的优化:

高级优化法,梯度下降的搜索太慢,为了加快搜索的效率尽快达到收敛,引进了牛顿法(只需要一次即可最优),还有修正牛顿搜索方向的拟牛顿方法,还有共轭梯度法BFGS,和L-BFGS都可以加快梯度下降的速度而且还不需要自己定义学习率!

逻辑回归的正则化问题:

在逻辑回归新定义的代价函数模型上,还是增加一个和线性回归一样的正则化项,然后在对代价函数求导在对学习率相乘 一起拼接成一个迭代更新参数的公式,最后发现它的形式与线性回归一模一样,只是假设的函数模型不同罢了!

猜你喜欢

转载自blog.csdn.net/taka_is_beauty/article/details/87869950