语音识别学习日志 2019-7-14 语音识别基础知识准备3 {Kmean算法分析与HMM(Hidden Markov Model)模型}

Kmean算法

聚类算法

对于"监督学习"(supervised learning),其训练样本是带有标记信息的,并且监督学习的目的是:对带有标记的数据集进行模型学习,从而便于对新的样本进行分类。而在“无监督学习”(unsupervised learning)中,训练样本的标记信息是未知的目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。对于无监督学习,应用最广的便是"聚类"(clustering)
  聚类算法试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”(cluster),通过这样的划分,每个簇可能对应于一些潜在的概念或类别。

kmeans算法又名k均值算法。其算法思想大致为:先从样本集中随机选取 k 个样本作为簇中心,并计算所有样本与这 k 个“簇中心”的距离,对于每一个样本,将其划分到与其距离最近的“簇中心”所在的簇中,对于新的簇计算各个簇的新的“簇中心”

算法的算法过程如下:

D为训练集,K为聚类簇的个数,maxIter最大迭代次数
KMeans(D, K, maxIter):随机选取K个中心点for j in range(m):计算每个样本Xj到各个簇中心的距离根据最近距离,筛选样本归属于哪个簇for i in range(k):计算新的簇的中心,利用均值如果簇中心改变,则更新该簇中心,否则不变如果每个簇的中心都没更新则退出算法

算法分析:

kmeans算法由于初始“簇中心”点是随机选取的,因此最终求得的簇的划分与随机选取的“簇中心”有关,也就是说,可能会造成多种 k个簇的划分情况。这是因为kmeans算法收敛到了局部最小值,而非全局最小值

二分k-means算法

  基于kmeans算法容易使得结果为局部最小值而非全局最小值这一缺陷,对算法加以改进。使用一种用于度量聚类效果的指标SSE(Sum of Squared Error),即对于第 ii 个簇,其SSE为各个样本点到“簇中心”点的距离的平方的和,SSE值越小表示数据点越接近于它们的“簇中心”点,聚类效果也就越好。以此作为划分簇的标准。
  算法思想是:先将整个样本集作为一个簇,该“簇中心”点向量为所有样本点的均值,计算此时的SSE。若此时簇个数小于 k,对每一个簇进行kmeans聚类(k=2) ,计算将每一个簇一分为二后的总误差SSE,选择SSE最小的那个簇进行划分操作。

算法的算法过程如下:

D为训练集,K为聚类簇的个数,maxIter最大迭代次数
KMeans(D, K, maxIter):将所有点看做一个簇,计算此时“簇中心”向量while “簇中心”个数h<k :for i=1,2,...,h do将第 i 个簇使用 kmeans算法进行划分,其中 k=2计算划分后的误差平方和 SSEi比较 k 种划分的SSE值,选择SSE值最小的那种簇划分进行划分更新簇的分配结果添加新的“簇中心”until 当前“簇中心”个数达到 k

二分k-means算法分析:

二分k-means算法不再随机选取簇中心,而是从一个簇出发,根据聚类效果度量指标SSE来判断下一步应该对哪一个簇进行划分,因此该方法不会收敛到局部最小值,而是收敛到全局最小值。

HMM模型

隐马尔可夫模型(Hidden Markov Model,以下简称HMM)。

1、什么样的问题需要HMM模型

使用HMM模型的问题一般有一下两个特征:

      1)问题是基于序列的,比如时间序列或者状态序列。

      2)问题中有两类数据,一列序列数据是可以观测的,即观测序列;而另一类数据是不能观测到的,即隐藏状态序列,简称状态序列。

有这两个特征,那么问题一般可以用HMM模型解决。这样的问题在实际生活中是很多的。比如:打字的过程,在键盘上敲出来的一系列字符就是观测序列,而实际想输入的句子就是隐藏序列,输入法的任务就是根据敲入的一系列字符尽可能的猜测我要输入的词语,并把最可能的词语放在最前面,这就可以看做一个HMM模型。

2、HMM模型的定义

HMM模型详细介绍:http://www.52nlp.cn/hmm-learn-best-practices-two-generating-patterns

http://www.52nlp.cn/hmm-learn-best-practices-three-hidden-patterns

http://www.52nlp.cn/hmm-learn-best-practices-four-hidden-markov-models

对于HMM模型,假设Q是所有可能的隐藏状态的集合,V是所有可能的观测状态的集合,即:

                                                                Q={q_1,q_2,...,q_N}, V={v_1,v_2,...v_M}

其中,N是可能的隐藏状态数,M是所有的可能的观察状态数。

对于一个长度为T的序列,I对应的状态序列, O是对应的观察序列,即:

                                                              I={i_1,i_2,...,i_T}, O={o_1,o_2,...o_T}

其中,任意一个隐藏状态i_t∈Q, 任意一个观察状态o_t∈V。

HMM模型做了两个很重要的假设如下:

1)齐次马尔科夫链假设。即任意时刻的隐藏状态只依赖于它前一个隐藏状态。当然这样假设有点极端,因为很多时候我们的某一个隐藏状态不仅仅只依赖于前一个隐藏状态,可能是前两个或者是前三个。但是这样假设的好处就是模型简单,便于求解。如果在时刻t的隐藏状态是i_t=q_i,在时刻t+1的隐藏状态是i_t_+_1=q_j , 则从时刻t到时刻t+1的HMM状态转移概率a_i_j可以表示为:

                                                  a_i_j=P(i_t+1=q_j|i_t=q_i)

这样a_i_j可以组成马尔科夫链的状态转移矩阵A:

                                                A=[a_i_j]_N_*_N

 

2)观测独立性假设。即任意时刻的观察状态只仅仅依赖于当前时刻的隐藏状态,这也是一个为了简化模型的假设。如果在时刻t的隐藏状态是i_t=q_j, 而对应的观察状态为o_t=v_k, 则该时刻观察状态v_k在隐藏状态q_j下生成的概率为b_j(k),满足:

                                               b_j(k)=P(o_t=v_k|i_t=q_j)

这样b_j(k)可以组成观测状态生成的概率矩阵B:

                                               B=[b_j(k)]_N_*_M

除此之外,我们需要一组在时刻t=1的隐藏状态概率分布Π:

                                              \Pi =[\pi(i)]_N, 其中 \pi(i)=P(i_1=q_i)

一个HMM模型,可以由隐藏状态初始概率分布Π, 状态转移概率矩阵A和观测状态概率矩阵B决定。Π, A决定状态序列,B决定观测序列。因此,HMM模型可以由一个三元组λ表示如下:

                                             \lambda =(A,B,\Pi )

3、一个HMM模型实例

一个简单的实例来描述上面抽象出的HMM模型。这是一个盒子与球的模型,例子来源于李航的《统计学习方法》。

假设我们有3个盒子,每个盒子里都有红色和白色两种球,这三个盒子里球的数量分别是:

                                                

按照下面的方法从盒子里抽球,开始的时候,从第一个盒子抽球的概率是0.2,从第二个盒子抽球的概率是0.4,从第三个盒子抽球的概率是0.4。以这个概率抽一次球后,将球放回。然后从当前盒子转移到下一个盒子进行抽球。规则是:如果当前抽球的盒子是第一个盒子,则以0.5的概率仍然留在第一个盒子继续抽球,以0.2的概率去第二个盒子抽球,以0.3的概率去第三个盒子抽球。如果当前抽球的盒子是第二个盒子,则以0.5的概率仍然留在第二个盒子继续抽球,以0.3的概率去第一个盒子抽球,以0.2的概率去第三个盒子抽球。如果当前抽球的盒子是第三个盒子,则以0.5的概率仍然留在第三个盒子继续抽球,以0.2的概率去第一个盒子抽球,以0.3的概率去第二个盒子抽球。如此下去,直到重复三次,得到一个球的颜色的观测序列: 

                                                        O={红,白,红}.

注意在这个过程中,观察者只能看到球的颜色序列,却不能看到球是从哪个盒子里取出的。

那么按照我们上一节HMM模型的定义,我们的观察集合是: 

                                                       V={红,白},M=2

我们的状态集合是:

                                                      Q={盒子1,盒子2,盒子3},N=3

而观察序列和状态序列的长度为3.

初始状态分布为:

                                                     \Pi=(0.2,0.4,0.4)^T

状态转移概率分布矩阵为:

                                                  A=\begin{pmatrix} 0.5&0.2 &0.3 \\ 0.3& 0.5 &0.2 \\ 0.2&0.3 &0.5 \end{pmatrix}

观测状态概率矩阵为:

                                                B=\begin{pmatrix} 0.5 &0.5 \\ 0.4&0.6 \\ 0.7&0.3 \end{pmatrix}

从上一节的例子,可以抽象出HMM观测序列生成的过程。

输入的是HMM的模型\lambda =(A,B,\Pi ),观测序列的长度T

输出是观测序列O={o_1,o_2,...o_T}

生成的过程如下:

 1)根据初始状态概率分布Π生成隐藏状态i_1

 2) for t from 1 to T

   a. 按照隐藏状态it的观测状态分布b_i___t(k)生成观察状态o_t.   
           b. 按照隐藏状态it的状态转移概率分布a_i___t _i___t___+___1产生隐藏状态i_t_+_1.

所有的o_t一起形成观测序列O={o_1,o_2,...o_T}

HMM模型一共有三个经典的问题需要解决:

 1) 评估观察序列概率。即给定模型λ=(A,B,Π)和观测序列O={}{o_1,o_2,...o_T},计算在模型λ下观测序列O出现的概率P(O|λ)。这个问题的求解需要用到前向后向算法。

 2)模型参数学习问题。即给定观测序列O={o_1,o_2,...o_T},估计模型λ=(A,B,Π)的参数,使该模型下观测序列的条件概率P(O|λ)最大。这个问题的求解需要用到基于EM算法的Baun-Welch算法。这个问题是HMM模型三个问题中最复杂的。

 3)预测问题,也称为解码问题。即给定模型λ=(A,B,Π)和观测序列O={o_1,o_2,...o_T},求给定观测序列条件下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的维特比(Viterbi)算法。这个问题是HMM模型三个问题中复杂度居中的算法。

Baun-Welch算法,Viterbi解码算法将在下一篇学习日志中介绍。

 

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

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

相关文章

语音识别学习日志 2019-7-15 语音识别基础知识准备4 {Baun-Welch算法}

HMM 前向算法(Forward Algorithm)详细解释参考: http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-1 http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-2 http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-3…

【转载保存】B+树索引原理以及应用案例

地址&#xff1a;https://www.jianshu.com/p/486a514b0ded 利用c/c实现基于b树小型关系型数据库&#xff1a;https://github.com/enpeizhao/duck_db 利用java实现的基于b树的数据库案例&#xff1a;https://github.com/liumengjun/BPlusTreeIndex 1.什么是索引&#xff1f; …

语音识别学习日志 2019-7-16 语音识别基础知识准备5 {决策树算法(ID3、 C4.5、 CART)}

决策树算法(ID3、 C4.5、 CART) 决策树的定义 决策树学习采用的是自顶向下的递归方法&#xff0c;其基本思想是以信息熵为度量构造一颗熵值下降最快的树&#xff0c;到叶子节点处&#xff0c;熵值为0。其具有可读性、分类速度快的优点&#xff0c;是一种有监督学习。 决策树呈…

语音识别学习日志 2019-7-17 语音识别基础知识准备6 {维特比算法(Viterbi Algorithm)}

HMM 维特比算法(Viterbi Algorithm)详细解释参考:http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-1 http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-2 http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-3 …

基于包围盒算法的三维点云数据压缩和曲面重建matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 包围盒构建 4.2 点云压缩 4.3 曲面重建 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...........................................…

【转载保存】修改IK分词器源码实现动态加载词典

链接&#xff1a;http://www.gongstring.com/portal/article/index/id/59.html 当前IKAnalyzer从发布最后一个版本后就一直没有再更新&#xff0c;使用过程中&#xff0c;经常遇到需要扩展词库以及动态更新字典表的问题&#xff0c;此处给出一种解决办法&#xff08;注意&…

【转载保存】索引文件锁LockFactory

索引文件锁LockFactory LockFactory在Lucene中用来对索引文件所在的目录进行加锁&#xff0c;使得同一时间总是只有一个IndexWriter对象可以更改索引文件&#xff0c;即保证单进程内(single in-process)多个不同IndexWriter对象互斥更改&#xff08;多线程持有相同引用的IndexW…

IndexOptions类说明

IndexOptions是在lucene-core-x.jar包下面&#xff0c;其作用是在新建索引时候选择索引属性。 IndexOptions是一个枚举类&#xff1a; 枚举变量说明&#xff1a; NONE不被索引DOCS_AND_FREQS文档和词频建立索引DOCS_AND_FREQS仅对文档和词频建立索引DOCS_AND_FREQS_AND_POSIT…

【转载保存】lucene正则查询使用注意

今天要分享的是关于lucene中另外一种丰富的查询方式----正则查询&#xff0c;lucene内置了许多的查询API&#xff0c;以及更强大的自定义查询方式的QueryParse&#xff0c;大部分情况下我们使用内置的查询API&#xff0c;基本上就可以满足我们的需求了&#xff0c;但是如果你想…

【转载保存】搜索引擎调研文档

搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。 它可以用于全文搜索&#xff0c;结构化搜索以及分析&#xff0c;当然你也可以将这三者进行组合。 Elasticsearch是一个建立在全…

lucene详细说明文档

以下部门功能在lucene5以上版本可能有的API所有改变 目录1.简介 2.了解索引操作 2.1倒排索引 2.2字段类型 2.3细分 2.4文件编号 2.5搜索索引 3.创建索引 4.基本索引操作 4.1核心索引类 4.2将数据添加到索引 5.文件和领域 5.1文件 5.2领域 5.3在Lucene中增强文档 1.简介 该索引是…

分布式集群架构场景解决方案学习笔记

课程学习 一致性哈希算法集群时钟同步问题分布式ID解决方案分布式任务调度问题session共享(一致性)问题 一致性哈希算法 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的&#xff0c;设计目标是为了解决因特网中的热点(Hot spot)问题&#xff0c…

分布式学习-总结

文章目录分布式理论分布式系统定义以及面临的问题分布式系统定义分布式面临的问题通信异常网络分区三态节点故障分布式理论&#xff1a;一致性概念分布式一致性的提出强一致性弱一致性最终一致性分布式事务CAP定理什么是CAP理论&#xff1f;为什么只能3选2能不能解决3选2的问题…

什么叫死锁?死锁案例?死锁必须满足哪些条件?如何定位死锁问题?有哪些解决死锁策略?哲学家问题?

1.死锁是什么&#xff1f; 死锁一定发生在并发环境中&#xff0c;死锁是一种状态&#xff0c;当两个(或者多个线程)相互持有对方所需要的资源&#xff0c;却又都不主动释放手中持有的资源&#xff0c;导致大家都获取不到自己想要的资源&#xff0c;所有相关的线程无法继续执行…

dubbo启动服务启动报错.UnsatisfiedDependencyException: Error creating bean with name '***': Un

报错信息&#xff1a; 今天部署开发环境的时候这个问题弄了一下午&#xff0c;由于我本地启动是好的&#xff0c;然后部署到服务器老是启动不了&#xff0c;报如上错&#xff0c;后来经过排查发现是provider.xml和consumer.xml中的如下代码version属性版本信息不一致。 <du…

【转载保存】dubbo学习笔记

Dubbo Dubbo简介 首先&#xff0c;我理解的Dubbo&#xff0c;从大的方向来看是单体应用到分布式应用过度期的一个产物&#xff0c;具体来说应该是分布式应用从早期的SOA到微服务过度的一个产物。 在编写分布式场景下高并发、高扩展的系统对技能的要求很高&#xff0c;因为这…

mysql搭建手册

mysql搭建手册 主从搭建 搭建mysql 关闭防火墙&#xff1a;systemctl stop firewalld 如果失败先安装 yum install iptables-services 配置数据库 /etc/my.cnf&#xff0c;配置同步数据库等 主库配置信息 [mysqld] datadir/usr/local/mysql/data log-error/usr/local/mysql/…

MongoDb安装配置

Mongodb学习 Mongodb安装 1.下载社区版 MongoDB 4.1.3 去官网下载对应的MongoDB 然后上传到Linux虚拟机 2.将压缩包解压即可 tar -zxvf MongoDB-linux-x86_64-4.1.3.tgz3.启动 mkdir -p /data/db./bin/mongod4.指定配置文件方式的启动 配置文件样例: dbpath/data/mongo…

FastDFS学习笔记

FastDFS课程内容 第一部分&#xff1a;FastDFS基础回顾 为什么要有分布式文件系统、分布式文件系统对比、FastDFS特性、linux安装、java访问FastDFS 第二部分&#xff1a;FastDFS系统架构和功能原理 架构详解、架构设计的概念、设计理念、功能原理(上传、下载、文件同步、删…

redis主从搭建和分片集群搭建

文章目录redis主从搭建搭建一主一从&#xff1a;下载安装redis&#xff1a;两台机器都需要操作权限认证理解主从复制原理、同步数据集全量同步三个阶段&#xff1a;增量同步&#xff1a;心跳检测redis哨兵模式部署方案搭建配置哨兵模式原理建立连接获取主服务器信息获取从服务器…