m基于隐马尔科夫模型(HMM)的手机用户行为预测(MMUB)算法matlab仿真

news2025/1/19 17:23:02

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

       隐马尔可夫模型(Hidden Markov Model,HMM)是一种统计模型,广泛应用在语音识别,词性自动标注,音字转换,概率文法等各个自然语言处理等应用领域。经过长期发展,尤其是在语音识别中的成功应用,使它成为一种通用的统计工具。

       隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析,例如模式识别。是在被建模的系统被认为是一个马尔可夫过程与未观测到的(隐藏的)的状态的统计马尔可夫模型。隐马尔可夫模型是马尔可夫链的一种,它的状态不能直接观察到,但能通过观测向量序列观察到,每个观测向量都是通过某些概率密度分布表现为各种状态,每一个观测向量是由一个具有相应概率密度分布的状态序列产生。所以,隐马尔可夫模型是一个双重随机过程----具有一定状态数的隐马尔可夫链和显示随机函数集。自20世纪80年代以来,HMM被应用于语音识别,取得重大成功。到了90年代,HMM还被引入计算机文字识别和移动通信核心技术“多用户的检测”。HMM在生物信息科学、故障诊断等领域也开始得到应用。
        一种HMM可以呈现为最简单的动态贝叶斯网络。隐马尔可夫模型背后的数学是由LEBaum和他的同事开发的。它与早期由RuslanL.Stratonovich提出的最优非线性滤波问题息息相关,他是第一个提出前后过程这个概念的。
        在简单的马尔可夫模型(如马尔可夫链),所述状态是直接可见的观察者,因此状态转移概率是唯一的参数。在隐马尔可夫模型中,状态是不直接可见的,但输出依赖于该状态下,是可见的。每个状态通过可能的输出记号有了可能的概率分布。因此,通过一个HMM产生标记序列提供了有关状态的一些序列的信息。注意,“隐藏”指的是,该模型经其传递的状态序列,而不是模型的参数;即使这些参数是精确已知的,我们仍把该模型称为一个“隐藏”的马尔可夫模型。隐马尔可夫模型以它在时间上的模式识别所知,如语音,手写,手势识别,词类的标记,乐谱,局部放电和生物信息学应用。
       隐马尔可夫模型可以被认为是一个概括的混合模型中的隐藏变量(或变量),它控制的混合成分被选择为每个观察,通过马尔可夫过程而不是相互独立相关。最近,隐马尔可夫模型已推广到两两马尔可夫模型和三重态马尔可夫模型,允许更复杂的数据结构的考虑和非平稳数据建模。

       基于隐马尔科夫模型(HMM)的手机用户行为预测(MMUB)算法结构如下图所示:

这里,我们采用的数据格式如下:

Time1

Time2

Time3

Time4

Time5

Time6

......

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)

......

......

......

......

......

......

......

......

......

USERn

Posn(1)

Posn (2)

Posn (3)

Posn (4)

Posn (5)

Posn (6)

......

        即通过采集多个用户在不同时刻的位置,通过算法,来预测后面的位置。即,我们所使用的模型的输入数据类型应该为如下的格式:

Time1

Time2

Time3

Time4

......

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)

......

......

......

......

......

......

......

USERn

Posn,Sern (1)

Posn ,Sern (2)

Posn,Sern (3)

Posn,Sern (4)

......

模型的输入,即类同如上格式的数据类型。

2.仿真效果预览

matlab2022a仿真结果如下:

 

 

 

       从仿真结果可知,单独的MMUB+HMM的预测方法,精度并不理想。但是MMUB具有其优势,就是用户行为模型的构建,从而有效的估计每个用户的可能发生的行为。

3.MATLAB核心程序

N1    = 100;%为了防止出现连续状态不变得情况,这里N1设置大点
N2    = 6;
N     = N1 + N2; %前N1个用于训练,后N2个用于预测
Times = 1000;

%通过多次循环,计算正确率
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);

        %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
        Precision1(k,Nu) = sum(NNN(k,:))/Times;
    end
end
figure;
Views = [Precision1(:,1),Precision1(:,2),Precision1(:,3)];
bar(Views);
xlabel('Times');
ylabel('Precision');
legend('user #1','user #2','user #3');
title('MMUB');
figure;
Views = [mean(Precision1(:,:),2)];
bar(Views);
xlabel('Times');
ylabel('Precision');
legend('The average of 15 Users');
title('MMUB');
05_014_m

4.完整MATLAB

V

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R语言中的Nelson-Siegel模型在汇率预测的应用

这篇文章的目的是指导读者逐步使用R编程语言实现Nelson-Siegel模型的步骤。 最近我们被客户要求撰写关于Nelson-Siegel模型的研究报告,包括一些图形和统计输出。 您可能已经知道,估计利率期限结构是任何资产定价的关键,因此对投资者和政策制…

5G无线技术基础自学系列 | 基于Massive MIMO的场景化波束优化

素材来源:《5G无线网络规划与优化》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 前面内容提到, 5G中引入了M…

机器人机械臂运动学——运动学正向解算

本博客内容参考台湾大学_林沛群教授_机器人学的课程内容 1.相对运动关系的描述方法 假设有现在这样的一个情景,从左到右有三个转轴,转轴本身可以转动,也可以沿着轴线上下平动,那么我们如何描述其中的运动学关系及其位置关系呢&am…

Linux Red Hat 8.0 cat、cut、sed、tail命令

1.cat: 在终端设备上显示文件内容 常用选项: -n 显示行数(空格有编号) -b 显示行数(空格没有编号) 命令格式:cat 选项 文件 特殊用法tac:倒着显示内容 配合重定向使用 查看 test1…

DPDK 多进程

DPDK库里是支持多进程和多线程,本文主要总结多进程的相关的操作。 DPDK多进程使用的关键启动参数: --proc-type:指定一个dpdk进程是主进程还是副进程(参数值就用上面的primary或是secondary,或者是auto)-…

【Bio】基础生物学 - 五个重要官能团 five important functional group

文章目录1. 羟qiǎng基(hydroxyl)2. 羧suō基(carboxyl)3. 氨基(amino)4. 磷酸盐(phosphate)5. 巯基(sulfhydryl)1. 羟qiǎng基(hydroxyl&#xf…

最新进展 | Android 自定义机器学习堆栈

作者 / Android 机器学习平台团队相较于服务器端机器学习 (ML),设备端机器学习有其独特的优势,如支持离线使用、延迟更低、隐私性更高和推理成本更低,因此 Android 中设备端机器学习的使用迅速增长。在构建基于设备端 ML 的功能时&#xff0c…

Android基于perfetto分析native内存泄露

官方文档(可在Chome直接翻译) https://perfetto.dev/docs/data-sources/native-heap-profiler 示例 raw-trace 资源地址 https://download.csdn.net/download/CSqingchen/87321798 本文示例是windows,这里使用了python工具,在Linux和mac同样适用 首先安装…

胡凡 《算法笔记》 上机实战训练指南 3.1 简单模拟

胡凡 《算法笔记》 上机实战训练指南 3.1 持续更新中 , 菜鸡的刷题笔记… 大学到现在了还没咋好好刷过题,该push自己了… 文章目录胡凡 《算法笔记》 上机实战训练指南 3.13.1 简单模拟【PAT B1001】害死人不偿命的(3n1)猜想【PAT B1032】挖掘…

spring扩展之基于HandlerMapping实现接口灰度发布的demo

背景 面试经常被问到,你了解spring源码吗?有基于spring做过什么扩展吗?除了PropertyPlaceholderConfigurer处理占位符(被说烂了)还有其他的吗? 看了springmvc的源码,有了一个新的案例可讲(吹) 基于HandlerMapping实现…

运营活动没做好,是没有明确目标

有很多运营人在做项目的时候,其实没有一个明确的目标,不清楚自己究竟为什么要做这件事。 我们在做运营方案前,要分析用户的需求有哪些,如何达成目标,制定出一个计划: 1、要做什么——计划 我们需要掌握运…

ES基础入门

ES 一、简介 1、Elastic Stack ES技术栈: ElasticSearch:存数据搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。 使用…

软件测试面试题和面试流程

自我介绍部分 .... 项目经历 .... 技能部分 性能 使用什么工具?介绍下最近做的性能测试项目,性能测试过程中遇到哪些问题?性能标准谁来定?你们性能测试的流程是什么?什么是分布式?为什么要用分布式&a…

硅片检测半导体运动台控制器的设计(二)

虽然我国目前对于精密硅片检测运动平台的整机研发还比较空白,但是值得注意的是,对于 X、Y 两自由度运动平台,甚至多自由度运动平台、先进驱动方式和控制策略的研究已经积累了一定的经验,吸收这些经验并应用于本运动平台的研发对选…

分布式系统(事务处理)

文章目录事务(Transaction)分布式事务原子提交协议单阶段提交两阶段提交三阶段提交串行等价 / 并发控制分布式死锁锁超时全局等待图边追逐算法事务放弃时的恢复服务器崩溃后的恢复恢复文件重组恢复文件日志从Crash 中恢复2PC 的恢复事务(Tran…

【Bio】基础生物学 - 化学键 chemical bond

文章目录化学键1. 共价键2. 离子键3. 金属键4. 非共价键5. 氢键Ref.化学键 化学键(chemical bond)是纯净物分子内或晶体内相邻两个或多个原子(或离子)间强烈的相互作用力的统称。使离子(ion)相结合或原子&…

【强化学习笔记】二.价值学习

文章目录Q&A1.DQN工作原理2.如何训练DQN2.1.如何更新模型参数3.2.1.完整走完流程,再更新模型参数。3.2.2.无需走完流程,即可更新模型参数。3.如何将TD算法应用到DQN网络Q&A 问:强化学习的目标是什么? 最大化累计奖励&am…

Windows 的 常用指令操作

目录 1、启动方式 2、修改cmd窗口背景色和字体色 3、文件夹常用指令 4、网络相关常用指令 5、其他常用命令 1、启动方式 用户启动:winR,输入cmd,Enter。 管理员启动:winR,输入cmd,CTRLShiftEnter。 …

Dubbo架构设计与源码解析(二) 服务注册

一、Dubbo简介 Dubbo是一款典型的高扩展、高性能、高可用的RPC微服务框架,用于解决微服务架构下的服务治理与通信问题。其核心模块包含【RPC通信】和【服务治理】,其中服务治理又分为服务注册与发现、服务容错、负载均衡、流量调度等。今天…

强化学习 —— DQN 代码遇到的问题总结

No module named ‘torch‘ 在把 DQN 代码复制到 PyCharm,点击“运行”后,出现了该报错。是因为当前环境中缺少 pytorch。解决方法: pip install torch如果因为网络问题安装特别慢,可从如下源进行下载: pip install…