【Python自然语言处理】隐马尔可夫模型中维特比(Viterbi)算法解决商务选择问题实战(附源码 超详细必看)

news2024/11/13 9:36:10

需要源码请点赞关注收藏后评论区留言私信~~~

一、统计分词

统计分词基本逻辑是把每个词语看做由单字组成,利用统计学原理计算连接字在不同文本中出现的次数,以此判断相连字属于特定词语的概率。

二、隐马尔可夫模型

当一个随机过程在给定现在状态及所有过去状态情况下,其未来状态的条件概率分布仅依赖于当前状态,那么此随机过程通常称之为马尔可夫过程。隐马尔可夫模型(Hidden Markov Model:HMM)是含有隐含且未知参数的马尔可夫过程。

下图表示了隐马尔可夫模型隐藏变量和观测变量相互之间的依赖关系,在任意时刻,观测变量仅仅依赖于隐藏变量,与其他隐藏状态变量和观测变量的取值没有直接关联,同时,特定时刻隐藏状态仅依赖于紧邻上一时刻隐藏状态,与其他状态无关 

三、商务问题描述 

假定某公司销售竞赛指导委员会从n个部门选取员工参加销售业务竞赛,每个部门有m类不同销售能力的员工组成,初始状态下随机选择一个部门后再随机挑选一名职工,职工的类型可以观测,但职工所在的部门为未知信息,第一名员工选择完后,继续按照随机概率选择下一个部门和下一名员工,依次循环知道选择的员工数量满足竞赛人员挑选要求为止

在这个实例中,隐马尔可夫模型可以表示为

1:部门状态信息 n

2:员工的销售能力状态 m

3:从一个部门迁移到另一个部门的转移概率

4:从特定部门选择特定类型的员工概率

5:初始概率分布

隐马尔可夫模型重点解决的问题包括

1:如何确定观测序列的生成概率

2:观测序列已知的前提下 如何优化参数并最大化观测序列的生成概率

3:如何优化隐藏状态序列 从而实现输出期望值观测序列 

四、维特比算法

维特比算法主要用于解决优化隐藏状态序列从而实现输出和期望值观测序列的问题

维特比算法的基本逻辑:

(1)如果最短(或概率最大)路径P经过特定节点G,那么从这条路径起点S到节点G的子路径M,是起点S到节点G之间的最短路径。

(2)从起点S到终点E路径必定经过i时刻的某个状态,如果记录起点S到该状态所有节点的最短路径集合,整体最短路径必经过集合中的某一条。

(3)假定从状态i到状态i+1,起点S到状态i各节点的最短路径已知,计算S到i+1状态的节点的最短路径可以分解为从S到i状态的最短路径,以及从i状态节点到i+1状态节点的最短路径。

下面是利用维特比算法解决上面的商务问题的结果

由结果可知 最优化的部门选择序列应该是先从第二个部门开始,其次是第一个部门,最后是第三个部门(索引从0开始)

 五、代码

部分代码如下 需要全部代码请点赞关注收藏后评论区留言私信~~

import numpy as np

#维特比算法
def viterbi_algorithm(H, B, rho, O):
	#隐马尔科夫模型隐藏状态数 N=3,总共有三个班级,分别用0,1,2表示
    N = np.shape(H)[0] 
    #观测序列时间序列
    T = np.shape(O)[0]
    
    #特定时刻隐藏状态对应最优状态序列概率 
    mu = np.zeros((T,N))
    #特定时刻隐藏状态对应最优状态前导序列概率 
    index = np.zeros((T,N))
    
    for t in range(T):
        if 0 == t:
            mu[t] = np.multiply(rho.reshape((1, N)), np.array(B[:,O[t]]).reshape((1, N)))
            continue
        for i in range(N):
            temp = np.multiply(np.multiply(mu[t-1], H[:,i]), B[i, O[t]])
            mu[t,i] = max(temp)
            index[t][i] = np.argmax(temp)
    hs = np.zeros((T,))
    t_range = -1 * np.array(sorted(-1*np.arange(T)))
    for t in t_range:
        if T-1 == t:
            hs[t] = np.argmax(mu[t])
        else:
            hs[t] = index[t+1, int(hs[t+1])]
    
    print('最优隐藏状态序列为:', hs)
    return hs
 
def Viterbi_init():
    #H是隐藏状态转移概率分布
 )
    #初始状态概率分布
    rho = np.array([[0.2],
                    [0.4],
                    [0.4]])
    
    #学生的计算机水平观测序列:0-低水平,1-高水平
    O = np.array([[1],
                  [1],
                  [0]]) 
    viterbi_algorithm(H,B,rho,O)
        
if __name__=='__main__':
    Viterbi_init()

 创作不易 觉得有帮助请点赞关注收藏~~~

 

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

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

相关文章

计算机组成详解(运算器、控制器、存储器、I/O部件)

文章目录1 概述1.1 计算机组成图2 三大部件2.1 中央处理器 CPU运算器 ALU控制器 CU2.2 内存储器2.3 输入输出设备3 扩展3.1 计算机系统结构图1 概述 1.1 计算机组成图 2 三大部件 2.1 中央处理器 CPU 运算器 ALU 运算器 ALU:Arithmetic Logic Unit,算…

游泳可以戴的耳机有哪些、推荐几款真正能戴着游泳的蓝牙耳机

现在身边很多人也是非常喜欢游泳,尤其是到了夏天的时候,这项运动可以消耗体内多余脂肪,起到很好的强身健体的作用,比其跑步来说有着明显的优势。不过想要转移游泳带来的疲惫,那么在水里面听听激情的音乐是必不可少的&a…

DAY04-网页布局实战常用HTML标签完整盒模型

文章目录网页布局实战一 HTML标签二 布局标签三 文本标签1文字标签2 列表3 图片标签4 超连接5 相对路径与绝对路径四 行和块的区分五 行和块的转换六 标准盒模型外边距内边距边框盒子模式七 案例网页布局实战 一 HTML标签 HTML的标签分为两类: 布局标签&#xff…

springboot中使用Spring Data Jpa

Springboot 中如何集成spring data jpa 一 什么是ORM? ORM即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道&#…

图论期末复习(《图论机器应用》——朴月华)

文章目录一、图的基本概念二、图的连通性三、树四、E 图与 H 图五、对集与独立集六、平面图与网络流一、图的基本概念 1、基本概念2、顶点的度 概念,有关定理及推论(握手定理),度序列的概念及相关结论,根据度序列画图…

【星球】【slam】 研讨会(5)VINS:Mono+Fusion 重点提炼

VINSFusion重点梳理 A重点梳理和回顾 1传感器前端 视觉前端 特征点提取 opencv接口 goodfeaturestotrack 光流追踪 opencv接口 calcOptical 异常点剔除 光流剔除的异常点 本质矩阵的校验(不符合本质矩阵的点筛除) 特征点去畸变 “逐渐逼近式”的计算方式 特征点性质的计算 IM…

常用算法-Java

基础概念 程序 数据结构 算法 算法特性:输入、输出、有穷性、确定性、可靠性 算法目标:正确性、可读性、健壮性、运行时间少、内存空间小 时间复杂度 时间复杂度是用来估计算法运行时间的一个单位。 一般来说,时间复杂度高的算法比时…

【高并发基础】理解 MVCC 及提炼实现思想

文章目录1. 前言2. MVCC 概念2.1 MVCC 版本链2.2 MVCC trx_id2.3 MVCC Read View3. 提出问题4. 解决问题4.1 不读未提交的数据4.1.1 一般的并发情况4.1.2 特殊的并发情况4.1.3 剩下的并发情况4.2 如果自己修改了数据,要第一时间读到5. MySQL RC 使用 MVCC5.1 MVCC D…

Git使用学习记录(一、前置知识)

Git使用学习记录(一、前置知识) Git简介 Git 是什么? Git 是目前为止最为先进的分布式版本控制系统(分布式版本控制系统没有“中央服务器”,每个⼈的电脑上都是⼀个完整的版本库,⼯作时不需要联网&#xff…

Dynamics 365 Environment Variables(环境变量)的应用

环境变量这个功能很早就有了,但最近才关注到,是个不错的功能,所以写篇介绍下它的应用。 项目里都会有配置实体这么个东西,用于存储各种常量或者与其他系统集成时的各种配置参数,以往我们都是自定义一个实体用来存放&am…

PyTorch 2.0发布了,一行代码提速76%

PyTorch 官方:我们这次的新特性太好用了,所以就直接叫 2.0 了。 前段时间,PyTorch 团队在官方博客宣布 Pytorch 1.13 发布,包含 BetterTransformer 稳定版等多项更新。在体验新特性的同时,不少人也在期待下一个版本的推…

Mysql进阶学习(十)存储过程和函数流程控制结构

Mysql进阶学习(十)存储过程和函数&流程控制结构存储过程和函数1. 存储过程1.1 创建语法1.2 调用语法1.3 删除存储过程1.4 查看存储过程的信息2. 函数2.1 创建语法2.2 调用语法2.3 查看函数2.4 删除函数3. 存储过程/函数案例4. 流程控制结构4.1. 分支…

心肺运动试验----各类参数分析笔记

1:定义 什么是心肺运动试验? 心肺运动试验(CPET)是一种可以使研究者同时观察患者的心血管系统和呼吸系统对同一种运动应激的反应情况的临床试验。因为,呼吸道的气体交换与循环相关联,可以同时反映心排血量、肺血流以及外周O2的摄…

详解设计模式:命令模式

命令模式(Command Pattern)也被称为行动模式(Action Pattern)、事物模式(Transaction Pattern),是在 GoF 23 种设计模式中定义了的行为型模式。 命令模式 是一种数据驱动的设计模式。请求以命令…

序列类型(元组()、列表[]、字符串““)、集合类型({}、set())

序列类型 组合数据类型能够将多个同类型或不同类型的数据组织起来 ,通过单一的表示使数据操作更有序更容易。根据数据之间的 关系,组合数据类型可以分为三类: 序列类型、集合类型和映射类型。 • 序列类型是一个元素向量,元素之间…

Centos8安装CDH解决不兼容问题

问题 我的配置 系统: centos8 安装包: CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel.sha cloudera-manager-centos7-cm5.16.1_x86_64.tar.gz manifest.json 在 http://192.168.1.1:7180/ 上通过web分配percel时分配…

Python实现基于内容的协同过滤推荐算法构建电影推荐系统

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 基于内容(Content Based,CB)的推荐算法,根据用户过去是一段时间内喜欢的物品,由…

DHTMLX Spreadsheet JavaScript Pro 5.0

Spreadsheet — Web-Based Spreadsheet Solution 破解版DHTMLX Spreadsheet is a framework-agnostic JavaScript solution that allows you to quickly add an editable Excel-like spreadsheet on a web page. Unlike online services, DHTMLX Spreadsheet allows you to st…

Windows x64隐藏可执行内存

文章目录实现效果实现原理VAD内存什么是VAD内存查看VAD内存VAD属性VAD内存可利用的点x64分页机制W7 x64下任意地址PDT PTE算法W10 x64定位随机化页表基址实现隐藏可执行内存隐藏内存对抗实现效果 驱动程序在Test进程中申请一块内存地址并打印,然后控制台程序在接收到…

Web中的Bias(更新中)

目录前言数据偏见对人们的影响衡量偏见活跃偏差或少数人的智慧数据偏见其他参考文献前言 本文参考Ricardo Baeza-Yates 2018年发表在《Communications of the ACM》的论文Bias on the Web,论文旨在提高人们对网络使用和内容中存在的偏见对我们所有人造成的潜在影响…