常见的回归算法有哪些,它们的优缺点是什么

1. 问题背景和定义

回归分析是一种用于研究变量之间关系的统计分析方法。它通过建立一个数学模型,描述自变量与因变量之间的函数关系,并用该模型对因变量进行预测。常见的回归算法包括线性回归、岭回归、LASSO回归和多项式回归等。

在本文中,我们将详细介绍这些常见的回归算法,讨论它们的优缺点,并给出相应的算法原理、公式推导、计算步骤和Python代码示例。

2. 线性回归

线性回归是回归分析中最基本、最常见的方法之一。它建立了自变量$x$与因变量$y$之间线性关系的模型,通过最小二乘法估计出模型的参数。

算法原理

线性回归的目标是找到一条最佳拟合直线,使得拟合值与实际值之间的误差尽可能小。假设我们的线性模型为:$$y = \beta_0 + \beta_1 x$$其中,$y$是因变量,$x$是自变量,$\beta_0$和$\beta_1$是待估计的回归系数。

对于训练集中的每个样本$(x_i, y_i)$,我们的目标是最小化残差平方和(RSS):$$J(\beta_0, \beta_1) = \sum_{i=1}^{n}(y_i – (\beta_0 + \beta_1 x_i))^2$$其中,$n$是训练集中的样本数量。

为了最小化$J(\beta_0, \beta_1)$,我们可以使用最小二乘法,对$\beta_0$和$\beta_1$求偏导,并令偏导数等于零,得到参数的估计值:$$\hat{\beta_1} = \frac{\sum_{i=1}^{n}(x_i – \bar{x})(y_i – \bar{y})}{\sum_{i=1}^{n}(x_i – \bar{x})^2}$$$$\hat{\beta_0} = \bar{y} – \hat{\beta_1}\bar{x}$$其中,$\bar{x}$和$\bar{y}$分别是自变量$x$和因变量$y$的均值。

计算步骤

线性回归的计算步骤如下:

  1. 读取数据集,并将自变量和因变量分离。
  2. 计算自变量和因变量的均值。
  3. 计算回归系数的估计值。
  4. 根据得到的回归系数,计算预测值。
  5. 可以使用各种评估指标(如均方误差、决定系数等)来评估模型的性能。

Python代码示例

下面是一个基本的线性回归的Python代码示例,我们使用scikit-learn库中的LinearRegression模型:

import numpy as np
from sklearn.linear_model import LinearRegression

# 生成虚拟数据集
np.random.seed(0)
X = np.random.rand(100, 1)
y = 2 + 3*X + np.random.rand(100, 1)

# 创建线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X, y)

# 输出参数估计值
print("Intercept: ", model.intercept_)
print("Coefficient: ", model.coef_)

上述代码示例中,我们首先生成了一个虚拟的数据集,然后使用LinearRegression模型拟合数据。最终输出的参数估计值即为回归系数的值。

代码细节解释:

  • 第1行:导入必要的库。
  • 第4行:设置随机种子以保证结果可复现。
  • 第5行:使用np.random.rand()生成100个随机数。
  • 第6行:根据线性模型生成因变量$y$。
  • 第9行:创建了一个LinearRegression对象。
  • 第12行:用数据训练模型。
  • 第15行:输出截距项$\beta_0$的估计值。
  • 第16行:输出斜率项$\beta_1$的估计值。

3. 岭回归

算法原理

岭回归是一种使用L2正则化的线性回归方法。L2正则化通过在最小二乘法的目标函数中添加正则化项,平衡模型的复杂度和拟合程度。

岭回归的目标是最小化调整后的残差平方和(RRSS):$$J(\beta) = \sum_{i=1}^{n}(y_i – \beta_0 – \sum_{j=1}^{p}\beta_j x_{ij})^2 + \lambda\sum_{j=1}^{p}\beta_j^2$$其中,$\lambda$是正则化参数,控制正则化项的权重。

为了求解岭回归的参数估计值,我们需要最小化目标函数$J(\beta)$。参数的估计值可以通过以下公式计算:$$\hat{\beta} = (X^TX + \lambda I)^{-1}X^Ty$$其中,$X$是自变量矩阵,$y$是因变量向量,$I$是单位矩阵。

计算步骤

岭回归的计算步骤如下:

  1. 读取数据集,并将自变量矩阵$X$和因变量向量$y$分离。
  2. 对自变量矩阵$X$进行中心化处理,使得每个特征的均值为零。
  3. 计算岭回归参数的估计值。
  4. 根据得到的参数估计值,计算预测值。
  5. 可以使用各种评估指标(如均方误差、决定系数等)来评估模型的性能。

Python代码示例

下面是一个基本的岭回归的Python代码示例,我们使用scikit-learn库中的Ridge模型:

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error

# 加载波士顿房价数据集
boston = load_boston()
X = boston.data
y = boston.target

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

# 特征标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 创建岭回归模型
model = Ridge(alpha=1.0) # 此处alpha即为正则化参数lambda

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

# 输出参数估计值
print("Intercept: ", model.intercept_)
print("Coefficient: ", model.coef_)

# 预测
y_pred = model.predict(X_test_scaled)

# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error: ", mse)

上述代码示例中,我们首先加载了波士顿房价数据集,然后将数据集划分为训练集和测试集。接下来,进行特征标准化以提高模型性能。然后,我们创建了一个Ridge模型,并使用训练数据训练模型。最后,我们对测试数据进行预测,并计算均方误差来评估模型的性能。

代码细节解释:

  • 第1行:导入必要的库。
  • 第4行:加载波士顿房价数据集。
  • 第7行:将数据集划分为训练集和测试集。
  • 第10-11行:使用StandardScaler对特征进行标准化处理。
  • 第14行:创建了一个Ridge对象。
  • 第17行:用数据训练模型。
  • 第20-21行:输出截距项$\beta_0$的估计值。
  • 第22行:输出斜率项$\beta_j$的估计值。
  • 第25行:使用模型对测试数据进行预测。
  • 第28行:计算均方误差。

4. LASSO回归

LASSO回归是一种使用L1正则化的线性回归方法。L1正则化通过在最小二乘法的目标函数中添加正则化项,使得模型参数更加稀疏,具有特征选择的效果。

LASSO回归的原理、计算步骤和Python代码示例与岭回归类似,只是使用Lasso模型和L1正则化参数。

5. 多项式回归

多项式回归是一种在线性回归模型上引入多项式特征的方法,用于拟合非线性关系。

多项式回归的原理是通过在原始特征上添加高次项来扩展特征空间,然后使用线性回归模型对扩展后的特征进行拟合。

不同的多项式回归算法可能有不同的处理特征的方式,但它们的原理是相似的。

算法原理

多项式回归算法的目标是找到一个多项式模型来描述自变量$x$与因变量$y$之间的关系,模型可以是二次、三次甚至更高次的多项式。

例如,二次多项式模型可以表示为:$$y = \beta_0 + \beta_1 x + \beta_2 x^2$$其中,$x^2$表示$x$的平方。

为了求解多项式模型的参数估计值,我们可以将多项式模型转化为线性模型的形式,然后使用线性回归方法进行求解。

假设我们有一个二次多项式模型:$$y = \beta_0 + \beta_1 x + \beta_2 x^2$$我们可以将其转化为线性模型的形式:$$y = \beta_0 + \beta_1 x_1 + \beta_2 x_2$$其中,$x_1 = x$,$x_2 = x^2$。

然后,我们可以使用线性回归方法对线性模型进行求解,得到参数$\beta_0$、$\beta_1$和$\beta_2$的估计值。

对于更高次的多项式模型,也可以按照类似的方式进行处理。

计算步骤

多项式回归的计算步骤如下:

  1. 读取数据集,并将自变量$x$和因变量$y$分离。
  2. 将自变量$x$进行多项式转换,生成扩展后的特征矩阵。
  3. 计算多项式回归参数的估计值。
  4. 根据得到的参数估计值,计算预测值。
  5. 可以使用各种评估指标(如均方误差、决定系数等)来评估模型的性能。

Python代码示例

下面是一个基本的多项式回归的Python代码示例,我们使用scikit-learn库中的PolynomialFeaturesLinearRegression模型:

import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

# 生成虚拟数据集
np.random.seed(0)
X = np.linspace(-3, 3, 100).reshape(-1, 1)
y = 2 + 3*X + np.random.normal(0, 1, (100, 1))

# 创建多项式特征矩阵
poly = PolynomialFeatures(degree=3)
X_poly = poly.fit_transform(X)

# 创建线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X_poly, y)

# 输出参数估计值
print("Intercept: ", model.intercept_)
print("Coefficient: ", model.coef_)

# 可视化结果
plt.scatter(X, y, color='blue')
plt.plot(X, model.predict(X_poly), color='red')
plt.show()

上述代码示例中,我们首先生成了一个虚拟的数据集,然后使用PolynomialFeatures对自变量进行多项式转换,生成扩展后的特征矩阵。接下来,我们创建了一个LinearRegression模型,并使用扩展后的特征矩阵进行训练。最后,我们输出了参数估计值,并绘制了原始数据和模型拟合曲线的可视化结果。

代码细节解释:

  • 第1行:导入必要的库。
  • 第4行:设置随机种子以保证结果可复现。
  • 第5行:使用np.linspace()生成一个长度为100的数组。
  • 第6行:根据线性模型生成因变量$y$,并加入一些噪声。
  • 第9行:创建了一个PolynomialFeatures对象,将自变量进行多项式转换。
  • 第10行:对自变量进行多项式转换,生成扩展后的特征矩阵$X_{poly}$。
  • 第13行:创建了一个LinearRegression对象。
  • 第16行:用扩展后的特征矩阵训练模型。
  • 第19行:输出截距项$\beta_0$的估计值。
  • 第20行:输出斜率项$\beta_j$的估计值。
  • 第23-26行:使用plt.scatter()plt.plot()绘制散点图和拟合曲线。

以上就是关于常见的回归算法及其优缺点的详细介绍,算法原理、公式推导、计算步骤和Python代码示例。通过对比不同的回归算法,我们可以根据具体的问题选择合适的算法来建立回归模型。

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

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

(0)

大家都在看

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