【漫话机器学习系列】061.线性回归参数计算(Finding Linear Regression Parameters)
线性回归参数计算(Finding Linear Regression Parameters)
1. 简介
线性回归是一种基础的回归模型,用于通过一个或多个特征预测目标变量。其模型形式为:
其中:
- y:目标变量(因变量)。
- X:特征矩阵(自变量)。
- β:待求解的回归参数(权重)。
- ϵ:误差项。
线性回归的目标是找到回归参数 β,使预测值 Xβ 与目标 y 的差距最小。
2. 参数求解公式
通过最小化残差平方和(RSS,Residual Sum of Squares)来确定最佳参数。RSS 定义为:
展开后:
2.1 最小化 RSS 的闭式解
对 RSS 关于 β 求导并令其为 0:
解得:
2.2 特殊情况
- 当 不可逆(如特征之间高度相关),可以使用伪逆 () 计算参数:
3. 梯度下降法
如果特征数量较大或数据量较多,使用梯度下降法是一种更高效的选择。
-
目标函数:
其中 m 是样本数量。
-
梯度计算:
-
更新规则:
其中:
- α:学习率。
4. 示例代码
4.1 使用闭式解求解参数
import numpy as np
# 示例数据
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]]) # 特征矩阵
y = np.array([1, 2, 2, 3]) # 目标变量
# 添加截距项
X = np.hstack([np.ones((X.shape[0], 1)), X])
# 计算参数
beta = np.linalg.inv(X.T @ X) @ X.T @ y
print("闭式解计算的参数:", beta)
运行结果
闭式解计算的参数: [0. 0. 1.]
4.2 使用梯度下降法求解参数
import numpy as np
# 示例数据
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]]) # 特征矩阵
y = np.array([1, 2, 2, 3]) # 目标变量
# 初始化参数
beta = np.zeros(X.shape[1])
learning_rate = 0.01
epochs = 1000
# 梯度下降
for epoch in range(epochs):
gradient = -1 / len(y) * X.T @ (y - X @ beta)
beta -= learning_rate * gradient
print("梯度下降计算的参数:", beta)
运行结果
梯度下降计算的参数: [0.17636561 0.86974083]
5. 参数解释
-
:
- 截距项,表示当所有特征值为 0 时的预测值。
-
:
- 每个特征的系数,表示该特征对目标变量的线性影响。值越大,影响越显著。
6. 优化方法
-
正则化:
- 为了避免过拟合,可加入正则化项:
- 岭回归(L2正则化):
- Lasso回归(L1正则化):
- 为了避免过拟合,可加入正则化项:
-
标准化:
- 特征标准化(零均值和单位方差)可提升求解效率。
7. 总结
线性回归参数的求解有两种主要方法:
- 闭式解:适用于中小规模数据,但计算复杂度较高。
- 梯度下降:适用于大规模数据,通过迭代优化找到参数。
线性回归是回归分析中的基础方法,为其他复杂模型(如岭回归、Lasso回归和广义线性模型)提供了理论基础。