📜  回归算法-线性回归(1)

📅  最后修改于: 2023-12-03 15:23:01.887000             🧑  作者: Mango

回归算法-线性回归

简介

线性回归是一种常用的回归分析方法,用于建立因变量和一个或多个自变量之间线性关系的模型。线性回归模型通常用于预测数值型变量。

线性回归模型的基本假设是,因变量与自变量之间存在线性关系,且模型中错误项取自一个均值为0且方差为常数的正态分布。

基本公式

在线性回归模型中,我们希望找到一个最佳的"拟合直线",使得模型的预测误差最小化。假设我们有一个因变量 $y$ 和 $p$ 个自变量 $x_1,x_2,...,x_p$,则线性回归模型的基本公式为:

$y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + ... + \beta_p x_p + \epsilon$

其中,$\beta_i$ 表示第 $i$ 个自变量对因变量的影响系数,$\epsilon$ 表示误差项。

我们可以将上述公式用矩阵表示,得到形如下文的矩阵形式。

矩阵形式

设有 $n$ 个样本,$p$ 个自变量。令 $\textbf{X}$ 表示自变量的矩阵,其大小为 $n\times(p+1)$,第一列均为 1。$\textbf{Y}$ 表示因变量的矩阵,大小为 $n\times1$。

则线性回归模型的矩阵形式为:

$\textbf{Y} = \textbf{X}\boldsymbol{\beta} + \boldsymbol{\epsilon}$

其中,$\boldsymbol{\beta}$ 表示自变量的系数矩阵,其大小为 $(p+1)\times1$。

模型求解

线性回归模型的求解过程,就是利用给定的自变量和因变量数据,来确定最佳的系数矩阵 $\boldsymbol{\beta}$,从而得到一个最优的拟合直线。

最常用的求解方法是最小二乘法。通过最小化预测值与真实值之间的平方误差和,来得到系数矩阵 $\boldsymbol{\beta}$。具体来说,最小二乘法将系数矩阵 $\boldsymbol{\beta}$ 定义为使得误差和 $S$ 最小的向量,即:

$\underset{\boldsymbol{\beta}}{\text{arg min}}\ S(\boldsymbol{\beta}) = \sum_{i=1}^n (y_i - \hat{y}_i)^2$

其中,

$y_i$ 表示第 $i$ 个样本的真实值; $\hat{y}_i$ 表示第 $i$ 个样本的预测值; $S(\boldsymbol{\beta})$ 表示所有样本的误差平方和。

通过对 $S(\boldsymbol{\beta})$ 求导,得到最小化误差平方和的系数矩阵 $\boldsymbol{\beta}$ 的解析解:

$\boldsymbol{\beta} = (\textbf{X}^T\textbf{X})^{-1}\textbf{X}^T\textbf{Y}$

其中,$\textbf{X}^T$ 表示 $\textbf{X}$ 的转置矩阵,$(\textbf{X}^T\textbf{X})^{-1}$ 表示 $(\textbf{X}^T\textbf{X})$ 的逆矩阵。

代码实现

以下是用 Python 实现线性回归的代码示例。本例使用 scikit-learn 库中的 linear_model 模块来实现线性回归模型。

from sklearn import linear_model

# 构建训练数据
x_train = [[0], [1], [2], [3], [4], [5]]
y_train = [0, 1, 2, 3, 4, 5]

# 构建线性回归模型
model = linear_model.LinearRegression()

# 拟合模型
model.fit(x_train, y_train)

# 预测
x_test = [[6], [7], [8]]
y_test = model.predict(x_test)
print(y_test)

在上述代码中,我们首先构建了一组训练数据,其中自变量 $x$ 为 0 到 5 共6个数,因变量 $y$ 等于 $x$。然后,我们使用 scikit-learn 库中的 linear_model 模块构建了一个线性回归模型,并将训练数据传入到这个模型中进行拟合。最后,我们利用这个拟合好的模型,对自变量为 6、7、8 的三个数进行预测,得到了对应的因变量预测值。