机器学习 · 2024年12月29日 0

线性回归(Liner Regression):机器学习中的经典算法

引言

线性回归(Linear Regression)是机器学习中最基础且最广泛使用的算法之一。尽管它的原理简单,但在数据分析、预测建模以及许多实际应用中依然发挥着重要作用。在这篇博客中,我们将深入探讨线性回归的核心概念、算法实现和应用实例,帮助大家全面理解这一经典算法。

什么是线性回归?
线性回归是机器学习中的一种统计方法,用于模拟因变量与一个或多个自变量之间的关系。 它通过对观测数据拟合线性方程来建立关系模型,通常作为更复杂算法的起点,并广泛应用于预测分析。

从本质上讲,线性回归是通过在一组数据点之间寻找最拟合的直线,来模拟因变量(即想要预测的结果)和一个或多个自变量(即用于预测的输入特征)之间的关系。 这条线称为回归线,表示因变量(我们想要预测的结果)和自变量(我们用于预测的输入特征)之间的关系。 简单线性回归线的方程定义如下:

y=mx+c

其中 y 是因变量,x 是自变量,m 是直线的斜率,c 是 y 的截距。 该方程提供了一个将输入映射到预测输出的数学模型,其目标是最大限度地减少预测值和观察值之间的差异,即残差。 通过最小化这些残差,线性回归得出了最能代表数据的模型。

在这里插入图片描述

2. 线性回归的数学原理

简单线性回归

在简单线性回归中,我们有一个自变量 X 和一个因变量 Y。模型假设 Y 与 X 存在一个线性关系:

Y=β0​+β1X+ϵ

其中:

  • Y 是因变量(目标输出),
  • X 是自变量(输入特征),
  • β0是截距(intercept),
  • β1是斜率(slope),
  • ϵ是误差项。

多元线性回归

在多元线性回归中,我们有多个自变量 X1 , X 2 , … , X n 模型的形式变为:

Y=β0+β1X1+β2X2+⋯+βnXn+ϵ

目标是通过调整参数 $β0,β1,…,βn $来最小化误差,使得模型能够准确预测 Y YY。

目标:最小化损失函数

线性回归的目标是通过最小化损失函数来找到最佳的参数。最常用的损失函数是均方误差(MSE):

MSE=m1​i=1∑m​(yi​−yi​^​)2

其中 m 是训练样本的数量,yi是实际值,yi^ 是模型预测值。

通过梯度下降法或正规方程等方法可以求解最优的参数β

3.如何训练线性回归模型?

训练线性回归模型的目标就是找到一组最佳参数 β0,β1,…,βn。常用的训练方法包括:

梯度下降法

梯度下降法通过迭代更新参数,逐步降低损失函数的值。每次更新的公式为:

其中 α 是学习率,控制每次更新的步长。

正规方程

正规方程是一种直接求解最优参数的方式,无需迭代。其公式为:

代码块:

# 导入需要的库
import numpy as np
import matplotlib
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, mean_absolute_error, r2_score

# 设置中文字体
matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 选择支持中文的字体,Windows下通常是SimHei
matplotlib.rcParams['axes.unicode_minus'] = False  # 解决负号 '-' 显示问题

# 1. 准备数据集(假设我们有一组简单的线性数据)
# 这里我们手动创建一个简单的示例数据集
np.random.seed(0)  # 固定随机种子以确保可复现

# 生成一组自变量X和因变量Y,Y = 2X + 1
X = 2 * np.random.rand(100, 1)  # 生成100个随机数作为自变量X
y = 2 * X + 1 + np.random.randn(100, 1)  # 生成因变量y,加入一些噪声

# 2. 数据划分:训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 3. 初始化线性回归模型
model = LinearRegression()

# 4. 训练模型
model.fit(X_train, y_train)

# 5. 预测测试集
y_pred = model.predict(X_test)

# 6. 评估模型
# 计算均方误差 (MSE)、平均绝对误差 (MAE) 和 R² 分数
mse = mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

# 输出模型评估指标
print(f"均方误差 (MSE): {mse:.4f}")
print(f"平均绝对误差 (MAE): {mae:.4f}")
print(f"R² 分数: {r2:.4f}")

# 7. 可视化:数据点和回归线
plt.scatter(X_test, y_test, color='blue', label='真实数据')
plt.plot(X_test, y_pred, color='red', linewidth=2, label='回归线')

# 标注图表
plt.xlabel("自变量 X")
plt.ylabel("因变量 y")
plt.title("线性回归拟合")
plt.legend()
plt.show()

4.线性回归的评估指标

在训练模型之后,评估其效果是非常重要的。常见的评估指标有:

  • 均方误差(MSE):衡量预测值与实际值之间的平均差距。
  • 平均绝对误差(MAE):衡量预测值与实际值之间的绝对差距的平均值。
  • R^2 决定系数:衡量模型拟合优度的指标,值越接近 1 表示模型拟合效果越好。

5.线性回归的应用场景

线性回归被广泛应用于各种领域,尤其是在以下场景中具有重要意义:

  • 经济学:预测股票价格、房价、收入等。
  • 医疗:根据患者的年龄、体重等因素预测疾病风险。
  • 工程:根据不同参数预测产品性能。
  • 市场营销:分析广告投放的效果、销售趋势等。

6.线性回归的优缺点

优点:

  • 简单易懂:线性回归的数学原理直观,便于理解和实现。
  • 计算高效:对于小规模数据集,训练速度很快。
  • 解释性强:模型结果可以很容易地解释,尤其是参数 β0\beta_0β0 和 β1\beta_1β1 具有明确的物理含义。

缺点:

  • 假设过于简单:线性回归假设数据之间存在线性关系,但实际情况可能更复杂,不能很好地处理非线性数据。
  • 对异常值敏感:线性回归容易受到异常值(离群点)的影响,可能导致模型偏差。
  • 假设特征之间独立:多元线性回归假设各个特征之间没有强相关性,但在实际应用中往往很难满足这个假设。

7.总结

线性回归是一种经典的回归分析方法,适用于特征与目标之间存在线性关系的情况。通过最小化残差平方和,线性回归能够很好地拟合数据并进行预测。尽管它在许多实际应用中表现良好,但也存在一些限制,特别是对数据假设和异常值的敏感性。了解其原理和优缺点将帮助你在实际应用中做出更明智的决策。