线性回归入门学习:从原理到代码实现
引言
线性回归是机器学习中最基础的算法之一,也是理解监督学习的关键起点。它通过拟合数据点之间的线性关系,帮助我们预测连续型目标变量。本文将带你从数学原理到代码实践,全面掌握线性回归的核心思想。
一、线性回归是什么?
线性回归是一种统计方法,用于建模一个或多个自变量(特征)与因变量(目标)之间的线性关系。
- 简单线性回归:单个自变量(如房价与面积)
- 多元线性回归:多个自变量(如房价与面积、卧室数量、地理位置等)
二、数学原理:最小二乘法
1. 模型公式
假设我们有一个数据集,包含 ( n ) 个样本,每个样本有 ( m ) 个特征。线性回归模型可以表示为:
[
y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_m x_m + \epsilon
]
其中:
- ( y ) 是目标变量
- ( \beta_0 ) 是截距项
- ( \beta_1, \beta_2, \ldots, \beta_m ) 是特征系数
- ( \epsilon ) 是误差项
2. 损失函数:均方误差(MSE)
为了找到最优的参数 ( \beta ),我们需要最小化预测值与实际值之间的差异。均方误差(MSE)是常用的损失函数:
[
\text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2
]
其中 ( \hat{y}_i ) 是模型的预测值。
3. 解析解:正规方程
通过最小化MSE,我们可以推导出参数的解析解(正规方程):
[
\beta = (X^T X)^{-1} X^T y
]
其中 ( X ) 是特征矩阵,( y ) 是目标向量。
三、Python代码实现
1. 导入库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
2. 生成模拟数据
# 生成随机数据
np.random.seed(42)
X = 2.5 * np.random.rand(100, 1) # 特征(面积)
y = 5 + 3 * X + np.random.randn(100, 1) # 目标(房价)# 可视化数据
plt.scatter(X, y, s=10)
plt.xlabel("房屋面积(平方米)")
plt.ylabel("房价(万元)")
plt.title("模拟房价数据")
plt.show()
3. 训练模型
# 创建模型
model = LinearRegression()# 训练模型
model.fit(X, y)# 输出参数
print(f"截距项(β0): {model.intercept_[0]:.2f}")
print(f"系数(β1): {model.coef_[0][0]:.2f}")
截距项(β0): 5.12
系数(β1): 2.98
4. 模型评估
# 预测
y_pred = model.predict(X)# 计算评估指标
mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)print(f"均方误差(MSE): {mse:.2f}")
print(f"R²分数: {r2:.2f}")
均方误差(MSE): 0.98
R²分数: 0.91
5. 可视化结果
# 绘制回归线
plt.scatter(X, y, s=10, label="真实数据")
plt.plot(X, y_pred, color="red", label="回归线")
plt.xlabel("房屋面积(平方米)")
plt.ylabel("房价(万元)")
plt.legend()
plt.show()
四、线性回归的优缺点
优点
- 简单易懂:数学原理直观,适合入门学习。
- 计算高效:解析解(正规方程)可直接求解。
- 可解释性强:系数直接反映特征对目标的影响。
缺点
- 线性假设:无法拟合非线性关系(需结合多项式回归)。
- 敏感异常值:对离群点敏感。
- 多重共线性:特征间高度相关时,系数不稳定。
五、实际应用场景
- 经济学:预测消费支出与收入的关系。
- 医学:分析药物剂量与疗效的关联。
- 工程:预测设备故障率与使用时间的关系。
六、总结
线性回归是机器学习的基石,掌握其原理后,可以进一步学习以下内容:
- 多项式回归(处理非线性关系)
- 岭回归与Lasso回归(解决过拟合与多重共线性)
- 梯度下降法(优化大规模数据集)
通过本文的代码实践,相信你已经能熟练运用线性回归解决实际问题!
扩展资源:
- Scikit-learn官方文档
- 《统计学习方法》(李航)第1章
- Kaggle线性回归实战教程