线性回归理论推导

原文地址:https://blog.youkuaiyun.com/hongbin_xu/article/details/77102810

理论推导

  机器学习所针对的问题有两种:一种是回归,一种是分类。回归是解决连续数据的预测问题,而分类是解决离散数据的预测问题。线性回归是一个典型的回归问题。其实我们在中学时期就接触过,叫最小二乘法。

  线性回归试图学得一个线性模型以尽可能准确地预测输出结果。 
  先从简单的模型看起: 
  首先,我们只考虑单组变量的情况,有: 
这里写图片描述 使得 这里写图片描述 
  假设有m个数据,我们希望通过x预测的结果f(x)来估计y。其中w和b都是线性回归模型的参数。 
  为了能更好地预测出结果,我们希望自己预测的结果f(x)与y的差值尽可能地小,所以我们可以写出代价函数(cost function)如下: 
这里写图片描述 
  接着代入f(x)的公式可以得到: 
这里写图片描述 
  不难看出,这里的代价函数表示的是预测值f(x)与实际值y之间的误差的平方。它对应了常用的欧几里得距离简称“欧氏距离”。基于均方误差最小化来求解模型的方法我们叫做“最小二乘法”。在线性回归中,最小二乘法实质上就是找到一条直线,使所有样本数据到该直线的欧式距离之和最小,即误差最小。 
  我们希望这个代价函数能有最小值,那么就分别对其求w和b的偏导,使其等于0,求解方程。 
  先求偏导,得到下面两个式子: 
这里写图片描述

这里写图片描述 
  很明显,公式中的参数m,b,w都与i无关,简化时可以直接提出来。 
  另这两个偏导等于0: 
  求解方程组,解得: 
这里写图片描述

这里写图片描述 
  这样根据数据集中给出的x和y,我们可以求出w和b来构建简单的线性模型来预测结果。

  接下来,推广到更一般的情况: 
  我们假设数据集中共有m个样本,每个样本有n个特征,用X矩阵表示样本和特征,是一个m×n的矩阵: 
这里写图片描述

  用Y矩阵表示标签,是一个m×1的矩阵: 
这里写图片描述

  为了构建线性模型,我们还需要假设一些参数: 
这里写图片描述 
(有时还要加一个偏差(bias)也就是这里写图片描述, 为了推导方便没加,实际上结果是一样的)

  好了,我们可以表示出线性模型了: 
这里写图片描述 
  h(x)表示假设,即hypothesis。通过矩阵乘法,我们知道结果是一个n×1的矩阵。 
  跟前面推导单变量的线性回归模型时一样,列出代价函数: 
这里写图片描述 
  这里的1/2并无太大意义,只是为了求导时能将参数正好消掉而加上。 
  代价函数代表了误差,我们希望它尽可能地小,所以要对它求偏导并令偏导数为0,求解方程。 
  在求偏导之前先展开一下: 
这里写图片描述 
这里写图片描述

  接下来对这里写图片描述 求导,先给出几个矩阵求导的公式: 
这里写图片描述

这里写图片描述

这里写图片描述

  对代价函数这里写图片描述 求关于这里写图片描述 的偏导,并令其等于0。

  求偏导。 
这里写图片描述

  套用前面给出的矩阵求导公式。 
这里写图片描述

  最后化简得到: 
这里写图片描述

  好了,另这个偏导数等于0: 
这里写图片描述

  解得: 
这里写图片描述

OK,推导完毕。 
把知识点梳理一遍发现清楚了很多。写公式真的很累,明天再把线性回归的代码补上。 
(ง •̀_•́)ง


### 一元线性回归中的最小二乘法推导 在一元线性回归中,目标是找到一条直线来最好地描述两个变量 \( x \) 和 \( y \) 之间的关系。这条直线可以用下面的方程表示: \[ y = wx + b \] 其中: - \( w \) 是斜率, - \( b \) 是截距。 为了使模型尽可能好地拟合数据集,需要定义一种衡量标准来评估不同参数组合下的误差大小。常用的方法是最小化残差平方和 (RSS),也称为最小二乘法。具体来说,对于给定的数据点集合 \( {(x_i, y_i)}_{i=1}^{n} \),希望找到最优的 \( w \) 和 \( b \),使得所有样本点到该直线的距离之和最小[^1]。 #### 定义损失函数 设实际观测值为 \( y_i \),而根据当前假设得到的预测值为 \( \hat{y}_i = wx_i + b \),则第 i 个样本对应的残差 e 可以写作: \[ e_i = y_i - (\widehat{wx_i+b}) \] 因此,整个训练集中所有样本的总误差 E(w,b) 表达如下: \[ E(w,b)=\sum_{i=1}^ne_i^2=\sum_{i=1}^n(y_i-(wx_i+b))^2 \] 这个表达式就是所谓的 **均方误差** 或者说 **残差平方和** ,它用来度量我们的模型与真实情况之间差距的程度[^2]。 #### 寻找最佳参数 为了让上述公式达到极小值,可以通过对 \( w \) 和 \( b \) 分别求偏导数,并令其等于零来进行优化操作。这样做的目的是让这些参数能够最大程度上减小整体误差。下面是具体的计算过程: 针对 \( w \): \[ \frac{\partial}{\partial w}\left[\sum_{i=1}^{n}(y_i-wx_i-b)^2\right]=0 \] 展开后简化可得: \[ 2\cdot(-)\sum_{i=1}^{n}x_ie_i=-2\sum_{i=1}^{n}x_i(y_i-wx_i-b)=0 \] 进一步整理得出关于 \( w \) 的正规方程形式: \[ nwb+\sum_{i=1}^{n}bx_i-\sum_{i=1}^{n}xy_i+w\sum_{i=1}^{n}x_i^2=0 \] 同理,针对 \( b \): \[ \frac{\partial}{\partial b}\left[\sum_{i=1}^{n}(y_i-wx_i-b)^2\right]=0 \] 最终获得另一个正规方程: \[ nb+\sum_{i=1}^{n}wx_i-\sum_{i=1}^{n}y_i=0 \] 联立这两个方程式即可解出 \( w \) 和 \( b \)[^3]。 通过以上步骤完成了一元线性回归里最小二乘法公式理论证明。当有了具体的数值之后就可以带入相应的公式去估算未知系数了。 ```python import numpy as np def compute_coefficients(X, Y): """ 计算简单线性回归的最佳拟合线 """ mean_x = np.mean(X) mean_y = np.mean(Y) num = sum((X-mean_x)*(Y-mean_y)) den = sum(pow((X-mean_x), 2)) slope = num / den intercept = mean_y - slope*mean_x return slope, intercept ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值