线性回归的数学原理:从公式到代码实现
本文围绕机器学习基础算法线性回归展开。核心是找线性函数描述输入输出关系,用均方误差作损失函数,通过正规方程求解参数。给出 Python+NumPy 及 Scikit - learn 代码实现。其优点是简单易懂、计算快、可解释性强,缺点是对数据要求高、易过拟合。适用于输入输出呈线性关系场景,助于理解数据规律。
线性回归简介
线性回归是机器学习中最基础且重要的算法之一,它广泛应用于预测和建模问题。其核心思想是在给定一组输入特征和对应的输出值的情况下,通过寻找一个线性函数来描述输入和输出之间的关系。这个线性函数可以用来预测新的输入对应的输出值。

线性回归的数学原理
线性回归模型
假设我们有一个包含 nnn 个样本的数据集 (x1,y1),(x2,y2),cdots,(xn,yn){(x_1, y_1), (x_2, y_2), cdots, (x_n, y_n)}(x1,y1),(x2,y2),cdots,(xn,yn),其中 xix_ixi 是第 iii 个样本的输入特征向量,yiy_iyi 是对应的输出值。对于简单线性回归,xix_ixi 是一个标量;对于多元线性回归,xix_ixi 是一个向量。
线性回归模型可以表示为:
y=heta0+heta1x1+heta2x2+cdots+hetamxm+epsilon y = heta_0 + heta_1x_1 + heta_2x_2 + cdots + heta_mx_m + epsilon y=heta0+heta1x1+heta2x2+cdots+hetamxm+epsilon
其中,yyy 是输出值,$ heta_0, heta_1, cdots, heta_m$ 是模型的参数,x1,x2,cdots,xmx_1, x_2, cdots, x_mx1,x2,cdots,xm 是输入特征,epsilonepsilonepsilon 是误差项,它表示模型无法完全拟合数据的部分。
为了方便表示,我们可以将上述公式写成矩阵形式:
KaTeX parse error: Unexpected character: '' at position 23: …{y} = mathbf{X}̲oldsymbol{ heta…
其中,KaTeX parse error: Unexpected character: '' at position 13: mathbf{y} = ̲egin{bmatrix}y_… 是 nnn 维的输出向量,KaTeX parse error: Unexpected character: '' at position 13: mathbf{X} = ̲egin{bmatrix}1 … 是 nimes(m+1)n imes (m + 1)nimes(m+1) 的输入特征矩阵,KaTeX parse error: Unexpected character: '' at position 1: ̲oldsymbol{ heta… 是 (m+1)(m + 1)(m+1) 维的参数向量,KaTeX parse error: Unexpected character: '' at position 1: ̲oldsymbol{epsil… 是 nnn 维的误差向量。
损失函数
为了找到最优的参数 KaTeX parse error: Unexpected character: '' at position 1: ̲oldsymbol{ heta…,我们需要定义一个损失函数来衡量模型的预测值与真实值之间的差异。在线性回归中,最常用的损失函数是均方误差(Mean Squared Error,MSE):
KaTeX parse error: Unexpected character: '' at position 4: J(̲oldsymbol{ heta…
其中,hatyihat{y}_ihatyi 是第 iii 个样本的预测值,nnn 是样本数量。
参数求解
我们的目标是找到一组参数 KaTeX parse error: Unexpected character: '' at position 1: ̲oldsymbol{ heta…,使得损失函数 KaTeX parse error: Unexpected character: '' at position 3: J(̲oldsymbol{ heta… 最小。可以通过对 KaTeX parse error: Unexpected character: '' at position 3: J(̲oldsymbol{ heta… 求偏导数并令其等于零来求解 KaTeX parse error: Unexpected character: '' at position 1: ̲oldsymbol{ heta…:
KaTeX parse error: Unexpected character: '' at position 17: …frac{partial J(̲oldsymbol{ heta…
解上述方程可得:
KaTeX parse error: Unexpected character: '' at position 2: ̲oldsymbol{ heta…
这就是线性回归参数的解析解,也称为正规方程。
代码实现
简单线性回归
下面是使用 Python 和 NumPy 实现简单线性回归的代码:
import numpy as np
# 生成一些示例数据
np.random.seed(0)
x = np.linspace(0, 10, 100)
y = 2 * x + 1 + np.random.randn(100)
# 添加偏置项
X = np.c_[np.ones((100, 1)), x]
# 计算参数
theta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
print("参数 theta:", theta)
在上述代码中,我们首先生成了一些示例数据,然后添加了偏置项,最后使用正规方程计算了参数 KaTeX parse error: Unexpected character: '' at position 1: ̲oldsymbol{ heta…。
使用 Scikit-learn 实现线性回归
Scikit-learn 是一个强大的机器学习库,它提供了简单易用的线性回归模型。下面是使用 Scikit-learn 实现线性回归的代码:
from sklearn.linear_model import LinearRegression
import numpy as np
# 生成一些示例数据
np.random.seed(0)
x = np.linspace(0, 10, 100).reshape(-1, 1)
y = 2 * x + 1 + np.random.randn(100, 1)
# 创建线性回归模型
model = LinearRegression()
# 训练模型
model.fit(x, y)
# 输出参数
print("截距:", model.intercept_)
print("斜率:", model.coef_)
在上述代码中,我们首先生成了一些示例数据,然后创建了一个线性回归模型,并使用 fit 方法训练模型,最后输出了模型的截距和斜率。
线性回归的优缺点
优点
- 简单易懂:线性回归的模型和原理都比较简单,容易理解和解释。
- 计算效率高:对于小规模数据集,使用正规方程可以快速求解参数。
- 可解释性强:模型的参数可以直接反映输入特征对输出值的影响。
缺点
- 对数据的要求较高:线性回归假设输入和输出之间存在线性关系,如果数据不满足这个假设,模型的效果会很差。
- 容易过拟合:当特征数量较多时,线性回归容易过拟合,需要进行正则化处理。
总结
线性回归是机器学习中最基础的算法之一,它通过寻找一个线性函数来描述输入和输出之间的关系。本文介绍了线性回归的数学原理和代码实现,包括简单线性回归和使用 Scikit-learn 实现线性回归。同时,还讨论了线性回归的优缺点。希望本文能够帮助你更好地理解线性回归。
参考资料
- 《机器学习》(周志华)
- 《Python 机器学习》(Sebastian Raschka)
表格:线性回归与其他回归算法的比较
| 算法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 线性回归 | 简单易懂,计算效率高,可解释性强 | 对数据要求高,容易过拟合 | 输入和输出存在线性关系的场景 |
| 多项式回归 | 可以处理非线性关系 | 容易过拟合,计算复杂度高 | 输入和输出存在非线性关系的场景 |
| 岭回归 | 可以防止过拟合 | 模型复杂度增加 | 特征数量较多的场景 |
| Lasso 回归 | 可以进行特征选择 | 可能会丢失一些重要特征 | 特征数量较多且需要进行特征选择的场景 |
更多推荐

所有评论(0)