线性回归与最小二乘法

本文介绍了线性回归中的最小二乘法,探讨了岭回归、Lasso回归和ElasticNet回归,并详细阐述了主成分分析(PCA)的原理和应用。PCA通过协方差矩阵的特征值和特征向量降低数据维度,保持最大方差。同时,文章还讨论了矩阵的迹和无偏估计在统计学中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线性回归与最小二乘法

最小二乘法是我们经常用到的求解模型的回归方法,是一种优化方法,对于一个线性模型

Xθ=y X θ = y
X X m n n 列的矩阵,代表 m 个样本,每个样本有 n n 个变量,即有 m 个等式,未知数 n n 个, m > n θ θ y y 为一维向量,该方程没有解,但可以选择适合的 θ 使等式尽可能接近,如果以残差平方和评价,代价函数为
loss=||Xθy||2 l o s s = | | X θ − y | | 2
如何使代价最小是一个优化问题,可以通过梯度下降法求解,也可以通过最小二乘求解,最小二乘解为
θ^=(XTX)1XTy θ ^ = ( X T X ) − 1 X T y
最小二乘解是未知变量的无偏估计,但当X不是列满秩或某些列之间的线性相关性比较大时, XTX X T X 的这些行相同或线性相关性也比较大,使行列式接近于0,即 XTX X T X 接近于奇异,此时 XTX X T X 条件数很大,计算 (XTX)1 ( X T X ) − 1 时的误差会很大,其解缺乏稳定性和可靠性。X矩阵中不同列之间具有完全或高度相关关系叫做多重共线性,这种情况下用最小二乘求得的解释不可靠的,一言蔽之,模型无偏,方差大,解决办法有:

  1. 找到引起多重共线性的变量,将其排除;
  2. 使用逐步回归法,逐步添加和排除变量,使最终使用的变量集合最优;(最常用,最有效)
  3. 通过加入扰动(正则项),增加解的稳定性,即岭回归。
  4. 通过主成分分析得到新的变量集合。

可以用最小二乘法求解的线性回归模型为

y=Xθ+b y = X θ + b
对于y的取值为{0,1}或在[0,1]区间的问题,可以用逻辑回归模型建模
y=σ(Xθ+b) y = σ ( X θ + b )
其中 σ σ 是sigmoid函数

岭回归

岭回归(ridge regression),是线性模型一种有偏回归方法,相比最小二乘法增加了偏差,减小了方差,将最小二乘法中的 loss l o s s 增加l2正则项(二范数的平方 ||θ||22 | | θ | | 2 2 ,向量内积 <θ,θ> < θ , θ > ,向量所有元素的平方和 ni=1θ2i ∑ i = 1 n θ i 2 ),损失函数为

loss=||Xθy||2+αi=1nθ2i l o s s = | | X θ − y | | 2 + α ∑ i = 1 n θ i 2
岭回归的解为
θ(α)=(XTX+αI)1XTy θ ( α ) = ( X T X + α I ) − 1 X T y
其中 I I 为单位矩阵,随着 α 的增大, θ θ 的各项相对于正确值的偏差越来越大, α α 无穷大时, θ θ 趋近于0,可以取多组不同的 α α ,画出每个 θ θ 分量的变化轨迹,也叫岭迹图,借助岭迹图可以确定最佳 α α

Lasso回归:(Least Absolute Shrinkage and Selection Operator),在最小二乘法的损失函数中添加l1正则项(一范数 ||θ||1 | | θ | | 1 ,向量所有元素的绝对值之和 ni=1|θi| ∑ i = 1 n | θ i | ),损失函数为

loss=||Xθy||2+αi=1n|θi| l o s s = | | X θ − y | | 2 + α ∑ i = 1 n | θ i |
Lasso回归的特点,具有特征选择性,对于不重要的特征,对应的 θ θ 容易收缩为0,比岭回归更快速。lasso回归的解法主要有坐标轴下降法和最小角回归法。
坐标轴下降法是一种非梯度优化方法,与梯度下降法沿一个特定方向迭代不同,在每次迭代过程中按一定的次序分别沿着各个坐标轴方向搜索极小值。坐标轴下降法在稀疏矩阵上的计算速度非常快,同时也是lasso回归最快的解法。
最小角回归法是前向选择算法和前向梯度算法的折中版本,详情看 Lasso Regression,利用lasso回归也可以做特征选择。Lasso惩罚项超参数可以基于交叉验证,或者基于信息准则。

ElasticNet回归:同时包含l1和l2正则项的最小二乘法,损失函数为

loss=||Xθy||2+αi=1n|θi|+βi=1nθ2i l o s s = | | X θ − y | | 2 + α ∑ i = 1 n | θ i | + β ∑ i = 1 n θ i 2
另外,可以将ridge,lasso和elasticNet表示成带约束的优化问题
min||
<think>好的,我需要回答用户关于线性回归最小二乘法的Python实现代码的问题。首先,我应该回顾一下用户提供的引用内容,看看有没有相关的代码示例。引用[2]提到有Python实现最小二乘法的代码示例,引用[3]也展示了一个一元线性回归的测试代码,使用numpy库中的矩阵运算。用户可能想要的是如何用Python实现线性回归中的最小二乘法,所以我需要结合这些信息。 首先,我得确认最小二乘法的数学原理,这样才能正确编写代码。线性回归最小二乘法目标是最小化误差平方,通过求导得到参数的闭式解。公式是$\beta = (X^T X)^{-1} X^T Y$。用户提供的引用[3]中的代码就是基于这个公式,使用了numpy的矩阵运算,比如dot做点乘,inv求逆,mat创建矩阵。这应该是一个正确的实现方式。 接下来,我需要考虑如何将这段代码整理成一个完整的示例,可能包括数据准备、参数计算以及预测部分。同时,可能还需要提到梯度下降法作为另一种方法,但用户主要关注最小二乘法,所以重点在闭式解的代码。 另外,用户提供的引用[1][2]也提到了梯度下降法的实现稍微麻烦,但用户现在需要的是最小二乘法的实现,所以应集中在闭式解的方法上。需要确保代码示例正确,并且解释每一步的作用,比如数据reshape成列向量,矩阵转置、相乘、求逆等步骤。 可能还需要注意代码的可读性,比如变量命名注释,这样用户更容易理解。同时,需要验证代码是否正确,比如引用[3]中的例子,X是[1,2,3],Y是[5,10,15],显然斜率应该是5,截距是0,所以结果应该是[[5]],代码输出一致,说明代码是正确的。 然后,生成相关问题的时候,需要考虑用户可能进一步的问题,比如多元线性回归的实现、梯度下降最小二乘法的比较,或者如何处理数据中的异常值等。这样可以帮用户深入理解相关内容。 最后,确保回答结构清晰,分步骤说明实现过程,正确引用提供的参考文献,并在末尾添加相关问题。同时,检查是否符合系统级指令,比如数学公式使用$...$,独立公式用$$...$$,中文回答等。</think>### 线性回归最小二乘法的Python实现 线性回归通过最小二乘法求解模型参数$\beta$,其数学原理为最小化残差平方: $$J(\beta) = \|Y - X\beta\|^2$$ 通过求导可得闭式解: $$\beta = (X^T X)^{-1} X^T Y$$ 以下是Python实现示例: #### 一元线性回归实现 ```python import numpy as np # 数据准备(示例数据) X = np.array([1, 2, 3]).reshape(-1, 1) # 特征列向量 Y = np.array([5, 10, 15]) # 目标值 # 添加偏置项(截距项) X_b = np.c_[np.ones((3, 1)), X] # X矩阵变为[[1,1],[1,2],[1,3]] # 最小二乘法参数计算 beta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(Y) print("截距斜率:", beta) # 输出 [0. 5.][^3] ``` #### 多元线性回归实现 ```python # 生成多元数据(3个特征) X_multi = np.array([[1,2,3], [4,5,6], [7,8,9]]) Y_multi = np.array([10, 20, 30]) # 计算参数 X_multi_b = np.c_[np.ones(3), X_multi] beta_multi = np.linalg.inv(X_multi_b.T @ X_multi_b) @ X_multi_b.T @ Y_multi print("多元回归参数:", beta_multi) ``` #### 代码说明 1. `reshape(-1,1)` 将一维数组转为列向量,符合矩阵运算要求 2. `np.c_[]` 用于合并截距项特征矩阵 3. `@` 运算符等价于 `np.dot()`,表示矩阵乘法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值