机器学习基础:线性回归全面解析与Python实战

一、什么是线性回归?

线性回归是机器学习中最基础的监督学习算法,用于建模自变量(特征)与因变量(目标)之间的线性关系。其核心目标是通过数据拟合一条最佳直线(或平面),实现对连续型数值的预测。

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的《房价预测竞赛》或《糖尿病进展预测》数据集实战练习。下节课将深入讲解逻辑回归与分类任务!