[MMUB]隠れマルコフモデルに基づく携帯電話ユーザー行動モデリング-隠れマルコフモデル

1.ソフトウェアバージョン

matlab2013b。

2.このアルゴリズムの理論的知識

上記の紹介からわかるように、論文のデータ形式は次のとおりです。

時間1

Time2

時間3

時間4

時間5

時間6

.....。

USER1

Pos1(1)

Pos1(2)

Pos1(3)

Pos1(4)

Pos1(5)

Pos1(6)

.....。

USER2

Pos2(1)

Pos2(2)

Pos2(3)

Pos2(4)

Pos2(5)

Pos2(6)

.....。

USER3

Pos3(1)

Pos3(2)

Pos3(3)

Pos3(4)

Pos3(5)

Pos3(6)

.....。

.....。

.....。

.....。

.....。

.....。

.....。

.....。

.....。

ユーザー

Posn(1)

Posn(2)

Posn(3)

Posn(4)

Posn(5)

Posn(6)

.....。

        つまり、異なる時間に複数のユーザーの位置を収集し、アルゴリズムを使用して次の位置を予測することによって(このペーパーでは、次の6時間を予測します。ここでは、いつでも位置を予測できるようにパラメーターを構成可能に設定します)

        最初の論文では、次のように述べられています。

        同じことがサービス、同じタイプのデータにも当てはまります(サービスはこのホワイトペーパーではカバーされていません)

つまり、使用しているモデルの入力データ型は次の形式である必要があります。

時間1

Time2

時間3

時間4

.....。

USER1

Pos1、Ser1(1)

Pos1、Ser1(2)

Pos1、Ser1(3)

Pos1、Ser1(4)

.....。

USER2

Pos2、Ser2(1)

Pos2、Ser2(2)

Pos2、Ser2(3)

Pos2、Ser2(4)

.....。

USER3

Pos3、Ser3(1)

Pos3、Ser3(2)

Pos3、Ser3(3)

Pos3、Ser3(4)

.....。

.....。

.....。

.....。

.....。

.....。

.....。

ユーザー

Posn、Sern(1)

Posn、Sern(2)

Posn、Sern(3)

Posn、Sern(4)

.....。

したがって、リクエストでは、モデルの入力、つまり上記の形式のデータ型が必要です。

具体的なデータは次のとおりです。

3.コアコード

clc;
clear;
close all;
warning off;
pack;
addpath 'func\'
load locs_realitymining2.mat

N1    = 100;%为了防止出现连续状态不变得情况,这里N1设置大点
N2    = 6;
N     = N1 + N2; %前N1个用于训练,后N2个用于预测
Times = 1000;
%通过多次循环,计算正确率
for Nu = 1:length(Locaiton_id3)
    UNo   = Nu;%用户标号
    for tim = 1:Times
        Dat   = Locaiton_id3{1,UNo}(1+tim:N+tim);
        State = unique(Dat);
        %Counting the User Behavior Patterns
        %Counting the User Behavior Patterns
        Alpha = [];
        maps  = [];
        MAP   = [];
        [Alpha,maps,MAP] = func_find_alpha_table(Dat,Locaiton_id3,State);
        %Modeling the User Behaviors,the user’s behavior model can be built based on the resulting counting tables
        %状态转移概率%释放概率
        %对应算法步骤中计算STATE的步骤,计算moving or steady??
        [seq,states]         = func_cal_moving_steady(maps(1:N));%这里需要地址映射为自然数
        [TRANS_EST,EMIS_EST] = hmmestimate(seq,states);
        [r,c] = size(TRANS_EST);
        for p1 = 1:r
            for p2 = 1:c
                if TRANS_EST(p1,p2) == 0
                   TRANS_EST(p1,p2) = eps;
                end
                if TRANS_EST(p1,p2) == 1
                   TRANS_EST(p1,p2) = 1-eps;
                end                
            end
        end
        
        %通过vertiber算法计算概率
        likelystates = hmmviterbi(seq,TRANS_EST,EMIS_EST);
        Ps = length(find(likelystates==1))/N;
        Pm = length(find(likelystates==2))/N;
        %预测后面时刻的位置
        likelihood_next_node = zeros(length(State),length(State));
        for i = 1:length(State)
            for j = 1:length(State)
                if i == j
                   likelihood_next_node(i,j) = Ps*Alpha{i,j}(1); 
                else
                   likelihood_next_node(i,j) = Pm*Alpha{i,j}(1);
                end
            end
        end
        Plikelihood_next_node = zeros(length(State),N2);
        for k = 1:N2
            for i = 1:length(State)
                Plikelihood_next_node(i,k) = likelihood_next_node(maps(N1+k-1),i)/(sum(likelihood_next_node(:,i))+eps);
            end
            [V,I]     = max(Plikelihood_next_node(:,k));
            for j = 1:size(MAP,1)
                if I == MAP(j,2);
                   POS(k)  = MAP(j,1);
                end
            end   
        end
        NNN(:,tim) = (Dat(N1+1:N)==POS(1:N2)')';
    end
    for k = 1:N2
        Precision1m(k,Nu) = sum(NNN(k,:))/Times;
    end
end
save tmps2.mat Precision1m
clear all;
load locs_realitymining2.mat
N1    = 100;
N2    = 6;
N     = N1 + N2;
Times = 200;
for i = 1:length(Locaiton_id3)
    L(i) = length(Locaiton_id3{i});
end
Len = min(L);
%在我们划定的,都存在用户行为的时间段内进行对比
Therehold = 20;
Flag      = 0;
ASS       = cell(length(Locaiton_id3),length(Locaiton_id3));
for k1 = 1:length(Locaiton_id3)
    for k2 = k1+1:length(Locaiton_id3)
        Flag = 0;
        for i = 1:Len
            if Locaiton3{k1}(i) == Locaiton3{k2}(i)%假设持续时间大于20为关联
               Flag = Flag + 1;
            else
               Flag = 0;
            end
            if Flag > Therehold
               ASS{k1,k2} = [ASS{k1,k2},i];
               Flag = 0;
            end
        end
    end       
end
for Nu = 1:length(Locaiton_id3)
    UNo   = Nu;%用户标号
    for tim = 1:Times
        UNo
        tim
        %计算状态数
        Dat   = Locaiton_id3{1,UNo}(1+tim:N+tim);
        State = unique(Dat);
        %计算状态概论
        P     = func_trans_prob(Dat,State,N);
        %计算状态转移概论
        [P_tra,Map] = func_transition_matrix(Dat,State); 
        for j = 1:size(Map,1)
            if Dat(N1) == Map(j,1);
               Initial = Map(j,2);
            end
        end
        %开始预测
        TT          = zeros(1,length(State));
        TT(Initial) = 1;
        PState{1}= TT;
        for i = 2:N2+1
            PState{i} = PState{i-1}*P_tra;
            [V,I]     = max(PState{i});
            for j = 1:size(Map,1)
                if I == Map(j,2);
                   Pos(i-1)  = Map(j,1);
                end
            end
        end
        NNN(:,tim) = (Dat(N1+1:N)==Pos(1:N2)')';
    end
    for k = 1:N2
        Precision1(k,Nu) = sum(NNN(k,:))/Times;
    end
end
save tmps1.mat Precision1

load tmps1.mat
load tmps2.mat

%结合CPB结果最后的概率
Precision2 = Precision1;
for Nu1 = 1:length(Locaiton_id3)
    for Nu2 = 1:length(Locaiton_id3)
        for tim = 1:Times
            if isempty(ASS{Nu1,Nu2}) == 0
            for k = 1:length(ASS{Nu1,Nu2})
                if ASS{Nu1,Nu2}(k) == tim
                   for k2 = 1:N2
                       Precision2(k2,Nu1) = max(max(Precision1(k2,Nu1),Precision1(k2,Nu2)),max(Precision1m(k2,Nu1),Precision1m(k2,Nu2)));  
                   end
                end
            end
            end
        end
    end
end
save Result.mat Precision2 
figure;
load Result1.mat
Views1 = [mean(Precision1(:,:),2)];
Views2 = [mean(Precision2(:,:),2)];
Views  = [Views1,Views2];
bar(Views);
axis([0,N2+1,0.4,0.8]);
xlabel('Times');
ylabel('Precision');
legend('Markov','MMUB CPB Markov');
 

 4.操作手順とシミュレーションの結論

 

 

 

 

       このアルゴリズムでは、CBP + MMUB+MarkovChainを組み合わせて予測アルゴリズムを構築します。

 シミュレーション結果から、改善されたアルゴリズムは他のアルゴリズムと比較して一定のパフォーマンスの改善があることがわかります。

5.参考文献

A05-14

6.完全なソースコードを入手する方法

方法1:ブロガーに連絡するためのWechatまたはQQ
方法2:サブスクリプション、チュートリアルのケースコードとこのブログの2つの完全なソースコードへの無料アクセス

 

おすすめ

転載: blog.csdn.net/ccsss22/article/details/124351004