Halcom 发表于 2017-3-16 12:48:49

基于贝叶斯网络的数据预测

       贝叶斯统计方法的核心观点是:在关于事件A的任何统计推断问题中,除了使用样本信息X所提供的信息数据外,还必须对事件X预先规定一个先验概率分布,它可以是预测者根据自己的经验来确定,也可以是预测者根据自己的主观认识来确定。在进行统计推断时,先验概率分布是不可或缺的一个重要要素。       贝叶斯学派把先验概率分布解释为:在得到样本信息前就有的关于事件A的概率分布的主观认识。先验概率分布不必有客观依据,它可以部分或者全部地基于主观认识。       先验概率分布反映了抽样前我们对未知参数的认识,抽样后样本信息带来了新的信息,根据新信息,我们对未知参数的认识也随之发生了变化。根据新信息,贝叶斯公式,把先验概率分布转化为后验概率分布,此变化就体现在了后验概率分布中。或者可以说,后验概率分布是先验概率分布和样本信息的综合,它体现了先验概率信息和样本信息。在应用上往往都是根据得到的后验概率分布做出推断,贝叶斯预测正是建立在利用先验概率分布、样本信息得到后验概率分布基础之上的。       预测的目的在于得到一个明智的决策,以便给相关部门或人员带来指导性的意见。贝叶斯预测在预测过程中也要建立预测模型。贝叶斯预测在建模过程中应用了很多传统的预测模型,例如线性回归、指数平滑与线性时间序列模型等,他们都是贝叶斯动态模型的特殊情况。       贝叶斯统计预测方法与经典的统计预测方法有一个很大的区别,经典的统计预测方法总是根据过去的数据信息,建立统计预测模型,产生常规预测结果,是以纯粹的机械形式将输入信息转化为输出信息,因此,经典的统计预测方法不能处理异常情况的发生。然而贝叶斯统计预测方法不仅仅利用过去的数据信息,还利用了人们对预测的主观认识。人对预测有主观认识或经验认识,贝叶斯统计预测利用贝叶斯公式将人们对预测的主观认识或经验认识与先验信息综合,得到后验信息,所以后验信息不仅仅包含先验信息,还体现了人们的主观认识,因此贝叶斯预测能够处理异常情况的发生。所谓的异常情况或例外情况一般有两种情况,       第一种情况是在预测过程中,基于人们对预测事件未来状况的认识或经验,异常情况的发生是可以预料到的,比如有信息显示,明年年底将要建立一个新工厂,则电力需求将要增加,也就是说电力需求将要增加的问题是能够预料到的,预测者需要及时对预测模型进行干预。       第二种情况则是在预测过程中,异常情况的发生是不可预测的,对这种情况通常采用监控的方法来处理预测模型。MATLAB2014a运行如下:%----------------------------------------
%   基于贝叶斯判别的机场航班延误因素分析
%----------------------------------------
clc,clear,close all
load('sourcedata.mat');
load data.mat
load('datatest.mat');
n=size(data);

%***********创建朴素贝叶斯分类器对象***********
% 创建朴素贝叶斯分类器对象ObjBayes
training=data(1:103,1:5);
group=data(1:103,6);
ObjBayes = NaiveBayes.fit(training,group,'Distribution','kernel')
%**********对训练样本进行判别****************
% 利用所创建的朴素贝叶斯分类器对象ObjBayes,对训练样本进行判别
pre0 = ObjBayes.predict(training);
disp '贝叶斯分类器训练数据和实际结果是否相等,相等为1,否则为0'
isequal(pre0, group)% 判断判别结果pre0与分组向量group是否相等

pre1 = ObjBayes.predict(data(1:103,1:5));
% isequal(pre1, data(71:103,6))% 判断判别结果pre0与分组向量group是否相等
figure,
subplot(211),bar(data(:,6));figure(gcf);axis tight,box off,grid on
title('原始数据---> 用于训练网络---103组数据 ---实际延误率')
subplot(212),bar(pre1);figure(gcf);axis tight,box off,grid on
title('贝叶斯网络训练结果---预测延误率')

%% 贝叶斯预测误差统计
By1=ysw(data,pre1)

%%
% 对于样本进行预测
test=datatest(:,1:5);
datatestresult=datatest(:,6);
pre2 = ObjBayes.predict(test);
figure,
%isequal(pre1, datatestresult)% 判断判别结果pre0与分组向量group是否相等
subplot(211),bar(datatest(:,6));figure(gcf);axis tight,box off,grid on
title('输入待检验的数据,实际结果')
subplot(212),bar(pre2);figure(gcf);axis tight,box off,grid on
title('贝叶斯网络训练结果')

%% 贝叶斯预测误差统计
By2=ysw(datatest,pre2)
参考文献:MATLAB智能算法超级学习手册

页: [1]
查看完整版本: 基于贝叶斯网络的数据预测