语音识别学习日志 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,一经查实,立即删除!

相关文章

【使用注意】Boolean是final类型,值初始化后不能被更改

由于服务代码逻辑需要在map中的value存储Boolean&#xff0c;后面的代码逻辑 中我想更改Boolean的值发现更改不了&#xff0c;后来查找资料才发现原来Boolean实现类是定义为final&#xff0c;还是对原理不了解呀&#xff0c;以后多注重原理。 测试代码&#xff08;final类&…

语音识别学习日志 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;是一种有监督学习。 决策树呈…

【使用注意】文件内容突然消失

最近在写一个搜索&#xff0c;然后做单元测试时候发现只要启动搜索模块&#xff0c;文件内容就会全部消失了。 然后检查是不是文件流的问题&#xff0c;最后定位到是因为利用BufferedWriter中的FileWriter默认是文件覆盖操作&#xff0c;因此在初始化FileWriter的时候会先将文…

语音识别学习日志 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 …

【使用注意】文件写入不全

如果是利用缓冲流&#xff0c;切记要刷新&#xff01;&#xff01;&#xff01;

语音基础知识-基本语音知识,声谱图,log梅普图,MFCC,deltas详解

基本语音知识&#xff1a; https://www.cnblogs.com/liaohuiqiang/p/9916352.html 语音特征提取基本知识&#xff1a; https://www.cnblogs.com/liaohuiqiang/p/10159429.html 动态时间规整DTW(Dynamic Time Warping)介绍&#xff1a; 作用&#xff1a;求解两个不同的时间…

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

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

【使用注意】以后定义变量类型利用父类定义

今天在改以前项目出现的bug把HashMap改成ComcurrentHashMap时&#xff0c;很多类的方法参数都需要改动&#xff0c;如果直接定义时候利用父类可以方便下次修改&#xff0c;切记&#xff01;&#xff01;&#xff01;

数据集总结

包含图像语音数据集及项目总结&#xff1a; https://www.jianshu.com/p/d0baf4326ff2 各种免费的数据集&#xff1a; https://www.cnblogs.com/genghenggao/p/9625450.html

【使用注意】多线程导致解码混乱的情况

并发情况下公有变量的文件流操作一定要注意加上synchronized 最近在写搜索引擎发现遇到一个编码问题还有数据乱了等情况&#xff0c;后来查找原因是由于并发情况对文件操作没有考虑用同步方法原因&#xff0c;切记

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

信息熵&#xff0c;条件熵&#xff0c;相对熵&#xff0c;交叉熵的定义与意义&#xff1a; https://blog.csdn.net/u013569304/article/details/82595548 数据压缩与信息熵&#xff1a; http://www.ruanyifeng.com/blog/2014/09/information-entropy.html

【搜索引擎】lucene事务

本文分两部份&#xff0c;第一部份为译&#xff1a;是对是对于lucene事务的一篇佳作《Transactional Lucene》的翻译。第二部份为解&#xff1a;是本人对一文中提到一些概念在源码层次的一些理解分析&#xff0c;参考lucene源码版本为4.10.4。《Transactional Lucene》中还提到…

语音之特征参数提取

https://blog.csdn.net/w_manhong/article/details/78977833 线性预测分析&#xff08;LinearPredictionCoefficients&#xff0c;LPC&#xff09; 感知线性预测系数&#xff08;PerceptualLinearPredictive&#xff0c;PLP&#xff09; Tandem特征和Bottleneck特征 基于滤…

【转载保存】基于Lucene的近实时搜索引擎优化总结

一、搜索优化&#xff1a; 在工程领域&#xff0c;越是看起来“简单、确定”的问题&#xff0c;越是难以解决。近实时搜索引擎需要解决的问题只有一个&#xff1a;性能&#xff01;它包含快速索引&#xff0c;快速搜索&#xff0c;以及索引到搜索的快速生效。 以下为百万条数据…

经典语音论文

经典语音论文&#xff1a; 语音合成&#xff0c;语音识别 为主 https://github.com/zzw922cn/awesome-speech-recognition-speech-synthesis-papers

【转载保存】linux shell字符串切割成数组

原地址&#xff1a;https://www.cnblogs.com/FlyFive/p/3640243.html a"one,two,three,four" 要将$a分割开&#xff0c;可以这样&#xff1a; 按 CtrlC 复制代码 按 CtrlC 复制代码 上述代码会输出 one two three four arr($a)用于将字符串$a分割到数组$arr …

CTC 语音基础 GMM EM

Connectionist Temporal Classification &#xff08;CTC&#xff09;算法解释 https://www.jianshu.com/p/0cca89f64987 语音中响度&#xff0c;音调与音色的影响因素 https://blog.csdn.net/qq_37385726/article/details/89176142 GMM模型与EM算法 https://blog.csdn.ne…

shell 字符串切割

a"one,two,three,four" 要将$a分割开&#xff0c;可以这样&#xff1a; 按 CtrlC 复制代码 按 CtrlC 复制代码 上述代码会输出 one two three four arr($a)用于将字符串$a分割到数组$arr ${arr[0]} ${arr[1]} ... 分别存储分割后的数组第1 2 ... 项 &#xf…