ML_learning02:线性回归

好久不见. 提交于 2020-01-13 23:09:33

理解线性模型:

  • 是一种函数
  • 目标是预测
  • 从一个属性的线性组合中来学习
  • 具备很好的可解释性:每个样本都给予了相应的权重表示重要性

线性回归

数据集:D={(x1,y1),(x2,y2),…,(xn,yn)}, 其中xi=(xi1;xi2;xi3;…;xid),yi∈Rxi=(xi1;xi2;xi3;…;xid),yi∈R
线性回归试图从样本X学得一个线性模型–>尽可能准确的预测实值输出Y,
f(xi)=wxi+bf\left(x_i\right)=wx_i+b使得f(xi)yif(x_i)\approx y_i

1、将f(x)与y之间的差别最小化

性能度量是衡量模型泛化能力的评价标准。
均方误差(MSE:mean squared error)是回归任务中最常用的性能度量,
E(w)=1mi=1m(fw(xi)yi)2E\left(w\right)=\frac1m\sum_{i=1}^m\left(f_w\left(x_i\right)-y_i\right)^2
使用MSE的原因
简单用大白话来说,就是对线性模型的目标函数中的b建立极大似然函数,即最大化b=f(xi-wxi),最后得到的形式就是MSE的表达形式。
一些区分

  • 损失函数(Loss Function):度量单样本预测的错误程度,损失函数值越小,模型就越好。  
    eg: 0-1损失、平方损失、绝对损失
  • 代价函数(Cost Function):度量全部样本集的平均误差。
    eg: 均方误差、均方根误差、平均绝对误差
  • 目标函数(Object Function)≠线性模型的表达式

目标函数是为了确定线性模型的参数的最优值的, 将得到的最优值代入线性模型表达式才得到具体的线性模型  
目标函数 = 代价函数 + 正则化函数

目标函数与代价函数的区别是增加了正则化,正则化的目的是避免模型的过拟合。
过拟合(over-fitting)其实就是所建的机器学习模型或者是深度学习模型在训练样本中表现得过于优越,导致在验证数据集以及测试数据集中表现不佳。
防止过拟合有几种解决办法

  • 增加数据集
  • 正则化方法,让原本因为过拟合而曲度很大的曲线变平缓
  • Dropout,让部分神经元工作、部分神经元不工作
    目标函数就是利用了第二种方法,添加正则化函数防止过拟合,所以仅仅依靠代价函数来度量模型性能是不行的。
    注:正则化还要再查查

2、优化方法

以下的几种方法都是求解无约束优化问题的方法
此处的优化方法就是指如何让代价函数最小的方法,代价函数如下:
E(w)=i=1m(fw(xi)yi)2E\left(w\right)=\sum_{i=1}^m\left(f_w\left(x_i\right)-y_i\right)^2

  • 梯度下降法
    梯度法思想的三要素:wj:=wj−α*∂J(θ)/∂w
    (1) 出发点–>wj
    (2) 下降方向–>∂J(w)/∂w
    (3) 下降步长–>由α决定,α×∂J(w)/∂w

α的意义
  机器学习目标函数一般都是凸函数,形象的比喻就是,凸函数求解问题可以把目标函数想象成一口锅,来找到这个锅的锅底。非常直观的想法就是,我们沿着初始某个点的函数的梯度方向往下走(即梯度下降),因此初始点的确认也是十分重要的。
  步长设为常数Δ,这时就会发现,如果用在梯度较大的时候,离最优解比较远,w的更新比较快;然而到了梯度较小的时候,也就是较靠近最优解的时候,w的更新竟然也保持着跟原来一样的速率,这样会导致w很容易更新过度反而远离了最优解,进而出现在最优解附近来回震荡。所以,既然在远离最优解的时候梯度大,在靠近最优解的时候梯度小,我们让步长随着这个律动,于是我们就用α|W|来代替Δ,所以说这时的λ是随着坡度的陡缓而变化的,别看它是个常数。

批梯度法和随机梯度法,应用场景不同。数据量很大时,随机梯度发经常优于批梯度法。

  • 最小二乘法
    最小二乘法,其实也可以叫做最小平方和,其目的就是通过最小化误差的平方和,使得拟合对象无限接近目标对象。公式等通于MSE均方误差。
    均方误差有非常好的几何意义,它对应了常用的欧几里德距离。在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线的欧氏距离之和最小
    求解参数使得J(w)最小的过程称为最小二乘的参数估计。
    多元线性回归中的代价函数(MSE)表达式如下:Ew=(yXw)T(yXw)E_w=\left(y-Xw\right)^T\left(y-Xw\right)
    对w求导得到Ew=2XT(Xwy)\frac{\partial E}{\partial w}=2X^T\left(Xw-y\right)
    令上式为0有w=(XTX)1XTyw=\left(X^TX\right)^{-1}X^Ty
    将求得的w代回J(w)即可

  • 牛顿法
    牛顿法的收敛速度非常快,将f(x)用泰勒公式展开到第二阶f(x)=f(x0)+f(x0)(xx0)+12f(x0)(xx0)2f(x) = f(x_0) + f'(x_0)(x - x_0)+\frac{1}{2}f''(x_0)(x - x_0)^2
    令其导数为0f(x)=f(x0)+f(x0)xf(x0)x0=0f'(x) = f'(x_0) + f''(x_0)x -f''(x_0)x_0 = 0得到x=x0f(x0)f(x0)x = x_0 - \frac{f'(x_0)}{f''(x_0)}当x是向量的时候,x=xH1f(x0)f(x0)x=x - H^{-1}\frac{f'(x_0)}{f''(x_0)}其中H是E(w)的hessian矩阵
    之后的步骤同梯度下降法

  • 拟牛顿法
    选择一个矩阵代替计算复杂的hessian矩阵,其余思路保持不变

几种方法的比较:

梯度下降法和最小二乘法相比,梯度下降法需要选择步长,而最小二乘法不需要。梯度下降法是迭代求解,最小二乘法是计算解析解。如果样本量不算很大,且存在解析解,最小二乘法比起梯度下降法要有优势,计算速度很快。但是如果样本量很大,用最小二乘法由于需要求一个超级大的逆矩阵,这时就很难或者很慢才能求解解析解了,使用迭代的梯度下降法比较有优势。
梯度下降法和牛顿法/拟牛顿法相比,两者都是迭代求解,不过梯度下降法是梯度求解,而牛顿法/拟牛顿法是用二阶的海森矩阵的逆矩阵或伪逆矩阵求解。相对而言,使用牛顿法/拟牛顿法收敛更快。但是每次迭代的时间比梯度下降法长。

3、sklearn.linear_model使用

参照https://blog.csdn.net/weixin_39175124/article/details/79465558

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!