首页/文章/ 详情

回归模型最强总结!!

6月前浏览392

  • 线性回归
  • 岭回归
  • Lasso回归
  • 决策树回归
  • 随机森林回归
  • 梯度提升回归
  • 支持向量回归
  • 神经网络回归

咱们一起来看看回归所有的内容~

线性回归

线性回归绝对是我们大家最熟悉的一个算法模型。线性回归是一种用于建模和分析变量之间关系的统计方法,特别是用于预测一个变量(被称为因变量)与一个或多个自变量之间的关系。在简单线性回归中,只有一个自变量,而在多元线性回归中,有多个自变量。

核心原理

1. 简单线性回归

在简单线性回归中,我们试图建立一个线性关系模型:

 

其中:

  •       是因变量(要预测的变量),
  •       是自变量(用于预测的变量),
  •       是截距项(模型在        时的取值),
  •       是斜率(表示        的变化对        的影响),
  •       是误差项。

我们的目标是找到最优的      和      来最小化误差项     

简单线性回归的最小二乘法

最小二乘法的目标是最小化残差平方和(Residual Sum of Squares,RSS)。我们定义残差为观测值与模型预测值之差,即     。最小二乘法的目标是最小化     

通过对      对      和      求偏导数,并令其等于零,可以得到最优解。

最终,     的最优解为:


其中      和      分别是      和      的均值。

    的最优解为:

   

2. 多元线性回归

在多元线性回归中,有多个自变量,模型的表达式为:

 

 

其中      是自变量的数量。

优缺点和适用场景

优点:

  • 简单易于理解和实现。
  • 在数据线性关系较强时表现良好。

缺点:

  • 对异常值和噪声敏感。
  • 仅能捕捉线性关系,无法处理非线性关系。

适用场景:

  • 数据呈现线性关系。
  • 对解释性要求较高的情况。

一个核心案例代码

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

# 生成示例数据
np.random.seed(0)
X = 2 * np.random.rand(1001)
Y = 4 + 3 * X + np.random.randn(1001)

# 使用最小二乘法计算斜率和截距
X_mean = np.mean(X)
Y_mean = 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

# 使用sklearn进行线性回归
model = LinearRegression()
model.fit(X, Y)

# 绘制数据点和回归线
plt.scatter(X, Y, label='Data Points')
plt.plot(X, beta_0 + beta_1 * X, color='red', label='Regression Line (Manual)')
plt.plot(X, model.predict(X), color='green', linestyle='dashed', label='Regression Line (Sklearn)')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

线性回归是一种简单而有效的建模方法,通过最小二乘法求解最优参数。然而,它对数据要求较高,对异常值和非线性关系敏感。适用于数据呈现线性关系、对解释性要求较高的场景。

岭回归

岭回归(Ridge Regression)是一种用于处理多重共线性问题的线性回归扩展。多重共线性指的是自变量之间存在高度相关性的情况,这会导致普通线性回归的参数估计不稳定。岭回归通过在损失函数中引入正则化项(L2范数)来解决这个问题。

核心原理

考虑岭回归的优化目标,我们的损失函数由最小二乘法的目标改变为:


其中:

  •       是因变量,
  •       是第        个自变量的第        个观测值,
  •       是第        个自变量的系数,
  •       是正则化参数,用于控制正则化项的影响。

最终,岭回归的优化目标是最小化     

推导岭回归的最小二乘法

通过对损失函数求偏导数,并令其等于零,我们可以得到岭回归的最优解。考虑损失函数中的正则化项,我们得到以下岭回归的闭式解:

   

其中      是自变量矩阵,     是因变量向量,     是单位矩阵。

优缺点和适用场景

优点:

  • 解决多重共线性问题,提高模型稳定性。
  • 可以处理高维数据,防止过拟合。

缺点:

  • 需要调整正则化参数       
  • 不适用于特征数量比样本数量大的情况。

适用场景:

  • 自变量之间存在高度相关性。
  • 高维数据集。

一个核心案例代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Ridge
from sklearn.preprocessing import StandardScaler

# 生成示例数据
np.random.seed(0)
X = 2 * np.random.rand(1001)
Y = 4 + 3 * X + np.random.randn(1001)

# 使用岭回归进行建模
alpha = 1.0
ridge_model = Ridge(alpha=alpha)
ridge_model.fit(X, Y)

# 绘制数据点和岭回归线
plt.scatter(X, Y, label='Data Points')
plt.plot(X, ridge_model.predict(X), color='red', label=f'Ridge Regression (alpha={alpha})')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

岭回归是一种用于解决多重共线性问题的线性回归方法,通过引入正则化项提高模型稳定性。它适用于自变量之间存在高度相关性的情况,但需要调整正则化参数。在实际使用中,可以通过交叉验证等方法选择合适的     

Lasso回归

Lasso回归(Least Absolute Shrinkage and Selection Operator Regression)是一种用于处理多重共线性问题的线性回归方法。与岭回归类似,Lasso回归引入了正则化项,但使用的是L1范数,可以导致部分系数变为零,从而实现特征选择的效果。

核心原理

考虑Lasso回归的优化目标,我们的损失函数由最小二乘法的目标改变为:

 

 

其中:

  •       是因变量,
  •       是第        个自变量的第        个观测值,
  •       是第        个自变量的系数,
  •       是正则化参数,用于控制正则化项的影响。

最终,Lasso回归的优化目标是最小化     

推导Lasso回归的最小二乘法

通过对损失函数求偏导数,我们可以得到Lasso回归的最优解。考虑损失函数中的正则化项,我们得到以下Lasso回归的闭式解:

 

 

其中      是      的符号函数。由于      不是处处可导,我们可以使用次梯度来解决。

优缺点和适用场景

优点

  • 可以实现特征选择,将一些系数变为零。
  • 在高维数据集中表现较好。

缺点

  • 不适用于特征数量比样本数量大的情况。
  • 对于高度相关的变量,可能只选择其中之一。

适用场景

  • 数据集中存在多重共线性。
  • 希望通过模型进行特征选择。

一个核心案例代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Lasso
from sklearn.preprocessing import StandardScaler

# 生成示例数据
np.random.seed(0)
X = 2 * np.random.rand(1001)
Y = 4 + 3 * X + np.random.randn(1001)

# 使用Lasso回归进行建模
alpha = 0.1
lasso_model = Lasso(alpha=alpha)
lasso_model.fit(X, Y)

# 绘制数据点和Lasso回归线
plt.scatter(X, Y, label='Data Points')
plt.plot(X, lasso_model.predict(X), color='red', label=f'Lasso Regression (alpha={alpha})')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

Lasso回归是一种通过引入L1范数正则化项来处理多重共线性问题的线性回归方法。它在高维数据集中表现较好,并可以实现特征选择的效果。在实际的项目中,需要调整正则化参数     

决策树回归

决策树回归是一种基于树结构的回归模型,它通过对输入空间进行递归的划分,将每个划分区域内的样本的目标值取平均值作为预测值。以下是决策树回归的详细原理和核心公式。

核心原理

1. 决策树的建立

决策树的建立分为以下步骤:

  • 选择最佳的划分特征:通过计算每个特征的信息增益或均方误差等指标,选择最佳的特征来进行划分。
  • 划分数据集:根据选择的特征进行数据集的划分,形成子节点。
  • 递归地建立子树:对每个子节点递归地重复上述步骤,直到满足停止条件。

2. 决策树回归预测

对于新的输入样本,通过决策树的结构,从根节点开始逐级判断样本应该属于哪个叶子节点,然后将该叶子节点内训练样本的目标值作为预测值。

3. 决策树回归的核心公式

在决策树回归中,每个叶子节点的目标值      为该节点内训练样本的目标值的平均值。

 

其中      表示第      个叶子节点内的样本索引集 合,     表示该叶子节点内的样本数量。

优缺点和适用场景

优点

  • 易于理解和解释,可视化效果好。
  • 能够处理非线性关系,对异常值和缺失值不敏感。

缺点

  • 容易过拟合,需要通过剪枝等手段进行优化。
  • 对输入数据的变化敏感,稳定性较差。

适用场景

  • 数据具有非线性关系。
  • 需要可解释性和可视化效果好的情况。

一个核心案例代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor

# 生成示例数据
np.random.seed(0)
X = np.sort(5 * np.random.rand(801), axis=0)
y = np.sin(X).ravel() + np.random.randn(80) * 0.1

# 使用决策树回归进行建模
tree_model = DecisionTreeRegressor(max_depth=4)
tree_model.fit(X, y)

# 预测新数据点
X_test = np.arange(0.05.00.01)[:, np.newaxis]
y_pred = tree_model.predict(X_test)

# 绘制数据点和决策树回归曲线
plt.scatter(X, y, s=20, edgecolor="black", c="darkorange", label="data")
plt.plot(X_test, y_pred, color="cornflowerblue", label="prediction")
plt.xlabel("data")
plt.ylabel("target")
plt.title("Decision Tree Regression")
plt.legend()
plt.show()

决策树回归是一种基于树结构的回归模型,通过递归地划分输入空间来进行预测。它具有易解释性和可视化效果好的特点,适用于处理非线性关系的情况。然而,容易过拟合和对输入数据的变化敏感是其缺点,需要通过剪枝等方法进行优化。

随机森林回归

随机森林回归是一种基于决策树的集成学习算法,通过建立多个决策树并对其进行平均或投票来提高模型的泛化性能。以下是随机森林回归的详细原理和核心公式。

核心原理

1. 随机森林的建立

  • Bagging过程(自助采样): 对训练数据进行有放回的抽样,构建多个不同的训练数据集。

  • 构建决策树: 对每个数据集建立一个决策树,树的建立过程与普通决策树相似。

  • 随机特征选择: 在每个节点的分裂过程中,随机选择一部分特征进行考虑,而不是考虑所有特征。

2. 随机森林回归预测

对于回归问题,随机森林通过对每棵树的预测结果进行平均来得到最终的预测值。

 

 

其中      是森林中树的数量,     是第      棵树的预测值。

优缺点和适用场景

优点:

  • 提高模型泛化性能,减少过拟合。
  • 对高维数据和大规模数据表现较好。
  • 可以处理非线性关系和复杂的特征交互。

缺点:

  • 模型解释性较差。
  • 训练过程相对耗时。
  • 在某些数据集上可能过拟合。

适用场景:

  • 复杂的回归问题,特征维度较高的数据集。
  • 数据集中存在噪声和非线性关系。

一个核心案例代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestRegressor

# 生成示例数据
np.random.seed(0)
X = np.sort(5 * np.random.rand(801), axis=0)
y = np.sin(X).ravel() + np.random.randn(80) * 0.1

# 使用随机森林回归进行建模
rf_model = RandomForestRegressor(n_estimators=100, random_state=42)
rf_model.fit(X, y)

# 预测新数据点
X_test = np.arange(0.05.00.01)[:, np.newaxis]
y_pred = rf_model.predict(X_test)

# 绘制数据点和随机森林回归曲线
plt.scatter(X, y, s=20, edgecolor="black", c="darkorange", label="data")
plt.plot(X_test, y_pred, color="cornflowerblue", label="prediction")
plt.xlabel("data")
plt.ylabel("target")
plt.title("Random Forest Regression")
plt.legend()
plt.show()

随机森林回归是一种通过构建多个决策树并对其进行集成来提高泛化性能的方法。它适用于复杂的回归问题和高维数据集,具有较好的性能。然而,模型解释性相对较差。实际项目中,可以通过调整树的数量和其他参数来优化模型。

梯度提升回归

梯度提升回归(Gradient Boosting Regression)是一种集成学习方法,通过顺序地构建弱学习器,每个弱学习器修正前一个弱学习器的预测误差,从而得到累积的、更强大的预测模型。以下是梯度提升回归的详细原理和核心公式。

核心原理

1. 基本思想

梯度提升回归的基本思想是通过组合多个弱学习器(通常是决策树),每个学习器关注前一个学习器的预测误差,从而逐步减小模型在训练集上的残差。

2. 损失函数的定义

梯度提升的损失函数通常选择平方损失函数,即对于第      个样本,损失函数为:

 

3. 训练过程

对于第      轮的弱学习器     

  • 计算负梯度:       ,即当前模型对于第        个样本的残差。

  • 拟合残差:学习一个新的弱学习器       ,使其拟合残差       

  • 更新模型:更新模型的预测值       ,其中        是学习率,控制每个弱学习器的权重。

4. 最终模型

最终的预测模型为累加的弱学习器:

 

 

优缺点和适用场景

优点

  • 可以处理复杂的非线性关系。
  • 在训练过程中逐步优化模型,逐渐减小残差。

缺点:

  • 训练时间相对较长,特别是在树的深度较大时。
  • 对异常值敏感。

适用场景:

  • 非线性回归问题。
  • 数据集中包含噪声和复杂的特征交互。

一个核心案例代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import GradientBoostingRegressor

# 生成示例数据
np.random.seed(0)
X = np.sort(5 * np.random.rand(801), axis=0)
y = np.sin(X).ravel() + np.random.randn(80) * 0.1

# 使用梯度提升回归进行建模
gb_model = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, random_state=42)
gb_model.fit(X, y)

# 预测新数据点
X_test = np.arange(0.05.00.01)[:, np.newaxis]
y_pred = gb_model.predict(X_test)

# 绘制数据点和梯度提升回归曲线
plt.scatter(X, y, s=20, edgecolor="black", c="darkorange", label="data")
plt.plot(X_test, y_pred, color="cornflowerblue", label="prediction")
plt.xlabel("data")
plt.ylabel("target")
plt.title("Gradient Boosting Regression")
plt.legend()
plt.show()

梯度提升回归是一种通过构建多个弱学习器,每个学习器关注前一个学习器的预测误差来提高模型性能的方法。它适用于复杂的非线性回归问题,但训练时间相对较长。在实际使用的时候,可以通过调整学习率和树的数量等参数来优化模型。

支持向量回归

支持向量回归(Support Vector Regression,SVR)是一种使用支持向量机(SVM)来进行回归的方法。SVR通过将输入空间映射到高维特征空间,并在高维空间中寻找最优超平面来进行回归。以下是支持向量回归的详细原理和核心公式。

核心原理

1. 基本思想

  • 与分类任务中的支持向量机类似,SVR也采用了核方法来将输入空间映射到高维特征空间。

  • SVR的目标是找到一个超平面,使得训练样本在该超平面上的映射值与目标值的差异最小化,并且同时保持误差在一定范围内。

2. 核心公式

SVR的基本公式可以表示为:

 

其中:

  •       是输入样本,
  •       是通过核函数将输入映射到高维特征空间的结果,
  •       是超平面的法向量,
  •       是截距。

SVR的优化目标是最小化损失函数

 

 

满足约束条件:

             

其中      是正则化参数,     是控制边界的松弛变量,     是对应于每个样本的松弛变量。

3. 高斯径向基核(RBF)

常用的核函数之一是高斯径向基核:

 

 

其中      是控制核函数宽度的参数。

优缺点和适用场景

优点:

  • 在高维空间中的表现较好,适用于复杂的非线性回归问题。
  • 通过调整核函数和参数,可以适应不同类型的数据分布。

缺点:

  • 对于大规模数据集,训练时间较长。
  • 对于输入数据的缩放和参数的选择敏感。

适用场景

  • 非线性回归问题,尤其是在输入空间映射到高维特征空间有意义的情况下。
  • 对模型的泛化性能要求较高的情况。

一个核心案例代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVR

# 生成示例数据
np.random.seed(0)
X = 5 * np.random.rand(1001)
y = np.sin(X).ravel() + np.random.randn(100) * 0.1

# 使用支持向量回归进行建模
svr_model = SVR(kernel='rbf', C=100, epsilon=0.1, gamma='auto')
svr_model.fit(X, y)

# 预测新数据点
X_test = np.arange(0.05.00.01)[:, np.newaxis]
y_pred = svr_model.predict(X_test)

# 绘制数据点和支持向量回归曲线
plt.scatter(X, y, s=20, edgecolor="black", c="darkorange", label="data")
plt.plot(X_test, y_pred, color="cornflowerblue", label="prediction")
plt.xlabel("data")
plt.ylabel("target")
plt.title("Support Vector Regression (RBF Kernel)")
plt.legend()
plt.show()

支持向量回归是一种通过映射输入空间到高维特征空间,找到最优超平面来进行回归的方法。它适用于复杂的非线性回归问题,但在大规模数据集上训练时间较长。在实际使用中,需要通过调整核函数和参数来优化模型。

神经网络回归

神经网络回归是一种使用神经网络进行回归任务的方法。神经网络由多个神经元(或称为节点)组成,这些神经元通过层次结构连接在一起,每个连接都有一个权重。以下是神经网络回归的详细原理和核心公式。

核心原理

1. 基本结构

  • 输入层: 接受输入特征的层。

  • 隐藏层: 由多个神经元组成,通过权重连接构建神经网络的核心。

  • 输出层: 输出回归问题的预测值。

2. 激活函数

神经网络中的每个神经元通常都会使用激活函数来引入非线性性质,常用的激活函数包括 Sigmoid、ReLU、Tanh 等。

 
 
 

3. 前向传播

神经网络的前向传播过程是通过输入层到输出层的一系列计算,其中每个神经元都计算其输入的加权和,并通过激活函数得到输出。

 

其中      是神经元的输出,      是权重,      是输入特征,      是偏置项,      是激活函数。

4. 损失函数

神经网络回归的损失函数通常选择均方误差(Mean Squared Error,MSE):

 

其中      是实际值,      是预测值,      是样本数量。

5. 反向传播

通过反向传播算法,根据损失函数对模型参数进行梯度下降优化。通过链式法则,计算每个参数对损失函数的梯度,然后更新参数。

 

 
 

 

其中      是神经元的输入。

优缺点和适用场景

优点:

  • 能够捕捉复杂的非线性关系。
  • 在大规模数据集上表现良好。

缺点:

  • 训练时间较长,需要大量的数据。
  • 对于过拟合敏感,需要适当的正则化。

适用场景:

  • 复杂的非线性回归问题。
  • 大规模数据集,充足的计算资源。

一个核心案例代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.neural_network import MLPRegressor

# 生成示例数据
np.random.seed(0)
X = 5 * np.random.rand(1001)
y = np.sin(X).ravel() + np.random.randn(100) * 0.1

# 使用神经网络回归进行建模
nn_model = MLPRegressor(hidden_layer_sizes=(100,), activation='relu', max_iter=1000, random_state=42)
nn_model.fit(X, y)

# 预测新数据点
X_test = np.arange(0.05.00.01)[:, np.newaxis]
y_pred = nn_model.predict(X_test)

# 绘制数据点和神经网络回归曲线
plt.scatter(X, y, s=20, edgecolor="black", c="darkorange", label="data")
plt.plot(X_test, y_pred, color="cornflowerblue", label="prediction")
plt.xlabel("data")
plt.ylabel("target")
plt.title("Neural Network Regression")
plt.legend()
plt.show()

神经网络回归是一种通过构建多层神经元网络来捕捉复杂的非线性关系的方法。它在大规模数据集和复杂问题上表现良好,但需要较长的训练时间。在实际项目中,可以通过调整网络结构、激活函数和正则化等参数来优化模型。


来源:现代石油人
ACT断裂非线性化学电子油气MATLAB岩土UM裂纹理论材料控制曲面Origin
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-05-08
最近编辑:6月前
现代石油人
博士 签名征集中
获赞 25粉丝 61文章 796课程 1
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈