一、什么是线性回归?
线性回归是机器学习中最基础的监督学习算法,用于建模自变量(特征)与因变量(目标)之间的线性关系。其核心目标是通过数据拟合一条最佳直线(或平面),实现对连续型数值的预测。
1.1 核心概念
- 自变量(X):输入特征(如房屋面积、广告投入)
- 因变量(y):预测目标(如房价、销售额)
- 模型方程:
"y = β₀ + β₁x₁ + β₂x₂ + ... + βₙxₙ + ε"
-
"β₀":截距(y轴交点)
-
"β₁~βₙ":斜率(特征权重)
-
"ε":随机噪声(服从正态分布)
1.2 应用场景
领域 典型问题
经济学 GDP与失业率关系分析
医疗健康 临床指标与疾病进展预测
市场营销 广告投入对销售额的影响
房地产 房价预测(面积、位置等)
二、数学原理与模型构建
2.1 简单线性回归(单特征)
模型方程:
"y = β₀ + β₁x"
目标:求解最优
"β₀"和
"β₁",使预测误差最小。
最小二乘法
通过最小化均方误差(MSE) 求解参数:
MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2
参数计算公式:
- 斜率:
"β₁ = Σ[(xᵢ - x̄)(yᵢ - ȳ)] / Σ[(xᵢ - x̄)²]"
- 截距:
"β₀ = ȳ - β₁x̄"
2.2 多元线性回归(多特征)
模型方程:
"y = β₀ + β₁x₁ + β₂x₂ + ... + βₙxₙ"
- 矩阵求解法:
"β = (XᵀX)⁻¹Xᵀy"(X为特征矩阵,y为目标向量)
- 优势:可分析多个特征对目标的综合影响(如糖尿病预测中的血糖、血压等指标)
2.3 模型评估指标
- 均方误差(MSE):预测值与真实值差的平方均值(越小越好)
- 决定系数(R²):模型解释数据变异性的比例(0~1,越大越好)
三、Python实现:从零手动实现到Scikit-learn
3.1 手动实现(NumPy)
步骤:数据生成 → 参数计算 → 预测与可视化
import numpy as np
import matplotlib.pyplot as plt
# 生成数据(y=4+3x+噪声)
np.random.seed(0)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
# 计算斜率和截距
X_mean, y_mean = np.mean(X), np.mean(y)
numerator = np.sum((X - X_mean) * (y - y_mean))
denominator = np.sum((X - X_mean) ** 2)
beta_1 = numerator / denominator
beta_0 = y_mean - beta_1 * X_mean
# 预测与绘图
y_pred = beta_0 + beta_1 * X
plt.scatter(X, y)
plt.plot(X, y_pred, 'r-', linewidth=2)
plt.show()
输出结果:斜率≈3.0,截距≈4.1(接近真实值)
3.2 使用Scikit-learn库(高效实现)
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# 训练模型
model = LinearRegression()
model.fit(X, y)
# 预测与评估
y_pred = model.predict(X)
mse = mean_squared_error(y, y_pred)
print(f"斜率: {model.coef_[0][0]:.2f}, 截距: {model.intercept_[0]:.2f}")
print(f"均方误差: {mse:.2f}")
优势:代码简洁、支持大规模数据、内置评估功能
四、进阶内容与局限性
4.1 梯度下降算法
用途:当特征矩阵过大或不满秩时,替代最小二乘法优化参数。
原理:沿代价函数负梯度方向迭代更新参数,直至收敛:
\beta_j := \beta_j - \alpha \frac{\partial}{\partial\beta_j}J(\beta)
-
"α":学习率(控制步长)
4.2 局限性及改进方案
局限性 改进方法
假设线性关系(实际可能非线性) 多项式回归、特征工程
对异常值敏感 数据清洗、Robust Regression
多重共线性问题 正则化(Ridge/Lasso回归)
五、实战案例:糖尿病预测
数据集:Scikit-learn内置糖尿病数据集(10个特征)
目标:预测疾病进展程度
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
# 加载数据
data = load_diabetes()
X, y = data.data, data.target
# 划分训练集/测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 训练多元线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)
# 评估
score = model.score(X_test, y_test) # R²约为0.55
print(f"模型解释方差比例: {score:.2f}")
结论:模型仅能解释55%的方差,需结合特征选择或复杂模型提升精度
六、课程总结
线性回归是机器学习的基石模型,核心价值在于:
1. 直观性:通过权重解释特征对目标的影响(如房价模型中面积权重更高)
2. 扩展性:可结合正则化、多项式变换解决复杂问题
3. 入门友好:理解其原理是学习神经网络等复杂模型的基础
致学员:掌握本节内容后,可尝试Kaggle的《房价预测竞赛》或《糖尿病进展预测》数据集实战练习。下节课将深入讲解逻辑回归与分类任务!