数学建模实例------结合BP神经网络和贝叶斯分类器对短视频中用户行为进行预测

前言

这是坚持更新的第四天,前两天更新了数学建模的一些基础模型,今天我们做一个数学建模的实例。
了解BP神经网络的同学知道,BP神经网络的用途之一就是用来做预测,但是由于BP神经网络是一种有监督的学习方式,在进行预测之前我们需要一些数据作为训练集。如果需要对短视频中用户的行为发生的概率进行预测,那么我们必须要知道一些用户行为发生的概率。
贝叶斯分类器通常是用来解决‘是’或者‘不是’的问题,但是和其他分类器有所不同的是他是通过概率来进行判断的,这就很好的对应了BP神经网络中所需的概率。
下面我们以今年腾讯提供的大数据挑战赛中的数据为数据集,结合BP神经网络和贝叶斯分类器来对用户的行为进行预测。

预测模型

由于数据集比较大(百万级别的数据),程序运行出来也需要一定的时间,本文只选取很小的一部分数据做实验,可以说明问题即可,具体数据如下所示:
在这里插入图片描述
userid代表用户,feedid代表视频;read_commend:当取值为1时代表查看了评论,0时代表没有看评论;comment:评论;play:视频播放时长;stay:视频停留时长,click_ava:查看头像,forward:分享(具体什么意思忘了,不过不要紧)follow:转发;favorite:收藏,like:点赞

朴素贝叶斯判别器模型

根据给定的数据集我们可以利用朴素贝叶斯分类器判断是否点赞,及点赞发生的概率,假设给定一条数据如下
在这里插入图片描述
为了避免朴素贝叶斯模型中出现概率为0的情况,我们对其中的参数进行拉普拉斯修正,朴素贝叶斯模型所需要的参数及其计算过程如下:
P=p(like)*p(read_comment|like)*p(comment|like)*p(play|like)*p(stay|like)*p(click_ava|like)*p(forward|like)*p(follow|like)*p(favorite|like);
其中p(A|B)表示条件概率,在B发生的条件下A发生概率,根据以上数据,我们可以直接计算其需要的参数:

%%使用matlab读取数据
useraction=readmatrix('useraction','outputtype','string');
%%把字符型转化为double型数据
useraction=str2double(useraction)
%%统计矩阵的维数
[N,M]=size(useraction);
%%计算p(like),并对p(like)进行拉普拉斯修正
Like=find(useraction(:,7)~=0);
p(like)=(length(like)+1)/(N+2);
%其余的条件概率我们只简单举个例子
%%对于离散型变量comment来说
Comment=0;
for i=1:N
	if useraction(i,6)~=0&&useraction(i,7)~=0
	Comment=Comment+1;
	end
end
p(commnet)=(Commnet+1)/(N+2);

对于连续型随机变量满足以下计算公式:

在这里插入图片描述

其中的u_ci,和theta_ci表示第c类样本的均值和方差,在本模型中就代表播放时间和停留时间的均值和方差。
选取一部分数据通过贝叶斯模型进行计算作为BP神经网络的输入(训练集)

BP神经网络

我们构建三层的BP神经网络,将用户的各项指标的值和朴素贝叶斯计算出来的概率作为训练集,通过输入新的数据,可以预测用户对新的视频的点赞的概率。假设通过贝叶斯模型得到的训练集数据如下:
时间关系,数据是虚构的
训练代码如下:

P=[1,1,0,1,0,1;0,1,0,0,0,1;358,258,53,88,62,135;455,400,53,157,62,227;0,0,0,1,1,1;1,1,1,0,1,0;0,1,0,1,0,0;0,0,0,1,0,0];
T=[0.2,0.3,0.05,0.8,0.4,0.5];
[p1,minp,maxp,t1,mint,maxt]=premnmx(P,T);
net=newff(minmax(P),[8,6,1],{'tansig','tansig','purelin'},'trainlm');
%设置训练次数
net.trainParam.epochs = 5000;
%设置收敛误差
net.trainParam.goal=0.0000001;
%训练网络
[net,tr]=train(net,p1,t1);
%输入数据
a=[1;1;32;34;0;0;1;0];
%将输入数据归一化
a=premnmx(a);
%放入到网络输出数据
b=sim(net,a);
%将得到的数据反归一化得到预测数据a
c=postmnmx(b,mint,maxt);
c

具体图像
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

总结

在实现上述过程中时,可以发现其实神经网络的效果其实有时候并不是令人那么满意,有兴趣的同学可以看一看大家对BP神经网络的改进。其次,其实如果同学们动手做了这个建模的话,其实单单一个贝叶斯判别器也可以实现一定的预测效果,但是不同用户的数据不同,不能把所有用户当成一个用户来处理,真正用贝叶斯模型去做“预测”的时候,可能需要搭建很多模型,特别是对数据很大的时候,比如有几万个用户的数据,你可能就要考虑几万个不同的模型,虽然程序实现起来不是特别难,但是贝叶斯模型始终是一个判别模型,做预测还是不太合适(个人观点)。
也有同学会问既然不同用户要不同考虑,那加上一个神经网络就不需要考虑用户之间的区别了吗?答案是否定的,加上神经网络我们依然要考虑这一点。所以,最后,我对这个模型的改进之处做了一些思考
1、为了结果的准确性,对不同用户的概率进行平均或其他方式的处理。
2、利用遗传算法或者其他数值算法对BP神经网络进行改进,提高最终结果的准确性和稳定性。

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值