前言
這是堅持更新的第四天,前兩天更新了數學建模的一些基礎模型,今天我們做一個數學建模的實體,
了解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神經網路進行改進,提高最終結果的準確性和穩定性,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/295313.html
標籤:AI
下一篇:圖解CNN十大演算法架構
