线性回归(Linear Regression)中的数学推导--到损失函数求导

博客围绕使用线性规划根据样本x预测y展开。先给出假设条件,将预测方程写成矩阵形式,接着探讨不同情况下损失函数J的求解,包括矩阵可逆与不可逆的情形,还分析了样本数与参数维度不同时的处理方法,最后对损失函数J进行求导。

1.假设条件

x1,x2,…,xN,xi∈Rnx_1,x_2,\ldots,x_N,x_i\in R^nx1,x2,,xN,xiRn (x为样本,RnR^nRn表示样本的维度为n,此小n是一个方程中未知数的个数的n,而大N为样本的个数。)
y1,y2,…,yN,yi∈R1y_1,y_2,\ldots,y_N,y_i \in R^1y1,y2,,yN,yiR1 (y为实际值,因为实际值每个方程只有一个,所以R1R^1R1表示只有1维。)

2.使用线性规划根据样本x预测y:

y1=x11a1+x12a2+⋯+x1nany_1=x_{11}a_1+x_{12}a_2+\cdots+x_{1n}a_ny1=x11a1+x12a2++x1nan
y2=x21a1+x22a2+⋯+x2nany_2=x_{21}a_1+x_{22}a_2+\cdots+x_{2n}a_ny2=x21a1+x22a2++x2nan
⋮\vdots
yN=x21a1+x22a2+⋯+x2nany_N=x_{21}a_1+x_{22}a_2+\cdots+x_{2n}a_nyN=x21a1+x22a2++x2nan

3.写成矩阵形式:

[x11x12…x1nx21x22…x2n⋮⋮⋱⋮xN1xN2…xNn][a1a2⋮an]=[y1y2⋮yN]\left[\begin{matrix} x_{11}&x_{12}&\ldots&x_{1n}\\ x_{21}&x_{22}&\ldots&x_{2n}\\ \vdots&\vdots&\ddots&\vdots\\ x_{N1}&x_{N2}&\ldots&x_{Nn} \end{matrix}\right] \left[\begin{matrix} a_1\\a_2\\\vdots\\a_n \end{matrix}\right]= \left[\begin{matrix} y_1\\y_2\\\vdots\\y_N \end{matrix}\right]x11x21xN1x12x22xN2x1nx2nxNna1a2an=y1y2yN

符号表示矩阵乘法:
XN×nan×1=YN×1X_{N\times n}a_{n\times 1}=Y_{N\times 1}XN×nan×1=YN×1
i.当N=nN=nN=n,且XN×nX_{N\times n}XN×n可逆时,a=X−1Ya=X^{-1}Ya=X1Y

ii.当N≠nN\neq nN=n时(一般情况下N和n不相等),最小二乘法计算损失函数(loss)
min∣∣Xa−Y∣∣2=minJmin||Xa-Y||^2=minJminXaY2=minJ
(这里为2-范数,即||Xa-Y||表示Xa-Y矩阵中每个元素的平方和再开平方根。)

4.求损失函数JJJ

矩阵的结构:XNn,an1,yN1X_{Nn},a_{n1},y_{N1}XNn,an1,yN1

i. 如果XNnX_{Nn}XNn可逆,则N=nN=nN=n,此时:
XN×nan×1=YN×1X_{N\times n}a_{n\times 1}=Y_{N\times 1}XN×nan×1=YN×1
an×1=XN×n−1YN×1a_{n\times 1}=X_{N\times n}^{-1}Y_{N\times 1}an×1=XN×n1YN×1

ii.如果N≠nN\neq nN=nXNnX_{Nn}XNn不可逆,方程XN×nan×1=YN×1X_{N\times n}a_{n\times 1}=Y_{N\times 1}XN×nan×1=YN×1不一定有解,所以就要让预测值Xa和实际值Y的差距尽量小,所有要让Xa−YXa-YXaY的范数尽可能小,即:min∣∣Xa−Y∣∣2=minJmin||Xa-Y||^2=minJminXaY2=minJ

JJJ求导:∂J∂a=XT(Xa−Y)\frac{\partial J}{\partial a}=X^T(Xa-Y)aJ=XT(XaY)

即:XTXa=XYX^TXa=X^YXTXa=XY

此时要分情况讨论:XTXX^TXXTX是否可逆

1.N>n时(样本数大于参数维度),如N=5,n=3,(XTX)3×3(X^TX)_{3\times3}(XTX)3×3一般是可逆的
此时: a=(XTX)−1XTYa=(X^TX)^{-1}X^TYa=(XTX)1XTY
(XTX)−1XT(X^TX)^{-1}X^T(XTX)1XT是伪逆。

2.N<n时(样本数小于参数维度,参数太多,样本数不足,模型过于复杂,会出现过拟合现象),如N=5,n=3,
要解决过拟合的问题,可以加入正则项:
J=∣∣Xa−Y∣∣2+λ∣∣a∣∣2=J=||Xa-Y||^2+\lambda||a||^2=J=XaY2+λa2=
λ∣∣a∣∣2\lambda||a||^2λa2为正则项
则:
∂J∂a=XT(Xa−Y)+λa=0\frac{\partial J}{\partial a}=X^T(Xa-Y)+\lambda a=0aJ=XT(XaY)+λa=0

K=Xa−YK=Xa-YK=XaY为N行1列的向量,
求列向量的模:
∣∣K∣∣=K⃗⋅K⃗=XTX||K||=\sqrt {\vec {K}\cdot\vec {K}}=\sqrt {X^TX}K=KK=XTX
J=∣∣K∣∣2=KTKJ=||K||^2=K^TKJ=K2=KTK
所以:
J=J(a)=∣∣K∣∣2=KTK=(xa−y)T(xa−y)=(aTxT−yT)(xa−y)=aTxTxa−aTxTy−yTxa+yTyJ=J(a)=||K||^2=K^TK=(xa-y)^T(xa-y)=(a^Tx^T-y^T)(xa-y)=a^Tx^Txa-a^Tx^Ty-y^Txa+y^TyJ=J(a)=K2=KTK=(xay)T(xay)=(aTxTyT)(xay)=aTxTxaaTxTyyTxa+yTy

(矩阵转置的性质:(A+B)T=AT+BT,(AB)T=BTAT(A+B)^T=A^T+B^T,(AB)^T=B^TA^T(A+B)T=AT+BT,(AB)T=BTAT
(J看成a的函数,因为要拟合的是储存有系数信息的a矩阵)

4.对损失函数JJJ求导

求导:
J=J(a)=aTxTxa−aTxTy−yTxa+yTyJ=J(a)=a^Tx^Txa-a^Tx^Ty-y^Txa+y^TyJ=J(a)=aTxTxaaTxTyyTxa+yTy

第一项:
∂aTxTxa∂a=(xTx+(xTx)T)a=2xTxa\frac{\partial a^Tx^Txa}{\partial a}=(x^Tx+(x^Tx)^T)a=2x^TxaaaTxTxa=(xTx+(xTx)T)a=2xTxa,
(xTx为A,a为xx^Tx为A,a为xxTxAaxxTxx^TxxTx为对称矩阵)

(矩阵求导公式:f(x)=xTAx,∂f(x)∂x=∂(xTAx)∂x=Ax+ATx=(A+AT)xf(x)=x^TAx,\frac{\partial f(x)}{\partial x}=\frac{\partial (x^TAx)}{\partial x}=Ax+A^Tx=(A+A^T)xf(x)=xTAx,xf(x)=x(xTAx)=Ax+ATx=(A+AT)x,当AAA为对称矩阵时,∂(xTAx)∂x=2Ax\frac{\partial (x^TAx)}{\partial x}=2Axx(xTAx)=2Ax )

第二项:
aTxTy=aT(xTy)=(xTy)Ta=yTxaa^Tx^Ty=a^T(x^Ty)=(x^Ty)^Ta=y^TxaaTxTy=aT(xTy)=(xTy)Ta=yTxa,与第三项相同

第三项:
∂yTxa∂a=∂[(xTy)Ta]∂a=xTy\frac{\partial y^Txa}{\partial a}=\frac{\partial [(x^Ty)^Ta]}{\partial a}=x^TyayTxa=a[(xTy)Ta]=xTy,

因为yN1y_{N1}yN1y1NTy^T_{1N}y1NTxNnx_{Nn}xNn,则(yTx)1n(y^Tx)_{1n}(yTx)1nan1a_{n1}an1,则(yTx)a(y^Tx)a(yTx)a为1x1的标量;
因为an1a_{n1}an1是列向量,而(yTx)1n(y^Tx)_{1n}(yTx)1n不是列向量,不能用列向量求导公式:见例3
所以取其转置:
(xTy)n1(x^Ty)_{n1}(xTy)n1,(xTy)1nT(x^Ty)^T_{1n}(xTy)1nT,an1a_{n1}an1,所以(xTy)Ta(x^Ty)^Ta(xTy)Ta为1x1的标量
(xTy)n1(x^Ty)_{n1}(xTy)n1为列向量,可用列向量求导公式:
∂yTxa∂a=∂[(xTy)Ta]∂a=xTy\frac{\partial y^Txa}{\partial a}=\frac{\partial [(x^Ty)^Ta]}{\partial a}=x^TyayTxa=a[(xTy)Ta]=xTy,

第四项:
yTyy^TyyTy为常数项,求导为0.

综上:
∂J∂a=2xTxa−2xTy\frac{\partial J}{\partial a}=2x^Txa-2x^TyaJ=2xTxa2xTy,
J=0J=0J=0,则有:
xTxa=xTyx^Txa=x^TyxTxa=xTy

### 一、损失函数的构建方式 多元线性回归是一种用于建模多个特征与目标变量之间线性关系的统计方法。在该模型中,损失函数的构建基于**均方误差**(Mean Squared Error, MSE)原则,用于衡量模型预测值与真实值之间的平均差异程度。 假设一个样本有 $ n $ 个特征,其预测值 $ \hat{y}_i $ 由以下线性方程表示: $$ \hat{y}_i = w_0 + w_1 x_{i1} + w_2 x_{i2} + \ldots + w_n x_{in} $$ 其中,$ w_0 $ 是截距项,$ w_1, w_2, \ldots, w_n $ 是回归系数,$ x_{i1}, x_{i2}, \ldots, x_{in} $ 是样本 $ i $ 的特征值。损失函数的目标是最小化所有样本的预测值与真实值之间的平方误差之和。 多元线性回归损失函数定义如下: $$ J(w) = \frac{1}{2m} \sum_{i=1}^{m} (\hat{y}_i - y_i)^2 $$ 其中: - $ m $ 是训练样本的数量; - $ \hat{y}_i $ 是第 $ i $ 个样本的预测值; - $ y_i $ 是第 $ i $ 个样本的真实值; - $ w $ 是模型参数向量,包含 $ w_0, w_1, \ldots, w_n $。 引入 $ \frac{1}{2} $ 是为了在后续求导时简化计算,不影响优化结果。该损失函数的目标是通过调整参数 $ w $,使 $ J(w) $ 的值最小化,从而提升模型的预测精度 [^1]。 ### 二、损失函数的优化方法 为了最小化损失函数,可以采用以下两种主要方法: #### 1. 解析解法(最小二乘法) 解析解法通过数学推导直接求解出最优的参数 $ w $。对于多元线性回归损失函数对参数 $ w_j $ 求偏导并令其等于零,得到以下解析解: $$ w = (X^T X)^{-1} X^T y $$ 其中: - $ X $ 是特征矩阵,维度为 $ m \times (n+1) $,第一列为全1,对应截距项 $ w_0 $; - $ y $ 是目标变量向量,维度为 $ m \times 1 $。 该方法适用于数据规模较小的情况,计算效率较高 [^2]。 #### 2. 梯度下降法 梯度下降法是一种迭代优化算法,通过逐步调整参数 $ w $ 来减小损失函数的值。梯度下降的更新规则如下: $$ w_j := w_j - \alpha \cdot \frac{1}{m} \sum_{i=1}^{m} (\hat{y}_i - y_i) \cdot x_{ij} $$ 其中: - $ \alpha $ 是学习率,控制每次更新的步长; - $ x_{ij} $ 是第 $ i $ 个样本的第 $ j $ 个特征值。 梯度下降法的优点是可以处理大规模数据集,且适用于更复杂的模型 [^3]。 ### 三、代码示例 以下是一个使用 Python 实现多元线性回归的示例,展示了如何使用 `sklearn.linear_model.LinearRegression` 进行模型训练和预测。 ```python import numpy as np from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error # 生成模拟数据 np.random.seed(0) X = np.random.rand(100, 3) # 100个样本,每个样本3个特征 y = 2 * X[:, 0] + 3 * X[:, 1] + 5 * X[:, 2] + np.random.randn(100) * 0.1 # 训练模型 model = LinearRegression() model.fit(X, y) # 预测与评估 y_pred = model.predict(X) mse = mean_squared_error(y, y_pred) print("模型系数:", model.coef_) print("模型截距:", model.intercept_) print("均方误差:", mse) ``` 该代码首先生成包含3个特征的随机数据,然后使用 `LinearRegression` 拟合模型,并计算预测值与真实值之间的均方误差 [^4]。 ### 四、总结 多元线性回归损失函数基于均方误差构建,旨在最小化模型预测值与真实值之间的差异。通过解析解法或梯度下降法,可以找到最优的模型参数,从而建立一个能够有效预测的线性模型。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值