文章目录
- 1 文章内容
-
- 1.1 模型
-
- 1.1.1 Multilayer perceptron neural network (MLPNN)
- 1.1.2 Recurrent neural network (RNN)
- 1.1.3 Convolutional neural network (CNN)
- 1.1.4 Long short-term memory (LSTM)
- 1.1.5 Gated recurrent unit (GRU)
- 1.1.6 Bayesian model averaging (BMA)
- 1.1.7 Mutual information (MI)
- 1.1.8 Recursive feature elimination (RFE)
- 1.2 实验
- 2 相关知识
摘要
本周阅读了题目为An efficient data fusion model based on Bayesian model averaging for robust water quality prediction using deep learning strategies文章,文章提出了结合多种神经科学模型,提出一种新颖的基于贝叶斯模型平均(Bayesian Model Averaging,BMA)的数据融合框架(深度学习方法)包括多层感知器神经网络(MLPNN),递归神经网络(RNN),卷积神经网络(CNN),门控递归单元(GRU),长短时记忆(LSTM),和带外生变量的季节性自回归综合移动平均数(SARIMAX)。BMA有能力极大地提高独立方法所取得的结果。同时利用互信息(MI)与递归特征消除(RFE)两种特征选取方法,选取有效的预测因子,并考察各输入参数的重要性。研究结果证实了基于深度学习模型输出的BMA工具可以有效地应用于溶解氧浓度的预测。
Abstract
This week, I read an article titled “An efficient data fusion model based on Bayesian model averaging for robust water quality prediction using deep learning strategies.” The article proposes a novel data fusion framework based on Bayesian Model Averaging (BMA) that integrates multiple neural network models, including Multilayer Perceptron Neural Network (MLPNN), Recurrent Neural Network (RNN), Convolutional Neural Network (CNN), Gated Recurrent Unit (GRU), Long Short-Term Memory (LSTM), and Seasonal Autoregressive Integrated Moving Average with Exogenous Variables (SARIMAX). BMA has the capability to significantly enhance the results obtained by individual methods. Additionally, the study employs two feature selection methods, Mutual Information (MI) and Recursive Feature Elimination (RFE), to identify effective predictors and assess the importance of various input parameters. The research findings confirm that the BMA tool based on deep learning model outputs can be effectively applied to the prediction of dissolved oxygen concentration.
1 文章内容
创新点:
- 贝叶斯模型平均(BMA)的应用:
论文提出了一种基于贝叶斯模型平均(BMA)的数据融合框架,用于结合多个深度学习模型的预测结果。这种方法能够综合多个模型的优势,减少单一模型可能存在的不确定性和偏差,从而提高预测的准确性和稳健性。 - 多种深度学习模型的集成:
论文集成了多种深度学习模型,包括多层感知器神经网络(MLPNN)、循环神经网络(RNN)、卷积神经网络(CNN)、门控循环单元(GRU)、长短期记忆网络(LSTM)和季节性自回归积分滑动平均模型(SARIMAX)。这种集成方法使得模型能够捕捉溶解氧浓度变化的复杂非线性特征。 - 特征选择方法的结合:
论文采用了两种特征选择方法——互信息(MI)和递归特征消除(RFE)——来筛选有效的预测因子。这些方法有助于识别对溶解氧浓度预测最有影响的变量,从而提高模型的预测性能。
1.1 模型
1.1.1 Multilayer perceptron neural network (MLPNN)
MLPNN是一种前馈神经网络,作者使用多层感知器神经网络(MLPNN)作为预测模型,文章中该模型由单个输入层,单个隐藏层和单个输出层组成,只有一个神经元。
具体实现:
- 结构:单输入层、单隐藏层、单输出层。
- 激活函数:使用双曲正切函数(tanh)。
- 优化器:Adam优化器,学习率0.01。
- 训练参数:批量大小为16,训练周期为82个epoch。
- 损失函数:均方误差(MSE)。
1.1.2 Recurrent neural network (RNN)
递归神经网络(RNN)是一种人工神经网络(ANN),被广泛应用于处理时序和时间序列数据。RNN是一种适合处理时间序列数据的神经网络,能够记忆之前的输入信息,并将其用于当前的输出计算。其核心是通过循环连接将信息传递到下一个时间步。RNN能够捕捉时间序列数据中的动态变化,适合溶解氧浓度这种随时间变化的预测任务。
h t = t a n h ( w h h h t − 1 + w x h x t ) + b h h_t=tanh(w_{hh}h_{t-1}+w_{xh}x_t)+b_h ht=tanh(whhht−1+wxhxt)+bh
来自前一个时间步( h t − 1 h_{t-1} ht−1)的隐藏层的输出被“反馈”到神经元,用于提供在( h t h_t ht)处的隐藏层的响应,其中添加了输入变量( x t x_t xt)和权重( w w w)。隐藏层的先前时刻输出( h t − 1 h_{t-1} ht−1)与当前数据(KaTeX parse error: Expected group after '_' at position 2: x_̲t)和权重( W W W)一起被沿着反馈到神经元,以计算隐藏层的当前时刻输出(ht)
具体实现:
- 循环单元:每个时间步的输出会反馈到输入中。
- 激活函数:ReLU。
- 训练参数:批量大小为48,训练周期为82个epoch。
- 优化器:Adam优化器,学习率0.001。
- 损失函数:均方误差(MSE)。
1.1.3 Convolutional neural network (CNN)
CNN最初用于图像处理,但也可以应用于时间序列数据。它通过卷积层提取局部特征,然后通过池化层减少特征维度,最后通过全连接层进行预测。CNN能够提取时间序列中的局部特征,适合处理溶解氧浓度这类具有局部相关性的数据。
具体实现:
- 卷积层:使用卷积核提取特征。
- 激活函数:ReLU。
- 池化层:最大池化或平均池化。
- 训练参数:批量大小为48,训练周期为82个epoch。
- 优化器:Adam优化器,学习率0.01。
- 损失函数:均方误差(MSE)。
1.1.4 Long short-term memory (LSTM)
LSTM是RNN的一种改进,专门用于解决RNN中的梯度消失问题。它通过引入输入门、遗忘门和输出门来控制信息的流动,能够更好地捕捉长期依赖关系。总的来说,所产生的信息在不同的门之间流动,特别是在隐藏状态( h t h_t ht)和前一单元( s t s_t st)之间。LSTM能够捕捉溶解氧浓度变化中的长期依赖关系,适合处理时间跨度较大的数据。
单个存储器单元块(MCB)的架构,ft:遗忘门,It:输入门,Ot:输出门,σ:S形函数,X:输入变量,Ct:单元状态,St:隐藏状态。
具体实现:
- 结构:输入层、隐藏层(包含多个LSTM单元)、输出层。
- 四个门:输入门,遗忘门,输出门,外部门
- 激活函数:tanh。
- 训练参数:批量大小为16,训练周期为50个epoch。
- 优化器:Adam优化器,学习率0.01。
- 损失函数:均方误差(MSE)。
1.1.5 Gated recurrent unit (GRU)
GRU是LSTM的简化版本,通过引入更新门和重置门来控制信息的流动。它比LSTM更轻量级,训练速度更快。GRU在保持LSTM性能的同时,减少了计算复杂度,适合溶解氧浓度这类需要快速训练的预测任务。GRU的主要优点是它能够避免梯度消失问题。与LSTM相比,“输入门”和“遗忘门”被集成到一个“更新门”;有一个“复位门”而不是“输出门”
具体实现:
- 结构:输入层、隐藏层(包含GRU单元)、输出层。
- 激活函数:tanh。
- 训练参数:批量大小为16,训练周期为82个epoch。
- 优化器:Adam优化器,学习率0.03。
- 损失函数:均方误差(MSE)。
1.1.6 Bayesian model averaging (BMA)
BMA是一种数据融合技术,用于结合多个模型的预测结果,而不是仅依赖单个模型的预测结果。对于预测变量 y y y,假设 P O 1 , P O 2 , P O 3 . . . . . . . P O k PO_1,PO_2,PO_3.......PO_k PO1,PO2,PO3.......POk 是由 k 个模型提供的输出,而 Y 是训练阶段的测量变量。预测分布 Y 可以计算如下:
其中 f ( P O i ∣ Y ) f(PO_i|Y) f(POi∣Y)表示基于模型 M k M_k Mk的预测概率密度函数, f ( y ∣ P O i , Y ) f(y|PO_i,Y) f(y∣POi,Y)表示给定训练阶段测量值时模型 M k M_k Mk的后验概率。
BMA方法流程图。
1.1.7 Mutual information (MI)
互信息(MI)用于识别变量之间可能的关系。它基于给定x的y的条件熵,衡量两个变量之间的相互依赖性。公式为:
其中, p ( x , y ) p(x,y) p(x,y) 是X和Y的联合概率密度函数,p(x) 和 p(y) 分别是X和Y的边缘概率密度函数。如果MI值高,两个变量之间的相关性被认为是强的;如果MI值为零,则x和y是独立的。
1.1.8 Recursive feature elimination (RFE)
递归特征消除(RFE)是一种特征选择方法,通过逐步消除最不相关的特征来选择最优特征子集。
RFE使用迭代过程,从所有特征开始,逐步排除最不相关的特征。相关性的程度与特征排除的顺序相关,从而选择最优子集。算法首先使用所有可用特征进行模型训练,然后根据特征的贡献和重要性,只考虑最不重要的特征的 α \alpha α%。 对于这些特征,与剩余特征相关性低于下界的特征将被排除,最终只使用相关性较低的特征进行模型训练,以避免高相关性特征之间的相互作用。
1.2 实验
1.2.1 实验设计
- 数据收集:使用美国地质调查局(USGS)两个站点(01427510和02336152)的水质数据,包括温度、叶绿素荧光、电导率、pH值、流量和溶解氧等参数。
- 数据预处理:将数据分为训练集(80%)和测试集(20%)。
- 特征选择:应用互信息(MI)和递归特征消除(RFE)两种方法选择重要的预测变量。
- 模型训练与测试:使用多种深度学习模型(MLPNN、RNN、CNN、GRU、LSTM)和传统统计模型(SARIMAX)进行训练。利用BMA方法融合上述模型的预测结果。
- 模型性能评估
所考虑的统计学指标包括均方根误差(RMSE)、平均绝对误差(MAE)、平均绝对百分比误差(MAPE)和决定系数( R 2 R^2 R2)。这些指标提供了关于模型的预测能力及其与观测数据拟合程度的各种信息。
R M S E = ∑ i = 1 n ( ( D O ) i o − ( D O ) i p ) 2 n RMSE=\sqrt{\frac{\sum^n_{i=1}((DO)_{io}-(DO)_{ip})^2}{n}} RMSE=n∑i=1n((DO)io−(DO)ip)2
M A E = 1 N ∑ i = 1 N ∣ ( D O ) i o − ( D O ) i p ∣ MAE=\frac{1}{N}\sum^N_{i=1}|(DO)_{io}-(DO)_{ip}| MAE=N1i=1∑N∣(DO)io−(DO)ip∣
M A E = 1 N ∑ i = 1 N ∣ ( D O ) i o − ( D O ) i p ( D O ) i o ∣ MAE=\frac{1}{N}\sum^N_{i=1}|\frac{(DO)_{io}-(DO)_{ip}}{(DO)_{io}}| MAE=N1i=1∑N∣(DO)io(DO)io−(DO)ip∣
R 2 = 1 − ∑ i = 1 N ( ( D O ) i o − ( D O ) i p ) 2 ∑ i = 1 n ( ( D O ˉ ) i o − ( D O ) i p ) 2 R^2=1-\frac{\sum^N_{i=1}((DO)_{io}-(DO)_{ip})^2}{\sum^n_{i=1}((\bar {DO})_{io}-(DO)_{ip})^2} R2=1−∑i=1n((DOˉ)io−(DO)ip)2∑i=1N((DO)io−(DO)ip)2
其中n表示训练集示例的数量, ( D O ) i o (DO)_{io} (DO)io和 ( D O ) i p (DO)_{ip} (DO)ip分别是DO的观测数据和预测值。
1.2.2 实验结果
1. 模型性能比较:
在两个USGS站点,BMA模型在MI和RFE特征选择方法下均展现出最优的预测性能。BMA模型在01427510站点的测试集上,基于MI特征选择的RMSE为0.272 mg/L,基于RFE特征选择的RMSE为0.320 mg/L。在02336152站点的测试集上,基于MI特征选择的RMSE为0.352 mg/L,基于RFE特征选择的RMSE为0.378 mg/L。
2. 特征选择方法比较:
在01427510站点,MI特征选择方法在训练阶段的R²值比RFE方法高0.92%,而在测试阶段高1.04%。在02336152站点,RFE特征选择方法在训练阶段的R²值比MI方法高0.21%,而在测试阶段低0.52%。
3. 影响溶解氧浓度的关键因素:
分析表明,前期溶解氧水平和水温是对每日溶解氧水平影响最大的变量。pH值和浊度对每日溶解氧的影响较小。
2 相关知识
2.1 互信息(Mutual Information, MI)
互信息(Mutual Information, MI)是信息论中的一个概念,用于衡量两个随机变量之间的相互依赖性。在论文中,互信息被用作特征选择的一种方法,以识别对溶解氧(DO)浓度预测最有影响的变量。
互信息量化了两个变量之间的共享信息量。如果一个变量包含关于另一个变量的信息,那么这两个变量之间就存在互信息。互信息的值越高,表示两个变量之间的依赖性越强。
互信息 M I ( X , Y ) MI(X,Y) MI(X,Y) 可以定义为:
M I ( X , Y ) = ∑ x ∈ X ∑ y ∈ Y p ( x , y ) l o g p ( x , y ) p ( x ) p ( y ) MI(X,Y)=\sum_{x\in X}\sum_{y\in Y}p(x,y)log\frac{p(x,y)}{p(x)p(y)} MI(X,Y)=x∈X∑y∈Y∑p(x,y)logp(x)p(y)p(x,y)
其中 p ( x , y ) p(x,y) p(x,y)是变量X和的联合概率密度函数。p(x) 和 p(y) 分别是 X 和 Y 的边缘概率密度函数。
高互信息: 如果 M I ( X , Y ) MI(X,Y) MI(X,Y) 的值较高,这意味着变量 X 和 Y 之间存在较强的相关性。知道 X 的值可以显著减少对 Y 的不确定性,反之亦然。
独立变量: 如果 X 和 Y 是独立的,那么 M I ( X , Y ) = 0 MI(X,Y)=0 MI(X,Y)=0,那么 X 的值不会减少对 Y 的不确定性
import numpy as np
from sklearn.feature_selection import mutual_info_classif
import pandas as pd
# 示例数据
# 假设我们有一个DataFrame,其中包含特征列和目标列
data = {
'Feature1': [1, 2, 3, 4, 5],
'Feature2': [2, 3, 4, 5, 6],
'Feature3': [3, 4, 5, 6, 7],
'Target': [0, 1, 0, 1, 0]
}
df = pd.DataFrame(data)
# 将数据分为特征和目标变量
X = df.drop('Target', axis=1)
y = df['Target']
# 计算互信息分数
mi_scores = mutual_info_classif(X, y, random_state=42, discrete_features=True)
# 将互信息分数转换为DataFrame
mi_scores_df = pd.DataFrame(mi_scores, index=X.columns, columns=['MI'])
# 打印互信息分数
print(mi_scores_df)
# 选择互信息分数最高的特征
selected_features = mi_scores_df.loc[mi_scores_df['MI'].idxmax()]
print("Selected features based on MI scores:\n", selected_features)
输出表明,在进行特征选择时,Feature1、Feature2和Feature3与目标变量的互信息分数相同,都是0.673012。在这种情况下,代码选择了Feature1作为最重要的特征。
2.2 Bayesian Model Averaging(贝叶斯模型平均)
一种用来计算出多个模型权重的方法,贝叶斯模型平均利用贝叶斯方法将多个模型的预测结果进行加权平均,从而获得更加准确和稳健的预测结果。BMA 不仅考虑了各个模型的预测性能,还考虑了模型之间的不确定性,这使得 BMA 在处理多个模型的集成时更加灵活和健壮。
原理: BMA 的基本原理是基于贝叶斯定理和模型选择理论。在 BMA 中,首先假设有一个候选模型集合,每个模型都对数据生成过程做了不同的假设。然后,通过贝叶斯方法对每个模型的后验概率进行估计,即给定观测数据的情况下,对每个模型的预测能力进行评估。最后,利用模型的后验概率作为权重对模型的预测结果进行加权平均,得到最终的预测结果。
给定一个数据集D和多个候选模型 M 1 , M 2 , . . . . . , M k M_1,M_2,.....,M_k M1,M2,.....,Mk,目标是预测一个新数据点x 的结果 y。
核心公式:
p ( y ∣ x , D ) = ∑ k = 1 K P ( y ∣ x , M k ) P ( M k ∣ D ) p(y|x,D)=\sum^K_{k=1}P(y|x,M_k)P(M_k|D) p(y∣x,D)=k=1∑KP(y∣x,Mk)P(Mk∣D)
通过上述公式,贝叶斯模型平均方法将多个模型的预测结果进行加权平均,以综合考虑每个模型的后验概率,从而得到更为稳健的预测结果。
import numpy as np
from sklearn.base import BaseEstimator, ClassifierMixin
from sklearn.model_selection import cross_val_score
class BayesianModelAverageClassifier(BaseEstimator, ClassifierMixin):
def __init__(self, models, use_weights=False, cv=5):
"""
初始化贝叶斯模型平均分类器。
:param models: 模型列表,包含多个基学习器。
:param use_weights: 是否使用模型权重进行加权平均(默认为 False)。
:param cv: 交叉验证的折数(仅当 use_weights=True 时使用)。
"""
self.models = models
self.use_weights = use_weights
self.cv = cv
def fit(self, X, y):
"""
拟合模型。
:param X: 训练数据特征。
:param y: 训练数据目标变量。
"""
self.classes_ = np.unique(y)
self.models_ = [list() for _ in self.models] # 存储拟合后的模型副本
self.weights_ = np.ones(len(self.models)) # 初始化权重
if self.use_weights:
# 如果使用权重,则根据交叉验证分数计算每个模型的权重
for i, model in enumerate(self.models):
scores = cross_val_score(model, X, y, cv=self.cv, scoring="accuracy")
self.weights_[i] = np.mean(scores)
self.weights_ /= np.sum(self.weights_) # 归一化权重
for i, model in enumerate(self.models):
fitted_model = model.fit(X, y)
self.models_[i].append(fitted_model)
def predict_proba(self, X):
"""
预测每个样本属于每个类别的概率。
:param X: 输入数据。
:return: 概率矩阵,形状为 (n_samples, n_classes)。
"""
avg_probs = np.zeros((len(X), len(self.classes_)))
for i, model in enumerate(self.models_):
probs = model[0].predict_proba(X)
avg_probs += self.weights_[i] * probs
return avg_probs
def predict(self, X):
"""
预测目标变量。
:param X: 输入数据。
:return: 预测的类别标签。
"""
avg_probs = self.predict_proba(X)
return self.classes_[np.argmax(avg_probs, axis=1)]
from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 创建数据集
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建模型集合
models = [
RandomForestClassifier(n_estimators=50, random_state=42),
GaussianNB()
]
# 创建 BMA 模型(使用加权平均)
bma_model = BayesianModelAverageClassifier(models,use_weights=True, cv=5)
# 拟合模型
bma_model.fit(X_train, y_train)
# 预测
y_pred = bma_model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("BMA 模型的准确率:", accuracy)
总结
文章研究表明基于贝叶斯模型平均(BMA)的模型在预测溶解氧(DO)浓度上表现最佳。在两个USGS监测站,无论采用互信息(MI)还是递归特征消除(RFE)特征选择方法,BMA模型的预测精度均高于其他神经科学模型,如CNN、LSTM等。同时发现前一时刻的DO浓度对模型可靠性影响最大,而pH和浊度影响较小。