什么是线性回归,它的基本假设是什么

什么是线性回归?

线性回归是一种统计学和机器学习中常用的算法,用于建立一个自变量(输入变量)和因变量(输出变量)之间的线性关系模型。它的目标是通过寻找最佳拟合直线来预测或解释数据。线性回归可以应用于各种问题领域,如经济学、金融学、医学等。

基本假设

线性回归有以下基本假设:
1. 线性性:自变量和因变量之间存在一个线性关系。
2. 独立性:自变量之间相互独立,即不存在多重共线性。
3. 齐次性方差:残差在各自变量的取值上具有相同的方差。
4. 正态性:残差服从正态分布。

算法原理

线性回归的目标是找到一条直线,使得所有数据点到该直线的距离之和最小化。这个距离可以用残差的平方和来衡量,称为最小二乘法。通过最小二乘法,可以得到线性回归的参数估计。

公式推导

假设我们有m个样本,每个样本有n个自变量,表示为 X = [x1, x2, …, xn]^T (n维列向量)。对于每个样本,对应的因变量表示为 y,表示为 y = [y1, y2, …, ym]^T (m维列向量)。

我们的目标是找到一个权重向量 W = [w0, w1, …, wn]^T,使得预测值 y_hat 和实际值 y 的平方差最小。其中,预测值 y_hat 表示为 y_hat = XW。

使用最小二乘法,我们的目标是最小化损失函数 J(W),定义为:

$$J(W) = \frac{1}{2m} \sum_{i=1}^{m}(y_i – y_i^{hat})^2$$

为了最小化损失函数 J(W),我们需要对 W 求导,并将导数置为零,得到 W 的最佳估计值。

我们首先定义 X 的扩展矩阵 X’,其中包含一列用于表示截距。X’ 的维度为 m 行 (样本数),n+1 列 (自变量数+1),定义为:

$$X’ = [1, X]$$

其中的1表示截距,为了计算的方便。

我们的目标是找到 W’ = [w0, w1, …, wn],使得预测值 y_hat 和实际值 y 的平方差最小。其中,预测值 y_hat 表示为 y_hat = X’W’。

将 J(W) 对 W’ 求导并置零,可以得到最佳估计值 W’ 的闭式解 (closed-form solution),表示为:

$$W’ = (X’^T X’)^{-1} X’^T y$$

使用这个最佳估计值 W’,我们可以对新的样本进行预测。

计算步骤

  1. 准备数据集:准备包含自变量和因变量的数据集。
  2. 特征缩放:对自变量进行特征缩放,以防止某些变量的值过大对回归结果产生过大的影响。
  3. 扩展矩阵:将自变量矩阵 X 扩展为 X’,添加一列全为1的列。
  4. 计算最佳估计值:计算最佳估计值 W’ = (X’^T X’)^{-1} X’^T y。
  5. 预测:使用最佳估计值进行预测,计算预测值 y_hat = X’W’。
  6. 模型评估:评估模型的性能,可以使用均方差 (mean squared error) 等指标进行评估。

Python代码示例

下面是一个使用 Python 进行线性回归的示例,使用虚拟数据集生成样本并进行回归分析。

import numpy as np
import matplotlib.pyplot as plt

# 生成虚拟数据集
np.random.seed(0)
m = 100 # 样本数
X = np.linspace(0, 10, m).reshape(m, 1)
y = 2*X + np.random.randn(m, 1)

# 特征缩放
X_mean = np.mean(X)
X_std = np.std(X)
X_scaled = (X - X_mean) / X_std

# 扩展矩阵
X_extended = np.concatenate((np.ones((m, 1)), X_scaled), axis=1)

# 最佳估计值
W = np.linalg.inv(X_extended.T.dot(X_extended)).dot(X_extended.T).dot(y)

# 预测
y_hat = X_extended.dot(W)

# 绘制数据和拟合直线
plt.scatter(X, y, label='Data')
plt.plot(X, y_hat, color='red', label='Linear Regression')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()

代码细节解释

  1. 生成虚拟数据集:使用 np.linspace 生成 m 个样本点,表示为 X。然后,根据线性关系 y = 2*X + 噪声 生成对应的因变量 y。这里的噪声使用 np.random.randn 生成服从正态分布的随机数。
  2. 特征缩放:计算自变量 X 的均值和标准差,并进行特征缩放操作,得到 X_scaled
  3. 扩展矩阵:使用 np.concatenate 将一列全为1的列添加到 X_scaled 头部,得到 X_extended
  4. 最佳估计值:使用 np.linalg.inv 计算 X_extended 的逆矩阵,然后使用矩阵相乘的方式计算最佳估计值 W
  5. 预测:使用 X_extended 和最佳估计值 W 计算预测值 y_hat
  6. 绘图:使用 plt.scatter 绘制原始数据点,使用 plt.plot 绘制拟合直线,使用 plt.xlabelplt.ylabel 设置坐标轴标签,使用 plt.legend 显示图例,并使用 plt.show 显示图形。

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/824205/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球