人工神经网络和BaggingRegressor预测模型比较分析

Posted 数据皮皮侠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了人工神经网络和BaggingRegressor预测模型比较分析相关的知识,希望对你有一定的参考价值。

一、基本原理
(一)人工神经网络
人工神经网络是一种模仿生物神经网络(大脑)的结构和功能的数学模型或计算机模型,由输入层(input layer),隐藏层(hidden layers),输出层(output layer)三部分组成。输入层是由训练集的样本特征向量传入。每层由神经元(neuron)或单元(unit)组成,经过连接节点的权重(weight)传入下一层,上一层的输出是下一层的输入。即一个神经元,可以把它分成左半球和右半球两部分。左半球为上一层加权求和的结果,作为此神经元的输入;右半球为加权求和的结果,即左半球值通过非线性方程转化后的值,作为此神经元的输出。经过隐藏层的运算后,输出层就会输出最终结果。
(二)BaggingRegressor
Bagging是由Breiman提出的一个简单的组合模型,在给定包含m个样本的数据集中,先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样经过m次随机采样操作,我们得到含m个样本的采样集,初始训练集中有的样本在采样集里多次出现,有的则从未出现,如此得到很多不同的数据集,然后对于每个数据集建立一个决策树,因此产生大量决策树。对于回归来说,一个新的观测值通过如此多的决策树得到很多预测值,最终结果为这些预测值的简单平均。
二、预测模型评价 
首先按8:2的比例对数据划分训练集和测试集,然后运用两种模型进行拟合。采用均方根误差(RMSE)、平均绝对误差(MAE)和R方三个评价指标对模型模拟结果与实际值的吻合程度进行衡量,RMSEMAE的值越小,R方的值越接近1,表明模型的预测效果越好。指标的定义见下式:
1)均方根误差(RMSE):是观测值与真值偏差的平方和与观测次数m比值的平方根,常用来衡量观测值同真值之间的偏差,RMSE越小,说明模型拟合实验数据的能力越强。其计算公式为:

2)平均绝对误差(MAE):是绝对误差的平均值,能更好地反映预测值误差的实际情况.。其计算公式为:

人工神经网络和BaggingRegressor预测模型比较分析

3R方:反映模型对样本数据的拟合程度。取值范围在0-1之间,值越接近于1,意味着该模型把因变量的变动解释得越好,即拟合效果越好。其计算公式为:

人工神经网络和BaggingRegressor预测模型比较分析

三、实证分析

该部分选取石家庄市2016/8/3—2019/5/31每日前一天的PM2.5PM10SO2CONO2O3_8h的浓度值和每日前两天的PM2.5浓度值作为衡量该日污染排放情况的指标;当天的最高温度、平均温度、最低温度、最高湿度、最低湿度、最大风速和最低风速值作为衡量该日气象条件的指标。建立石家庄市PM2.5浓度的预测模型,首先要了解影响PM2.5浓度的因素,这些因素主要有污染物排放情况与气象条件等

人工神经网络和BaggingRegressor预测模型比较分析

人工神经网络和BaggingRegressor预测模型比较分析

收集的原始数据样本量共1032条,其中有50条数据有缺失,由于缺失数据占比较小,予以删除处理,因此,共实际使用样本量982条。
借助Python软件分别用两个算法建立回归模型预测石家庄市PM2.5的数值,为了比较两个算法的优劣,分别用模型在训练集和测试集上的RMSEMAER方三个指标的均值来衡量模型的预测效果,结果见表2:

人工神经网络和BaggingRegressor预测模型比较分析


对比拟合效果可知,BaggingRegressor在测试集上的表现优于人工神经网络模型,但在训练集和测试集上表现相差较大,可能也存在过拟合情况。人工神经网络模型虽然在训练集上的表现相比BaggingRegressor模型来说略差,但在测试集上的表现结果较好,训练集和测试集表现结果相差不大,说明其泛化能力较强,模型拟合效果较好。
综上分析可知人工神经网络模型表现最优,体现了人工神经网络模型具有较好的预测精度和外推能力。图1是基于人工神经网络算法建立的回归模型在测试集上的拟合结果。

从真实值和预测值的拟合效果图可以看出,石家庄市PM2.5预测值与实际值值并不是每个点都能对应上,但二者的大小相差不大,且变化趋势吻合度较高,也验证了基于人工神经网络算法建立的回归模型在预测石家庄市PM2.5数值时表现良好,故可考虑将该算法用于石家庄市PM2.5数值的预测。
#引入基本包import numpy as npimport pandas as pdimport pylab as mpl#导入中文字体,避免显示乱码#可视化import matplotlib import matplotlib.pyplot as pltimport seaborn as sns#timefrom datetime import datetimefrom sklearn.model_selection import cross_val_score#读取数据mpl.rcParams['font.sans-serif']=['SimHei'] #设置为黑体字
data= pd.read_excel('shijiazhuang_pm25.xlsx',parse_dates=True,index_col=0,encoding = 'utf-8')print(data.shape)#查看是否有缺失值data.isnull().sum()# 缺失数据占比小,删除缺失数据data1=data.dropna(axis=0)print(data1.shapedata1_month=data1.resample('M').mean() #按月重采data1_month['PM2.5'].plot(figsize=(15,4),marker='o'#获取标注,ylabel = np.array(data1['PM2.5'])#获取特征,xfeatures= data1.drop('PM2.5', axis = 1)#保存变量名称feature_list = list(features.columns)# 转化成arrayfeatures = np.array(features)# 划分训练集和测试集from sklearn.model_selection import train_test_splittrain_features, test_features, train_label, test_label = train_test_split(features,label, test_size = 0.2,random_state = 42)
print('Training Features Shape:', train_features.shape)print('Training Labels Shape:', train_label.shape)print('Testing Features Shape:', test_features.shape)print('Testing Labels Shape:', test_label.shape)#BaggingRegressorfrom sklearn.ensemble import BaggingRegressorregr = BaggingRegressor(n_estimators=100, oob_score=True, random_state=1010)regr.fit(train_features, train_label);regr_train_predictions= regr.predict(train_features)regr_test_predictions = regr.predict(test_features)print("BaggingRegressor train RMSE:%.3f"%np.sqrt(mean_squared_error(train_label,regr_train_predictions)))print("BaggingRegressor test RMSE:%.3f"%np.sqrt(mean_squared_error(test_label,regr_test_predictions)))print("BaggingRegressor train MAE:%.3f"%mean_absolute_error(train_label,regr_train_predictions))print("BaggingRegressor test MAE:%.3f"%mean_absolute_error(test_label,regr_test_predictions))print(" BaggingRegressor train r2:%.3f"%r2_score(train_label,regr_train_predictions))print(" BaggingRegressor test r2:%.3f"%r2_score(test_label,regr_test_predictions))#神经网络from sklearn.neural_network import MLPRegressormlp=MLPRegressor(solver='lbfgs',hidden_layer_sizes=(100,50),batch_size='auto',alpha=0.01)mlp.fit(train_features, train_label);mlp_train_predictions= mlp.predict(train_features)mlp_test_predictions =mlp.predict(test_features)print("MLPRegressor train RMSE:%.3f"%np.sqrt(mean_squared_error(train_label,mlp_train_predictions)))print("MLPRegressor test RMSE:%.3f"%np.sqrt(mean_squared_error(test_label,mlp_test_predictions)))print("MLPRegressor train MAE:%.3f"%mean_absolute_error(train_label,mlp_train_predictions))print("MLPRegressor test MAE:%.3f"%mean_absolute_error(test_label,mlp_test_predictions))print("MLPRegressor train r2:%.3f"%r2_score(train_label,mlp_train_predictions))print("MLPRegressor test r2:%.3f"%r2_score(test_label,mlp_test_predictions))#神经网络在测试集上表现效果最好#神经网络预测值和实际值比较import pylabpylab.rcParams['figure.figsize'] = (15,4) #显示大小plt.plot(test_label, 'bo-', label = '真实值')
plt.plot(mlp_test_predictions, 'ro', label = '预测值')
plt.xticks(rotation = '60');plt.legend()plt.ylabel('PM2.5')
Python码仅供参考。


以上是关于人工神经网络和BaggingRegressor预测模型比较分析的主要内容,如果未能解决你的问题,请参考以下文章

基于人工神经网络算法的信用风险预测

月径流预测基于matlab人工生态系统算法优化BP神经网络月径流预测含Matlab源码 2000期

BP预测基于人工蜂群算法改进BP神经网络实现数据预测

BP预测基于人工蜂群算法改进BP神经网络实现数据预测

用于人工智能中对手预测的神经网络 [关闭]

Matlab基于人工神经网络ANN实现多分类预测(Excel可直接替换数据)