精华内容
下载资源
问答
  • 在Sturealize.h中字符串数组a不属于Student类变量 应该如何修改? 不要把类改成数组进行运行。 <code class="language-cpp">#include"stdafx.h" #include"Student.h" #include<...
  • 统计学原理小测试

    千次阅读 2020-03-26 21:56:44
    1下列不属于描述统计问题的是() A、根据样本信息对总体进行推断 B、了解数据分布的特征 C、分析感兴趣的总体特征 D、利用图、表或其他数据汇总工具分析数据 2指出下面的变量哪一个属于顺序变量 A、年龄 B、工资 C、...

    1下列不属于描述统计问题的是()
    A、根据样本信息对总体进行推断
    B、了解数据分布的特征
    C、分析感兴趣的总体特征
    D、利用图、表或其他数据汇总工具分析数据

    2指出下面的变量哪一个属于顺序变量
    A、年龄
    B、工资
    C、汽车产量
    D、员工对企业某项改革措施的态度(赞成、中立、反对)

    3
    指出下面的变量哪一个属于数值型变量
    A、年龄
    B、性别
    C、企业类型
    D、员工对企业某项改革措施的态度(赞成、中立、反对)

    4某手机厂商认为,如果流水线上组装的手机出现故障的比例每天不超过3%,则组装过程是令人满意的。为了检验某天生产的手机质量,厂商从当天生产的手机中随机抽取了30部进行检验。手机厂商感兴趣的总体是()
    A、当天生产的全部手机
    B、抽取的30部手机
    C、3%有故障的手机
    D、30部手机的检测结果

    5到商场购物停车便得越来越困难,管理人员希望掌握顾客找到停车位的平均时间。为此,某个管理人员跟踪了50名顾客并且记录下他们找到车位的时间。这里管理人员感兴趣的总体是()
    A、管理人员跟踪过的50名顾客
    B、上午在商场停车的顾客
    C、在商场停车的所有顾客
    D、到商场购物的所有顾客

    6为了估计某城市中拥有汽车的家庭比例,抽取500个家庭的一个样本,得到拥有汽车的家庭比例为35%,这里的35%是()
    A、参数值
    B、统计量的值
    C、样本值
    D、变量

    7一家研究机构从IT从业者中随机抽取500人作为样本进行调查,其中60%回答他们的月收入在5000元以上,50%回答他们的消费支付方式是用信用卡。这里的总体是()
    A、IT业的全部从业者
    B、500个IT从业者
    C、IT从业者的总收入
    D、IT从业者的消费支付方式

    8指出下面的变量哪一个属于分类变量()
    A、年龄
    B、工资
    C、汽车产量
    D、员工对企业某项改革措施的态度(赞成、中立、反对)

    9在抽样之前先将总体的元素划分为若干类,然后从各个类中抽取一定数量的元素组成一个样本,这样的抽样方式称为()
    A、简单随机抽样
    B、分层抽样
    C、系统抽样
    D、整群抽样

    10为了解居民对小区物业服务的意见和看法,管理人员随机抽取了50户居民,上门通过问卷进行调查。这种数据的收集方法称为()
    A、面访式问卷调查
    B、实验调查
    C、观察式调查
    D、自填式调查

    11如果要搜集某一特定群体的有关资料,适宜采用的调查方式是()
    A、系统抽样
    B、整群抽样
    C、滚雪球抽样
    D、判断抽样

    12下面的哪种抽样调查的结果不能用于对总体有关参数进行估计()
    A、分层抽样
    B、系统抽样
    C、整群抽样
    D、判断抽样

    13某居民小区为了了解住户对物业服务的看法,准备采取抽样调查方式搜集数据。无语管理部门利用最初的居民户登记名单进行抽样。但现在的小区中,原有的一些居民户已经搬走而没有回答问题。这种调查产生的误差属于()
    A、随机误差
    B、抽样框误差
    C、回答误差
    D、无回答误差

    14为了调查某校学生的购书费用支出,从男生中抽取60名学生调查,从女生中抽取49名学生调查,这种调查方法是()
    A、简单随机抽样
    B、整群抽样
    C、系统抽样
    D、分层抽样

    15某居民小区为了了解住户对物业服务的看法,准备采取抽样调查方式搜集数据。无语管理部门利用最初的居民户登记名单进行抽样。但现在的小区中,原有的一些居民户已经搬走,同时有些是新入住的居民户。这种调查产生的误差属于()
    A、随机误差
    B、抽样框误差
    C、回答误差
    D、无回答误差

    16为了调查某校学生的购书费用支出,从全校学生的名单按拼音顺序排列后,每隔50名学生抽取一名学生进行调查,这种调查方法是()
    A、简单随机抽样
    B、整群抽样
    C、系统抽样
    D、分层抽样

    17将比例乘以100得到的数值称为()
    A、频率
    B、百分数
    C、比例
    D、比率

    18下面的哪一个图形适合于比较研究两个或多样本或总体的结构性题()
    A、环形图
    B、饼图
    C、直方图
    D、茎叶图

    19下面是描述一组数据的一个图形,这个图是()
    A、饼图
    B、直方图
    C、散点图
    D、茎叶图

    20气泡图主要用于描述()
    A、两个变量之间的相关关系
    B、三个变量之间的相关关系
    C、两个变量的对比关系
    D、三个变量的对比关系

    21组中值是()
    A、一个组的上限与下限之差
    B、一个组的上限与下限之间的中点值
    C、一个组的最小值
    D、一个组的最大值

    22将某企业职工的月收入依次分为2000元以下、2000元3000元、3000元4000元、4000元~5000元、5000元以上几个组。第一组的组中值近似为()
    A、2000
    B、1000
    C、1500
    D、2500

    23在离散程度测量中,最容易受极端值影响的是()
    A、极差
    B、平均差
    C、标准差
    D、离散系数

    24经验法则表明,当一组数据对称分布时,在平均数加减1个标准差的范围内大约有()
    A、68%数据
    B、95%数据
    C、99%数据
    D、100%数据

    25如果一组数据不是对称的,根据切比雪夫不等式,对于k=4,其意义是()
    A、至少有75%的数据落在平均数加减4个标准差范围之内
    B、至少有89%的数据落在平均数加减4个标准差范围之内
    C、至少有94%的数据落在平均数加减4个标准差范围之内
    D、至少有99%的数据落在平均数加减4个标准差范围之内

    26一组数据离散系数为0.4,平均数20,则标准差为()
    A、80
    B、0.02
    C、4
    D、8

    27在某行业中随机抽取10家企业,每一季度的利润额分别是:72,63.1,54.7,54.3,29,26.9,25,23.9,23,20。该组数据的标准差为()
    A、28.46
    B、19.54
    C、27.95
    D、381.94

    28假定一个样本由5个数据组成:3,7,8,9,13。该样本的方差为()
    A、8
    B、13
    C、9.7
    D、10.4

    29测度数据离散系数的统计量()
    A、极差
    B、平均差
    C、标准差
    D、离散系数

    30经验法则表明,当一组数据对称分布时,在平均数加减2个标准差的范围内大约有()
    A、68%数据
    B、95%数据
    C、99%数据
    D、100%数据

    31下列叙述中正确的是()
    A、如果计算每个数据与平均值的离差,则这些离差的和总是等于0的
    B、如果考试成绩的分布是对称的,平均数为75,标准差为12,则考试成绩在63~75之间的比例大约为95%
    C、平均数和中位数相等
    D、中位数大于平均数

    32对于右偏分布,平均数.众数.中位数之间的关系()
    A、平均数>中位数>众数
    B、中位数>平均数>众数
    C、众数>中位数>平均数
    D、众数>平均数>中位数

    33某班学生平均成绩80分,标准差10分,如果已知该班分数是对称分布,可以判断成绩在60~100分之间的学生占()
    A、95%
    B、89%
    C、68%
    D、99%

    34一组数据中出现频数最多的变量值称为()
    A、众数
    B、中位数
    C、四分位数
    D、平均数

    35如果一组数据不是对称的,根据切比雪夫不等式,对于k=2,其意义是()
    A、至少有75%的数据落在平均数加减2个标准差范围之内
    B、至少有89%的数据落在平均数加减2个标准差范围之内
    C、至少有94%的数据落在平均数加减2个标准差范围之内
    D、至少有99%的数据落在平均数加减2个标准差范围之内

    36如果一组数据不是对称的,根据切比雪夫不等式,对于k=3,其意义是()
    A、至少有75%的数据落在平均数加减3个标准差范围之内
    B、至少有89%的数据落在平均数加减3个标准差范围之内
    C、至少有94%的数据落在平均数加减3个标准差范围之内
    D、至少有99%的数据落在平均数加减3个标准差范围之内

    37如果一组数据分布的偏态系数在0.51或-1-0.5之间,则表明该数据属于()
    A、对称分布
    B、中等偏态分布
    C、高度偏态分布
    D、轻微偏态分布

    38在某行业中随机抽取10家企业,每一季度的利润额分别是:72,63.1,54.7,54.3,29,26.9,25,23.9,23,20。该组数据的中位数为()
    A、28.46
    B、30.20
    C、27.95
    D、28.12

    39在某公司进行计算机水平测试,新员工的平均得分是80分,标准差是5,假设新员工的分布是未知的,测的分在65~95分的新员工至少占()
    A、75%
    B、89%
    C、94%
    D、95%

    40一组数据排序后处于中间位置上的值称为()
    A、众数
    B、中位数
    C、四分位数
    D、平均数

    展开全文
  • 6、 下面不属于软件设计原则的是()。 A、 抽象 B、模块化 C、自底向上 D、信息隐蔽 我的答案:C 7、 对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为()。 A、 N+1 B、N C、(N+1)/2 D、N...
  • 隐马尔可夫模型(Hidden Markov Model, HMM)是可用于标注问题的模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型。马尔可夫链懂的可以把本科的《概率论与数理统计》找回来看一下,很简单的,就是...

      隐马尔可夫模型(Hidden Markov Model, HMM)是可用于标注问题的模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型。马尔可夫链不懂的可以把本科的《概率论与数理统计》找回来看一下,很简单的,就是离散状态之间的转换。下面直接定义基本概念,为后面的算法做准备。 

    基本概念

    变量定义

      HMM各个时期会处于各种状态,设$Q$是所有可能状态的集合;每个状态可以产生各种观测,设$V$是所有可能观测的集合。$Q,V$的定义如下:

    $Q=\{q_1,q_2,\dots, q_N\},\;\;V=\{v_1,v_2,\dots,v_M\}$

      其中$N$是可能的状态数,$M$是可能的观测数。注意,这里的状态和观测不一定是数字,也可以是各种具体的对象。

      然后定义$S$为长度为$T$的模型状态序列,定义$O$为对应的观测序列。

    $S=(s_1,s_2,\dots,s_T),\;\;O=(o_1,o_2,\dots,o_T)$

      这两个序列都是整数列表,其中每个整数索引对应的状态和观测。比如:$q_{s_2}$表示模型在时刻2时的状态,$v_{o_5}$表示模型在时刻5时的观测,而$s_2,o_5$并不代表那时模型的状态和观测本身(这里先说清楚,不然后面容易混淆)。

      那么这些状态是如何初始化并相互转换,观测又是如何进行的呢?下面定义三个分布:

      1、初始概率分布。时间开始时,各个状态出现的概率。定义为向量$\pi$:

    $\begin{aligned}&\pi = [\pi_1,\pi_2,\dots,\pi_N]^T\\ &\pi_i=P(s_1=i),\;\;i = 1,2,\dots,N \end{aligned}$ 

      2、状态转移分布。上一时刻到下一时刻不同状态之间转换的概率。定义为矩阵$A$:

    $\begin{aligned} &A = [a_{ij}]_{N\times N}\\& a_{ij} = P(s_{t+1}=j|s_t=i)\end{aligned}$ 

      3、观测概率分布。定义某个状态下各种观测出现的概率。定义为矩阵$B$:

    $\begin{aligned} &B = [b_{ij}]_{N\times M}\\& b_{ij} = P(o_t=j|s_t=i) \end{aligned}$ 

      隐马尔可夫模型由以上三个分布决定,因此可以用一个三元符号表示:

    $\lambda = (A,B,\pi)$

    HMM基本假设

      从定义可知,HMM做了两个基本假设:

      1、齐次马尔可夫性假设。任意时刻的状态只依赖于前一时刻的状态,与其它时刻的状态及观测无关:

    $P(s_t|s_{t-1},o_{t-1},\dots,s_1,o_1) = P(s_t|s_{t-1})$

      注意,以上条件概率中将除$s_{t-1}$以外的条件去掉,是因为$s_{t-1}$已知,并且没有之后时刻的状态或观测作为条件。如果$s_{t-1}$未知,则可以去掉$t$时刻之前的条件中,离$t$最近的$t^-$之前的状态和观测(包含$t^-$时刻的观测)。如:

    $P(s_t|s_{t-2},o_{t-2},s_{t-3},s_{t-4}) = P(s_t|s_{t-2})$

      另外,假如有之后时刻的状态,计算的概率就是后验概率了,那么之后时刻的状态作为条件来说也不能去掉。但是可以去掉$t$时刻之后的条件中,离$t$最近的$t^+$之后的状态和观测(包含$t^+$时刻的观测)如:

    $\begin{gather}P(s_t|s_{t-2},s_{t-1},o_{t-1},o_{t+1},s_{t+2},o_{t+2},o_{t+3}) = P(s_t|s_{t-1},o_{t+1},s_{t+2})\label{}\end{gather}$

      总之,就是近的状态已知,远的状态对于计算条件概率来说就没有意义了。

      2、观测独立性假设。任意时刻的观测只依赖于此刻的状态,与其它无关:

    $P(o_t|s_t,o_{t-1},\dots,s_1,o_1) = P(o_t|s_t)$ 

      这个条件概率和上面也一样,也是近的状态已知,远处的状态作为条件就无意义。

      以上两个假设和马尔可夫链的“链”相符,状态条件的已知就好像把链条对应结点的外侧链条砍断(靠近$s_t$的是内侧),我觉得把这种性质称作“就近原则”也不错(留意后面很多计算都用到)。下面是$(1)$式的示意图:

       其中黄色结点表示已知条件,圈在虚线中的表示会影响$(1)$式概率值的状态与观测。

    三个基本问题

      弄懂HMM状态之间的转换规则后,现在提出HMM的三个基本问题:

      1、概率计算。给定模型$\lambda$和观测序列$O$,计算在该模型下观测序列$O$出现的概率$P(O|\lambda)$ 。

      2、学习。已知观测序列$O$,估计模型$\lambda$的参数,使得在该模型下观测到这个序列的概率$P(O|\lambda)$最大。

      3、预测,或是解码。已知模型$\lambda$,给定观测序列$O$,求与之对应的状态序列$S$,使得概率$P(S|O,\lambda)$最大。 

      这三个基本问题分别阐述了HMM的基本推算方式和主要用途。下面依次介绍这三个基本问题的解法。

    概率计算

      对于给定的模型参数$\lambda =(A,B,\pi)$,计算观测序列$O= (o_1,o_2,\dots,o_T)$出现的概率,最简单的就是把所有可能的状态序列的概率都计算出来,然后选择最大的那个。但是这个方法计算复杂度是极大的,高达$O(TN^T)$阶,所以不可行。下面介绍两种计算可行的算法:前向和后向算法。

    前向算法

      定义到达时刻$t$,观测序列为$(o_1,o_2,\dots,o_t)$,且此时状态为$q_i$的概率

    $\alpha_t(i) = P(o_1,o_2,\dots,o_t,s_t=i|\lambda)$

      为前向概率。前向算法就是用$\alpha_t(i)$前向递推计算观测序列的概率。下面是算法的推算流程:

      1、计算初值。即当$t=1$时所有状态的$\alpha$,一共$N$个:

    $\begin{aligned}\alpha_1(i)=P(o_1,s_1=i|\lambda)=\pi_ib_{io_1},\;\;i=1,2,\dots,N\end{aligned}$

      2、递推。对$t=2,3,\dots,T$,计算所有状态的$\alpha$,每个$t$同样都要计算$N$个:

    $ \begin{aligned} &\alpha_t(i) \\ =& P(o_1,o_2,...,o_t,s_t=i|\lambda)\\ =& \sum\limits_{j=1}^NP(o_1,o_2,...,o_{t},s_{t-1}=j,s_t=i|\lambda) \\ =& \sum\limits_{j=1}^N P(o_t|o_1,o_2,...,o_{t-1},s_{t-1}=j,s_t=i,\lambda)P(o_1,o_2,...,o_{t-1},s_{t-1}=j,s_t=i|\lambda) \\ =& \sum\limits_{j=1}^N P(o_t|s_t=i,\lambda)P(o_1,o_2,...,o_{t-1},s_{t-1}=j|\lambda)P(s_t=i|o_1,o_2,...,o_{t-1},s_{t-1}=j,\lambda) \\ =& P(o_t|s_t=i,\lambda)\sum\limits_{j=1}^N P(o_1,o_2,...,o_{t-1},s_{t-1}=j|\lambda)P(s_t=i|s_{t-1}=j,\lambda) \\ =& b_{io_i}\sum\limits_{j=1}^N\alpha_{t-1}(j)a_{ji},\;\;i=1,2,...,N \end{aligned} $

      3、计算最后的概率:

    $ \begin{aligned} P(O|\lambda) =\sum\limits_{i=1}^NP(o_1,o_2,...,o_T,s_T=i|\lambda) =\sum\limits_{i=1}^N\alpha_T(i) \end{aligned} $

      下面是书上的计算图,便于理解:

    后向算法

      定义在$t$时刻的状态为$q_i$的条件下,之后观测序列为$(o_{t+1},o_{t+2},\dots,o_T)$的条件概率

    $\beta_t(i) = P(o_{t+1},o_{t+2},\dots,o_T|s_t=i,\lambda)$

      为后向概率。与前向算法类似,后向算法是用$\beta_t(i)$后向推算概率。下面是递推流程:

      1、定义初值:

     $\begin{aligned}&\beta_T(i)=1,\;\;i=1,2,...,N\\\end{aligned}$

      2、对$t=T-1,T-2,...,1$,计算:

    $ \begin{aligned} &P(o_{t+1},...,o_T|s_t=i,\lambda)\\ =&\sum\limits_{j=1}^NP(o_{t+1},...,o_T,s_{t+1}=j|s_t=i,\lambda)\\ =&\sum\limits_{j=1}^NP(o_{t+1}|o_{t+2},...,o_T,s_{t+1}=j,s_t=i,\lambda)P(o_{t+2},...,o_T,s_{t+1}=j|s_t=i,\lambda)\\ =&\sum\limits_{j=1}^NP(o_{t+1}|s_{t+1}=j,\lambda)P(o_{t+2},...,o_T|,s_{t+1}=j,s_t=i,\lambda)P(s_{t+1}=j|s_t=i,\lambda)\\ =&\sum\limits_{j=1}^NP(o_{t+1}|s_{t+1}=j,\lambda)P(o_{t+2},...,o_T|,s_{t+1}=j,\lambda)P(s_{t+1}=j|s_t=i,\lambda)\\ =&\sum\limits_{j=1}^N a_{ij}b_{jo_{t+1}}\beta_{t+1}(j),\;\;i=1,2,...,N\\ \end{aligned} $

      3、计算结果:

    $ \begin{aligned} P(O|\lambda) = \sum\limits_{i=1}^N\pi_ib_{io_1}\beta_1(i) \end{aligned} $

    利用前后向算法计算某些概率

      我们可以用$\alpha$和$\beta$计算某些概率。

      1、给定$\lambda$,计算以观测$O$为条件,$t$时刻状态为$q_i$的条件概率:

     $ \begin{aligned} &P(s_t=i|O,\lambda)\\ =&\frac{ P(o_1,...,o_T,s_t=i|\lambda) }{P(O|\lambda)}\\ =&\frac{ P(o_1,...,o_t,s_t=i|\lambda)P(o_{t+1},...,o_T|o_1,...,o_t,s_t=i,\lambda) }{P(O|\lambda)}\\ =&\frac{ P(o_1,...,o_t,s_t=i|\lambda)P(o_{t+1},...,o_T| s_t=i,\lambda) }{\sum\limits_{j=1}^NP(o_1,...,o_T,s_t=j|\lambda)}\\ =&\frac{ \alpha_t(i)\beta_t(i) }{\sum\limits_{j=1}^N\alpha_t(j)\beta_t(j)}\\ \end{aligned} $

      2、给定$\lambda$,计算以观测$O$为条件,$t$时刻状态为$q_i$,且$t+1$时刻状态为$q_j$的条件概率:

    $\begin{aligned}&P(s_t=i,s_{t+1}=j|O,\lambda)\\=&\frac{\alpha_t(i)a_{ij}b_{jo_{t+1}}\beta_{t+1}(j)}{P(O|\lambda)}\\=&\frac{\alpha_t(i)a_{ij}b_{jo_{t+1}}\beta_{t+1}(j)}{\sum\limits_{k=1}^N\sum\limits_{l=1}^NP(s_t=k,s_{t+1}=l,O|\lambda)}\\=&\frac{\alpha_t(i)a_{ij}b_{jo_{t+1}}\beta_{t+1}(j)}{\sum\limits_{k=1}^N\sum\limits_{l=1}^N\alpha_t(k)a_{kl}b_{lo_{t+1}}\beta_{t+1}(l)}\\\end{aligned}$

      具体推算过程和1类似,也用到了“链”的性质把多余的条件去掉。 

      3、给定$\lambda$,以观测$O$为条件,求某个状态或某两个连续状态出现的期望(就是出现次数的期望)。直接对所有时刻的以上条件概率进行求和即可,不再详写。

    学习

      如果给你观测序列和对应的状态序列,那么直接用各种转移出现的频率来估计$\lambda=(A,B,\pi)$即可,这很简单,就不讲了。而如果只给你观测序列,正如上面基本问题中定义的那样,就不能直接计算了,需要使用EM算法(点击链接)来迭代计算,就是所谓的Baum-Welch算法(实际上就是EM算法的应用)。

    Q函数

      因为只有观测序列,其未知的状态序列就可以看做隐变量。假设用于训练的观测序列集合为:

    $\mathbb{O} = \{O_1,O_2,\dots,O_{|\mathbb{O}|}\}$

      其中任意观测序列$O_i$的长度都为$T$。

      然后假定隐变量状态序列的所有可能性集合为:

    $\mathbb{S} = \{\left.S=(s_1,s_2,\dots,s_T)\right|s_t = 1,2,\dots,N,\;\;t = 1,2,\dots,T\}$

      于是可以定义第k次迭代的$Q$函数:

     $\displaystyle Q(\lambda,\lambda^k) = \sum\limits_{\mathbb{O}}\sum\limits_{\mathbb{S}}P(S|O,\lambda^k)\log P(S,O|\lambda)$

      这里$Q$函数的定义与《统计学习方法》上定义的不同,为了更严谨,我把所有观测数据都算上了。

      代入待优化参数,然后进行分解:

    $ \begin{aligned} Q\left(\lambda,\lambda^k\right) &= \sum\limits_{\mathbb{O}}\sum\limits_{\mathbb{S}}P\left(S|O,\lambda^k\right) \log \left(\pi_{s_1}b_{s_1o_1}a_{s_1s_2}b_{s_2o_2}\dots a_{s_{T-1}s_T}b_{s_To_T}\right)\\ &= \sum\limits_{\mathbb{O}}\sum\limits_{\mathbb{S}}P\left(S|O,\lambda^k\right) \left(\log \pi_{s_1}+\sum\limits_{t = 1}^{T-1}\log a_{s_ts_{t+1}}+\sum\limits_{t = 1}^T\log b_{s_to_t}\right) \end{aligned} $

      可以看到待优化式子分解为三个不同待优化变量的求和,因此可以将它们分开分别进行优化。

    优化π

      首先对$\pi$的优化式进行整理,将每个优化变量$\pi_i$的系数合并:

    $ \begin{gather}  \begin{aligned} & \sum\limits_{\mathbb{O}}\sum\limits_{\mathbb{S}}P\left(S|O,\lambda^k\right) \log \pi_{s_1}\\ =& \sum\limits_{\mathbb{O}}\sum\limits_{i=1}^N \sum\limits_{\{S|S\in \mathbb{S},s_1=i\}}P(S|O,\lambda^k) \log \pi_i\\ =& \sum\limits_{\mathbb{O}}\sum\limits_{i=1}^N\sum\limits_{1\le s_2,\dots,s_T \le N}P\left(s_1=i,s_2,s_3,\dots,s_T|O,\lambda^k\right) \log \pi_i\\ =& \sum\limits_{\mathbb{O}}\sum\limits_{i=1}^N P\left(s_1=i|O,\lambda^k\right) \log \pi_i\\ \end{aligned}\label{} \end{gather} $

      上式第一个等号成立是因为$\sum\limits_{\mathbb{S}}$和$\sum\limits_{i=1}^N \sum\limits_{\{S|S\in \mathbb{S},s_1=i\}}$是等价的。

      注意到等式约束$\sum\limits_{i=1}^N\pi_i=1$为仿射函数,并且上式为凸函数,因此这是一个带等式约束的凸优化(满足KKT条件(点击链接)即可)。写出拉格朗日函数:

    $ \begin{aligned} L(\pi,\gamma) = \sum\limits_{\mathbb{O}}\sum\limits_{i=1}^N P\left(s_1=i|O,\lambda^k\right) \log \pi_i + \gamma\left(\sum\limits_{i=1}^N\pi_i-1\right) \end{aligned} $ 

      对每个$\pi_i$求导并等于0、化简,再联立等式约束,得KKT条件:

    $ \left\{ \begin{aligned} & \frac{\partial L}{\partial\pi_i}=\sum\limits_{\mathbb{O}}\frac{1}{\pi_i} P\left(s_1=i|O,\lambda^k\right) +\gamma=0,\;\;i=1,2,\dots,N\\ &\sum\limits_{i=1}^N\pi_i=1 \end{aligned} \right. $

      将分母的$\pi_i$乘过去然后求和计算$\gamma$:

    $\displaystyle\sum\limits_{\mathbb{O}} \sum\limits_{i=1}^N P\left(s_1=i|O,\lambda^k\right) +\sum\limits_{i=1}^N\gamma\pi_i=0$

    $|\mathbb{O}| +\gamma=0$

    $\gamma=-|\mathbb{O}| $

      其中$|\mathbb{O}|$是用于训练的观测序列数。再计算$\pi_i$:

    $ \begin{gather}\begin{aligned} & \pi_i = \frac{1}{|\mathbb{O}|}\sum\limits_{\mathbb{O}} P\left(s_1=i|O,\lambda^k\right) \end{aligned} \label{}\end{gather} $

    优化a

      $a$的优化式:

    $ \begin{aligned} & \sum\limits_{\mathbb{O}}\sum\limits_{\mathbb{S}}P\left(S|O,\lambda^k\right)\sum\limits_{t = 1}^{T-1}\log a_{s_to_{t+1}}\\ \end{aligned} $

      和$\pi_i$一样,也要先将每个$a_{ij}$的系数合并。为了容易理解,先对单个的$a_{s_ts_{t+1}}$进行整理:

    $ \begin{aligned} & \sum\limits_{\mathbb{O}}\sum\limits_{\mathbb{S}}P\left(S|O,\lambda^k\right)\log a_{s_to_{t+1}}\\ =& \sum\limits_{\mathbb{O}}\sum\limits_{i=1}^N\sum\limits_{j=1}^N\sum\limits_{\{S|S\in\mathbb{S},s_t=i,s_{t+1}=j\}}P\left(S|O,\lambda^k\right)\log a_{ij}\\ =& \sum\limits_{\mathbb{O}}\sum\limits_{i=1}^N\sum\limits_{j=1}^NP\left(s_t=i,s_{t+1}=j|O,\lambda^k\right)\log a_{ij}\\ \end{aligned} $

      再加上$t$的求和,得到整理后的$a$的优化式:

    $ \begin{aligned} & \sum\limits_{\mathbb{O}}\sum\limits_{i=1}^N\sum\limits_{j=1}^N\sum\limits_{t=1}^{T-1}P\left(s_t=i,s_{t+1}=j|O,\lambda^k\right)\log a_{ij}\\ \end{aligned} $

      类似于优化$\pi$,列出具有$N$个等式约束$\sum\limits_{j=1}^Na_{ij}=1$的拉格朗日函数:

    $ \begin{aligned} L(a,\gamma) =\sum\limits_{\mathbb{O}}\sum\limits_{i=1}^N\sum\limits_{j=1}^N\sum\limits_{t=1}^{T-1}P\left(s_t=i,s_{t+1}=j|O,\lambda^k\right)\log a_{ij} +\sum\limits_{i=1}^N\gamma_i\left(\sum\limits_{j=1}^Na_{ij}-1\right) \end{aligned} $

      列出KKT条件:

    $ \left\{ \begin{aligned} &\frac{\partial L}{\partial a_{ij}} =\frac{1}{a_{ij}}\sum\limits_{\mathbb{O}}\sum\limits_{t=1}^{T-1}P\left(s_t=i,s_{t+1}=j|O,\lambda^k\right) +\gamma_i =0,\;\;i,j=1,2,\dots,N\\ &\sum\limits_{j=1}^Na_{ij}=1,\;\;i=1,2,\dots,N \end{aligned}\right. $

      求和计算得$\gamma$:

    $\displaystyle \gamma_i = -\sum\limits_{\mathbb{O}}\sum\limits_{t=1}^{T-1}P\left(s_t=i|O,\lambda^k\right) $

      再算$a_{ij}$:

    $ \begin{gather}\begin{aligned} a_{ij}  =\frac{\sum\limits_{\mathbb{O}}\sum\limits_{t=1}^{T-1}P\left(s_t=i,s_{t+1}=j|O,\lambda^k\right)}{\sum\limits_{\mathbb{O}}\sum\limits_{t=1}^{T-1}P\left(s_t=i|O,\lambda^k\right)}\\ \end{aligned}  \label{}\end{gather} $

    优化b

       同样先将每个$b_{ij}$的系数进行合并:

    $ \begin{gather} \begin{aligned} &\sum\limits_{\mathbb{O}}\sum\limits_{\mathbb{S}}P\left(S|O,\lambda^k\right) \sum\limits_{t = 1}^T\log b_{s_to_t}\\ =&\sum\limits_{\mathbb{O}}\sum\limits_{\mathbb{S}}\sum\limits_{t = 1}^TP\left(S|O,\lambda^k\right) \log b_{s_to_t}\\ =&\sum\limits_{j=1}^M\sum\limits_{i=1}^N\sum\limits_{t = 1}^T \sum\limits_{\{O|O\in \mathbb{O},o_t=j\}} \sum\limits_{\{S|S\in \mathbb{S},s_t=i\}} P\left(S|O,\lambda^k\right) \log b_{ij}\\ =&\sum\limits_{j=1}^M\sum\limits_{i=1}^N\sum\limits_{t = 1}^T \sum\limits_{\{O|O\in \mathbb{O},o_t=j\}} P\left(s_t=i|O,\lambda^k\right) \log b_{ij}\\ \end{aligned} \label{}  \end{gather} $

      列出包含约束的拉格朗日函数:

    $ \begin{gather} \begin{aligned} L(b,\gamma)=&\sum\limits_{j=1}^M\sum\limits_{i=1}^N\sum\limits_{t = 1}^T \sum\limits_{\{O|O\in \mathbb{O},o_t=j\}} P\left(s_t=i|O,\lambda^k\right) \log b_{ij} +\sum\limits_{i=1}^N\gamma_i\left(\sum\limits_{j=1}^Mb_{ij}-1\right) \\ \end{aligned}\label{}  \end{gather} $

      这里说明一下,$b$和$\pi,a$不同,$b_{ij}$是否为0是与训练数据集$\mathbb{O}$直接相关的。比如在$\mathbb{O}$没有出现观测$v_3$,那我们可以直接将所有$b_{i3}$估计为0,这是符合常理的。而在$(6)$式中,因为不存在$o_t=3$的$O$,所以$\log b_{i3}$也不存在,于是对$\log b_{i3}$求导也没法求,就不能参与优化了,直接估计为0即可。另外,$\pi,a$是与隐变量状态序列相关的,而隐变量我们是要考虑所有可能的情况的,所以所有$\pi_i,a_{ij}$都可以参与优化。

      下面对非0的$b_{ij}$进行求导并令其为0,联立约束列出KKT条件:

    $ \left\{ \begin{aligned} &\frac{\partial L}{\partial b_{ij}} =\frac{1}{b_{ij}}\sum\limits_{t = 1}^T \sum\limits_{\{O|O\in \mathbb{O},o_t=j\}} P\left(s_t=i|O,\lambda^k\right) + \gamma_i =0,\;\; i=1,2,\dots,N,\;\;j=1,2,\dots,M \\ &\sum\limits_{j=1}^Mb_{ij}= 1,\;\;i=1,2,\dots,N \end{aligned}\right. $

      计算$\gamma$:

    $ \displaystyle\sum\limits_{j = 1}^M \sum\limits_{t = 1}^T \sum\limits_{\{O|O\in \mathbb{O},o_t=j\}} P\left(s_t=i|O,\lambda^k\right) + \gamma_i = 0  $

    $ \displaystyle \gamma_i = -\sum\limits_{\mathbb{O}} \sum\limits_{t = 1}^T P\left(s_t=i|O,\lambda^k\right) $

      计算优化$b$:

    $ \displaystyle b_{ij}= \frac{\sum\limits_{t = 1}^T \sum\limits_{\{O|O\in \mathbb{O},o_t=j\}} P\left(s_t=i|O,\lambda^k\right)  } {\sum\limits_{\mathbb{O}} \sum\limits_{t = 1}^T P\left(s_t=i|O,\lambda^k\right)} $

      算上训练数据$\mathbb{O}$中不包含某观测$v_j$,使得$b_{ij}=0$的情况(其实上式已经包含了,但是我不确定是看做0还是看做不存在,为了严谨还是显式写出来好了):

    \begin{gather}  b_{ij}=\left\{ \begin{aligned} &\frac{\sum\limits_{t = 1}^T \sum\limits_{\{O|O\in \mathbb{O},o_t=j\}} P\left(s_t=i|O,\lambda^k\right)  } {\sum\limits_{\mathbb{O}} \sum\limits_{t = 1}^T P\left(s_t=i|O,\lambda^k\right)}, &\exists O\in \mathbb{O}, j\in O \\ &0,& \forall O\in \mathbb{O}, j\notin O \end{aligned}\right.  \label{}\end{gather}

    迭代

      综上,使用EM算法迭代计算HMM参数的步骤如下:

      0、初始化$\lambda^0 = (\pi^0,A^0,B^0)$,各取为符合约束的随机值。

      1、第$k$次迭代,在$\lambda^{k-1}$的基础上分别使用$(3),(4),(7)$式对$\pi,a,b$进行优化,得到$\lambda^k$。

      2、判断终止条件,满足即完成迭代,否则回到第一步执行下一次迭代。

    预测

      预测问题最直观的方式,就是直接选择每个时刻最有可能出现的状态$s_t^*$,从而预测整个状态序列,即:

    $ \begin{aligned} &s_t^* = \arg\max\limits_{1\le i \le N} \frac{\alpha_t(i)\beta_t(i)}{\sum\limits_{j=1}^N\alpha_t(j)\beta_t(j)},\;\;t=1,2,...,T\\ &S = (s_1^*,s_2^*,...,s_T^*) \end{aligned} $

      但这并不是整体最优的,而且它并不能剔除因为状态转移概率为0而不可能出现的状态序列。为了整体最优并且符合状态转移概率矩阵,我们通常使用维特比算法来预测状态序列。

    维特比算法

      维特比算法实际上就是动态规划,在递推的过程中保持步步最优,从而最终达到全局最优的目的。

      定义在$t$时刻以内,且$t$时刻状态为$q_i$的所有状态序列的出现概率的最大值为:

    $ \begin{gather}  \begin{aligned} \delta_t(i) = \max_{s_1,...,s_{t-1}}P(s_t=i,s_{t-1},...,s_1,o_t,...,o_1|\lambda),\;\;i=1,2,...,N \end{aligned} \label{}\end{gather} $

      由定义可以获得$\delta$的递推公式:

    $ \begin{aligned} &\delta_{t+1}(i) \\ =& \max_{s_1,...,s_t}P(s_{t+1}=i,s_t,...,s_1,o_{t+1},...,o_1|\lambda)\\ =& \max_{s_t}\max_{s_1,...,s_{t-1}}P(s_{t+1}=i,s_t,...,s_1,o_{t+1},...,o_1|\lambda)\\ =& \max_{1\le j\le N}\max_{s_1,...,s_{t-1}}P(s_{t+1}=i,s_t=j,s_{t-1},...,s_1,o_{t+1},...,o_1|\lambda)\\ =& \max_{1\le j\le N}\max_{s_1,...,s_{t-1}}\left[P(o_{t+1}|s_{t+1}=i,\lambda)P(s_{t+1}=i,s_t=j,s_{t-1},...,s_1,o_t,...,o_1|\lambda)\right]\\ =& P(o_{t+1}|s_{t+1}=i,\lambda)\max_{1\le j\le N}\max_{s_1,...,s_{t-1}}\left[P(s_{t+1}=i|s_t=j,\lambda)P(s_t=j,s_{t-1},...,s_1,o_t,...,o_1|\lambda)\right]\\ =& P(o_{t+1}|s_{t+1}=i,\lambda)\max_{1\le j\le N}\left[P(s_{t+1}=i|s_t=j,\lambda)\max_{s_1,...,s_{t-1}}P(s_t=j,s_{t-1},...,s_1,o_t,...,o_1|\lambda)\right]\\ =& b_{io_{t+1}}\max_{1\le j\le N}a_{ji}\delta_t(j) \end{aligned} $

      以上算的是概率,并没有获取每个时刻下的状态编号。所以再定义:

    $ \begin{gather}  \begin{aligned} \Psi_t(i) = \arg\max_{1\le j\le N} \left[\delta_{t-1}(j)a_{ji}\right],\;\;i=1,2,...,N \end{aligned} \label{}\end{gather} $

      用来回溯获取状态序列。

      维特比算法用已知观测序列预测状态序列过程如下:

      1、初始化。直接计算$\delta_1(i)$。

      2、对$t=2,3,...,T$,使用递推公式计算$\delta_t(i)$,使用$(9)$式计算$\Psi_t(i)$。

      3、使用$\Psi_t(i)$回溯,获取最大概率状态序列。

    参考资料

      李航《统计学习方法》

    展开全文
  • 隐马尔可夫模型详解

    2020-08-10 15:01:00
    隐马尔可夫模型(Hidden Markov Model, HMM)是可用于标注问题的模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型。马尔可夫链懂的可以把本科的《概率论与数理统计》找回来看一下,很简单的,...

      隐马尔可夫模型(Hidden Markov Model, HMM)是可用于标注问题的模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型。马尔可夫链不懂的可以把本科的《概率论与数理统计》找回来看一下,很简单的,就是离散状态之间的转换。下面直接定义基本概念,为后面的算法做准备。 

    基本概念

    变量定义

      HMM各个时期会处于各种状态,设$Q$是所有可能状态的集合;每个状态可以产生各种观测,设$V$是所有可能观测的集合。$Q,V$的定义如下:

    $Q=\{q_1,q_2,\dots, q_N\},\;\;V=\{v_1,v_2,\dots,v_M\}$

      其中$N$是可能的状态数,$M$是可能的观测数。注意,这里的状态和观测不一定是数字,也可以是各种具体的对象。

      然后定义$S$为长度为$T$的模型状态序列,定义$O$为对应的观测序列。

    $S=(s_1,s_2,\dots,s_T),\;\;O=(o_1,o_2,\dots,o_T)$

      这两个序列都是整数列表,其中每个整数索引对应的状态和观测。比如:$q_{s_2}$表示模型在时刻2时的状态,$v_{o_5}$表示模型在时刻5时的观测,而$s_2,o_5$并不代表那时模型的状态和观测本身(这里先说清楚,不然后面容易混淆)。

      那么这些状态是如何初始化并相互转换,观测又是如何进行的呢?下面定义三个分布:

      1、初始概率分布。时间开始时,各个状态出现的概率。定义为向量$\pi$:

    $\begin{aligned}&\pi = [\pi_1,\pi_2,\dots,\pi_N]^T\\ &\pi_i=P(s_1=i),\;\;i = 1,2,\dots,N \end{aligned}$ 

      2、状态转移分布。上一时刻到下一时刻不同状态之间转换的概率。定义为矩阵$A$:

    $\begin{aligned} &A = [a_{ij}]_{N\times N}\\& a_{ij} = P(s_{t+1}=j|s_t=i)\end{aligned}$ 

      3、观测概率分布。定义某个状态下各种观测出现的概率。定义为矩阵$B$:

    $\begin{aligned} &B = [b_{ij}]_{N\times M}\\& b_{ij} = P(o_t=j|s_t=i) \end{aligned}$ 

      隐马尔可夫模型由以上三个分布决定,因此可以用一个三元符号表示:

    $\lambda = (A,B,\pi)$

    HMM基本假设

      从定义可知,HMM做了两个基本假设:

      1、齐次马尔可夫性假设。任意时刻的状态只依赖于前一时刻的状态,与其它时刻的状态及观测无关:

    $P(s_t|s_{t-1},o_{t-1},\dots,s_1,o_1) = P(s_t|s_{t-1})$

      注意,以上条件概率中将除$s_{t-1}$以外的条件去掉,是因为$s_{t-1}$已知,并且没有之后时刻的状态或观测作为条件。如果$s_{t-1}$未知,则可以去掉$t$时刻之前的条件中,离$t$最近的$t^-$之前的状态和观测(包含$t^-$时刻的观测)。如:

    $P(s_t|s_{t-2},o_{t-2},s_{t-3},s_{t-4}) = P(s_t|s_{t-2})$

      另外,假如有之后时刻的状态,计算的概率就是后验概率了,那么之后时刻的状态作为条件来说也不能去掉。但是可以去掉$t$时刻之后的条件中,离$t$最近的$t^+$之后的状态和观测(包含$t^+$时刻的观测)如:

    $\begin{gather}P(s_t|s_{t-2},s_{t-1},o_{t-1},o_{t+1},s_{t+2},o_{t+2},o_{t+3}) = P(s_t|s_{t-1},o_{t+1},s_{t+2})\label{}\end{gather}$

      总之,就是近的状态已知,远的状态对于计算条件概率来说就没有意义了。

      2、观测独立性假设。任意时刻的观测只依赖于此刻的状态,与其它无关:

    $P(o_t|s_t,o_{t-1},\dots,s_1,o_1) = P(o_t|s_t)$ 

      这个条件概率和上面也一样,也是近的状态已知,远处的状态作为条件就无意义。

      以上两个假设和马尔可夫链的“链”相符,状态条件的已知就好像把链条对应结点的外侧链条砍断(靠近$s_t$的是内侧),我觉得把这种性质称作“就近原则”也不错(留意后面很多计算都用到)。下面是$(1)$式的示意图:

       其中黄色结点表示已知条件,圈在虚线中的表示会影响$(1)$式概率值的状态与观测。

    三个基本问题

      弄懂HMM状态之间的转换规则后,现在提出HMM的三个基本问题:

      1、概率计算。给定模型$\lambda$和观测序列$O$,计算在该模型下观测序列$O$出现的概率$P(O|\lambda)$ 。

      2、学习。已知观测序列$O$,估计模型$\lambda$的参数,使得在该模型下观测到这个序列的概率$P(O|\lambda)$最大。

      3、预测,或是解码。已知模型$\lambda$,给定观测序列$O$,求与之对应的状态序列$S$,使得概率$P(S|O,\lambda)$最大。 

      这三个基本问题分别阐述了HMM的基本推算方式和主要用途。下面依次介绍这三个基本问题的解法。

    概率计算

      对于给定的模型参数$\lambda =(A,B,\pi)$,计算观测序列$O= (o_1,o_2,\dots,o_T)$出现的概率,最简单的就是把所有可能的状态序列的概率都计算出来,然后选择最大的那个。但是这个方法计算复杂度是极大的,高达$O(TN^T)$阶,所以不可行。下面介绍两种计算可行的算法:前向和后向算法。

    前向算法

      定义到达时刻$t$,观测序列为$(o_1,o_2,\dots,o_t)$,且此时状态为$q_i$的概率

    $\alpha_t(i) = P(o_1,o_2,\dots,o_t,s_t=i|\lambda)$

      为前向概率。前向算法就是用$\alpha_t(i)$前向递推计算观测序列的概率。下面是算法的推算流程:

      1、计算初值。即当$t=1$时所有状态的$\alpha$,一共$N$个:

    $\begin{aligned}\alpha_1(i)=P(o_1,s_1=i|\lambda)=\pi_ib_{io_1},\;\;i=1,2,\dots,N\end{aligned}$

      2、递推。对$t=2,3,\dots,T$,计算所有状态的$\alpha$,每个$t$同样都要计算$N$个:

    $ \begin{aligned} &\alpha_t(i) \\ =& P(o_1,o_2,...,o_t,s_t=i|\lambda)\\ =& \sum\limits_{j=1}^NP(o_1,o_2,...,o_{t},s_{t-1}=j,s_t=i|\lambda) \\ =& \sum\limits_{j=1}^N P(o_t|o_1,o_2,...,o_{t-1},s_{t-1}=j,s_t=i,\lambda)P(o_1,o_2,...,o_{t-1},s_{t-1}=j,s_t=i|\lambda) \\ =& \sum\limits_{j=1}^N P(o_t|s_t=i,\lambda)P(o_1,o_2,...,o_{t-1},s_{t-1}=j|\lambda)P(s_t=i|o_1,o_2,...,o_{t-1},s_{t-1}=j,\lambda) \\ =& P(o_t|s_t=i,\lambda)\sum\limits_{j=1}^N P(o_1,o_2,...,o_{t-1},s_{t-1}=j|\lambda)P(s_t=i|s_{t-1}=j,\lambda) \\ =& b_{io_i}\sum\limits_{j=1}^N\alpha_{t-1}(j)a_{ji},\;\;i=1,2,...,N \end{aligned} $

      3、计算最后的概率:

    $ \begin{aligned} P(O|\lambda) =\sum\limits_{i=1}^NP(o_1,o_2,...,o_T,s_T=i|\lambda) =\sum\limits_{i=1}^N\alpha_T(i) \end{aligned} $

      下面是书上的计算图,便于理解:

    后向算法

      定义在$t$时刻的状态为$q_i$的条件下,之后观测序列为$(o_{t+1},o_{t+2},\dots,o_T)$的条件概率

    $\beta_t(i) = P(o_{t+1},o_{t+2},\dots,o_T|s_t=i,\lambda)$

      为后向概率。与前向算法类似,后向算法是用$\beta_t(i)$后向推算概率。下面是递推流程:

      1、定义初值:

     $\begin{aligned}&\beta_T(i)=1,\;\;i=1,2,...,N\\\end{aligned}$

      2、对$t=T-1,T-2,...,1$,计算:

    $ \begin{aligned} &P(o_{t+1},...,o_T|s_t=i,\lambda)\\ =&\sum\limits_{j=1}^NP(o_{t+1},...,o_T,s_{t+1}=j|s_t=i,\lambda)\\ =&\sum\limits_{j=1}^NP(o_{t+1}|o_{t+2},...,o_T,s_{t+1}=j,s_t=i,\lambda)P(o_{t+2},...,o_T,s_{t+1}=j|s_t=i,\lambda)\\ =&\sum\limits_{j=1}^NP(o_{t+1}|s_{t+1}=j,\lambda)P(o_{t+2},...,o_T|,s_{t+1}=j,s_t=i,\lambda)P(s_{t+1}=j|s_t=i,\lambda)\\ =&\sum\limits_{j=1}^NP(o_{t+1}|s_{t+1}=j,\lambda)P(o_{t+2},...,o_T|,s_{t+1}=j,\lambda)P(s_{t+1}=j|s_t=i,\lambda)\\ =&\sum\limits_{j=1}^N a_{ij}b_{jo_{t+1}}\beta_{t+1}(j),\;\;i=1,2,...,N\\ \end{aligned} $

      3、计算结果:

    $ \begin{aligned} P(O|\lambda) = \sum\limits_{i=1}^N\pi_ib_{io_1}\beta_1(i) \end{aligned} $

    利用前后向算法计算某些概率

      我们可以用$\alpha$和$\beta$计算某些概率。

      1、给定$\lambda$,计算以观测$O$为条件,$t$时刻状态为$q_i$的条件概率:

     $ \begin{aligned} &P(s_t=i|O,\lambda)\\ =&\frac{ P(o_1,...,o_T,s_t=i|\lambda) }{P(O|\lambda)}\\ =&\frac{ P(o_1,...,o_t,s_t=i|\lambda)P(o_{t+1},...,o_T|o_1,...,o_t,s_t=i,\lambda) }{P(O|\lambda)}\\ =&\frac{ P(o_1,...,o_t,s_t=i|\lambda)P(o_{t+1},...,o_T| s_t=i,\lambda) }{\sum\limits_{j=1}^NP(o_1,...,o_T,s_t=j|\lambda)}\\ =&\frac{ \alpha_t(i)\beta_t(i) }{\sum\limits_{j=1}^N\alpha_t(j)\beta_t(j)}\\ \end{aligned} $

      2、给定$\lambda$,计算以观测$O$为条件,$t$时刻状态为$q_i$,且$t+1$时刻状态为$q_j$的条件概率:

    $\begin{aligned}&P(s_t=i,s_{t+1}=j|O,\lambda)\\=&\frac{\alpha_t(i)a_{ij}b_{jo_{t+1}}\beta_{t+1}(j)}{P(O|\lambda)}\\=&\frac{\alpha_t(i)a_{ij}b_{jo_{t+1}}\beta_{t+1}(j)}{\sum\limits_{k=1}^N\sum\limits_{l=1}^NP(s_t=k,s_{t+1}=l,O|\lambda)}\\=&\frac{\alpha_t(i)a_{ij}b_{jo_{t+1}}\beta_{t+1}(j)}{\sum\limits_{k=1}^N\sum\limits_{l=1}^N\alpha_t(k)a_{kl}b_{lo_{t+1}}\beta_{t+1}(l)}\\\end{aligned}$

      具体推算过程和1类似,也用到了“链”的性质把多余的条件去掉。 

      3、给定$\lambda$,以观测$O$为条件,求某个状态或某两个连续状态出现的期望(就是出现次数的期望)。直接对所有时刻的以上条件概率进行求和即可,不再详写。

    学习

      如果给你观测序列和对应的状态序列,那么直接用各种转移出现的频率来估计$\lambda=(A,B,\pi)$即可,这很简单,就不讲了。而如果只给你观测序列,正如上面基本问题中定义的那样,就不能直接计算了,需要使用EM算法(点击链接)来迭代计算,就是所谓的Baum-Welch算法(实际上就是EM算法的应用)。

    Q函数

      因为只有观测序列,其未知的状态序列就可以看做隐变量。假设用于训练的观测序列集合为:

    $\mathbb{O} = \{O_1,O_2,\dots,O_{|\mathbb{O}|}\}$

      其中任意观测序列$O_i$的长度都为$T$。

      然后假定隐变量状态序列的所有可能性集合为:

    $\mathbb{S} = \{\left.S=(s_1,s_2,\dots,s_T)\right|s_t = 1,2,\dots,N,\;\;t = 1,2,\dots,T\}$

      于是可以定义第k次迭代的$Q$函数:

     $\displaystyle Q(\lambda,\lambda^k) = \sum\limits_{\mathbb{O}}\sum\limits_{\mathbb{S}}P(S|O,\lambda^k)\log P(S,O|\lambda)$

      这里$Q$函数的定义与《统计学习方法》上定义的不同,为了更严谨,我把所有观测数据都算上了。

      代入待优化参数,然后进行分解:

    $ \begin{aligned} Q\left(\lambda,\lambda^k\right) &= \sum\limits_{\mathbb{O}}\sum\limits_{\mathbb{S}}P\left(S|O,\lambda^k\right) \log \left(\pi_{s_1}b_{s_1o_1}a_{s_1s_2}b_{s_2o_2}\dots a_{s_{T-1}s_T}b_{s_To_T}\right)\\ &= \sum\limits_{\mathbb{O}}\sum\limits_{\mathbb{S}}P\left(S|O,\lambda^k\right) \left(\log \pi_{s_1}+\sum\limits_{t = 1}^{T-1}\log a_{s_ts_{t+1}}+\sum\limits_{t = 1}^T\log b_{s_to_t}\right) \end{aligned} $

      可以看到待优化式子分解为三个不同待优化变量的求和,因此可以将它们分开分别进行优化。

    优化π

      首先对$\pi$的优化式进行整理,将每个优化变量$\pi_i$的系数合并:

    $ \begin{gather}  \begin{aligned} & \sum\limits_{\mathbb{O}}\sum\limits_{\mathbb{S}}P\left(S|O,\lambda^k\right) \log \pi_{s_1}\\ =& \sum\limits_{\mathbb{O}}\sum\limits_{i=1}^N \sum\limits_{\{S|S\in \mathbb{S},s_1=i\}}P(S|O,\lambda^k) \log \pi_i\\ =& \sum\limits_{\mathbb{O}}\sum\limits_{i=1}^N\sum\limits_{1\le s_2,\dots,s_T \le N}P\left(s_1=i,s_2,s_3,\dots,s_T|O,\lambda^k\right) \log \pi_i\\ =& \sum\limits_{\mathbb{O}}\sum\limits_{i=1}^N P\left(s_1=i|O,\lambda^k\right) \log \pi_i\\ \end{aligned}\label{} \end{gather} $

      上式第一个等号成立是因为$\sum\limits_{\mathbb{S}}$和$\sum\limits_{i=1}^N \sum\limits_{\{S|S\in \mathbb{S},s_1=i\}}$是等价的。

      注意到等式约束$\sum\limits_{i=1}^N\pi_i=1$为仿射函数,并且上式为凸函数,因此这是一个带等式约束的凸优化(满足KKT条件(点击链接)即可)。写出拉格朗日函数:

    $ \begin{aligned} L(\pi,\gamma) = \sum\limits_{\mathbb{O}}\sum\limits_{i=1}^N P\left(s_1=i|O,\lambda^k\right) \log \pi_i + \gamma\left(\sum\limits_{i=1}^N\pi_i-1\right) \end{aligned} $ 

      对每个$\pi_i$求导并等于0、化简,再联立等式约束,得KKT条件:

    $ \left\{ \begin{aligned} & \frac{\partial L}{\partial\pi_i}=\sum\limits_{\mathbb{O}}\frac{1}{\pi_i} P\left(s_1=i|O,\lambda^k\right) +\gamma=0,\;\;i=1,2,\dots,N\\ &\sum\limits_{i=1}^N\pi_i=1 \end{aligned} \right. $

      将分母的$\pi_i$乘过去然后求和计算$\gamma$:

    $\displaystyle\sum\limits_{\mathbb{O}} \sum\limits_{i=1}^N P\left(s_1=i|O,\lambda^k\right) +\sum\limits_{i=1}^N\gamma\pi_i=0$

    $|\mathbb{O}| +\gamma=0$

    $\gamma=-|\mathbb{O}| $

      其中$|\mathbb{O}|$是用于训练的观测序列数。再计算$\pi_i$:

    $ \begin{gather}\begin{aligned} & \pi_i = \frac{1}{|\mathbb{O}|}\sum\limits_{\mathbb{O}} P\left(s_1=i|O,\lambda^k\right) \end{aligned} \label{}\end{gather} $

    优化a

      $a$的优化式:

    $ \begin{aligned} & \sum\limits_{\mathbb{O}}\sum\limits_{\mathbb{S}}P\left(S|O,\lambda^k\right)\sum\limits_{t = 1}^{T-1}\log a_{s_to_{t+1}}\\ \end{aligned} $

      和$\pi_i$一样,也要先将每个$a_{ij}$的系数合并。为了容易理解,先对单个的$a_{s_ts_{t+1}}$进行整理:

    $ \begin{aligned} & \sum\limits_{\mathbb{O}}\sum\limits_{\mathbb{S}}P\left(S|O,\lambda^k\right)\log a_{s_to_{t+1}}\\ =& \sum\limits_{\mathbb{O}}\sum\limits_{i=1}^N\sum\limits_{j=1}^N\sum\limits_{\{S|S\in\mathbb{S},s_t=i,s_{t+1}=j\}}P\left(S|O,\lambda^k\right)\log a_{ij}\\ =& \sum\limits_{\mathbb{O}}\sum\limits_{i=1}^N\sum\limits_{j=1}^NP\left(s_t=i,s_{t+1}=j|O,\lambda^k\right)\log a_{ij}\\ \end{aligned} $

      再加上$t$的求和,得到整理后的$a$的优化式:

    $ \begin{aligned} & \sum\limits_{\mathbb{O}}\sum\limits_{i=1}^N\sum\limits_{j=1}^N\sum\limits_{t=1}^{T-1}P\left(s_t=i,s_{t+1}=j|O,\lambda^k\right)\log a_{ij}\\ \end{aligned} $

      类似于优化$\pi$,列出具有$N$个等式约束$\sum\limits_{j=1}^Na_{ij}=1$的拉格朗日函数:

    $ \begin{aligned} L(a,\gamma) =\sum\limits_{\mathbb{O}}\sum\limits_{i=1}^N\sum\limits_{j=1}^N\sum\limits_{t=1}^{T-1}P\left(s_t=i,s_{t+1}=j|O,\lambda^k\right)\log a_{ij} +\sum\limits_{i=1}^N\gamma_i\left(\sum\limits_{j=1}^Na_{ij}-1\right) \end{aligned} $

      列出KKT条件:

    $ \left\{ \begin{aligned} &\frac{\partial L}{\partial a_{ij}} =\frac{1}{a_{ij}}\sum\limits_{\mathbb{O}}\sum\limits_{t=1}^{T-1}P\left(s_t=i,s_{t+1}=j|O,\lambda^k\right) +\gamma_i =0,\;\;i,j=1,2,\dots,N\\ &\sum\limits_{j=1}^Na_{ij}=1,\;\;i=1,2,\dots,N \end{aligned}\right. $

      求和计算得$\gamma$:

    $\displaystyle \gamma_i = -\sum\limits_{\mathbb{O}}\sum\limits_{t=1}^{T-1}P\left(s_t=i|O,\lambda^k\right) $

      再算$a_{ij}$:

    $ \begin{gather}\begin{aligned} a_{ij}  =\frac{\sum\limits_{\mathbb{O}}\sum\limits_{t=1}^{T-1}P\left(s_t=i,s_{t+1}=j|O,\lambda^k\right)}{\sum\limits_{\mathbb{O}}\sum\limits_{t=1}^{T-1}P\left(s_t=i|O,\lambda^k\right)}\\ \end{aligned}  \label{}\end{gather} $

    优化b

       同样先将每个$b_{ij}$的系数进行合并:

    $ \begin{gather} \begin{aligned} &\sum\limits_{\mathbb{O}}\sum\limits_{\mathbb{S}}P\left(S|O,\lambda^k\right) \sum\limits_{t = 1}^T\log b_{s_to_t}\\ =&\sum\limits_{\mathbb{O}}\sum\limits_{\mathbb{S}}\sum\limits_{t = 1}^TP\left(S|O,\lambda^k\right) \log b_{s_to_t}\\ =&\sum\limits_{j=1}^M\sum\limits_{i=1}^N\sum\limits_{t = 1}^T \sum\limits_{\{O|O\in \mathbb{O},o_t=j\}} \sum\limits_{\{S|S\in \mathbb{S},s_t=i\}} P\left(S|O,\lambda^k\right) \log b_{ij}\\ =&\sum\limits_{j=1}^M\sum\limits_{i=1}^N\sum\limits_{t = 1}^T \sum\limits_{\{O|O\in \mathbb{O},o_t=j\}} P\left(s_t=i|O,\lambda^k\right) \log b_{ij}\\ \end{aligned} \label{}  \end{gather} $

      列出包含约束的拉格朗日函数:

    $ \begin{gather} \begin{aligned} L(b,\gamma)=&\sum\limits_{j=1}^M\sum\limits_{i=1}^N\sum\limits_{t = 1}^T \sum\limits_{\{O|O\in \mathbb{O},o_t=j\}} P\left(s_t=i|O,\lambda^k\right) \log b_{ij} +\sum\limits_{i=1}^N\gamma_i\left(\sum\limits_{j=1}^Mb_{ij}-1\right) \\ \end{aligned}\label{}  \end{gather} $

      这里说明一下,$b$和$\pi,a$不同,$b_{ij}$是否为0是与训练数据集$\mathbb{O}$直接相关的。比如在$\mathbb{O}$没有出现观测$v_3$,那我们可以直接将所有$b_{i3}$估计为0,这是符合常理的。而在$(6)$式中,因为不存在$o_t=3$的$O$,所以$\log b_{i3}$也不存在,于是对$\log b_{i3}$求导也没法求,就不能参与优化了,直接估计为0即可。另外,$\pi,a$是与隐变量状态序列相关的,而隐变量我们是要考虑所有可能的情况的,所以所有$\pi_i,a_{ij}$都可以参与优化。

      下面对非0的$b_{ij}$进行求导并令其为0,联立约束列出KKT条件:

    $ \left\{ \begin{aligned} &\frac{\partial L}{\partial b_{ij}} =\frac{1}{b_{ij}}\sum\limits_{t = 1}^T \sum\limits_{\{O|O\in \mathbb{O},o_t=j\}} P\left(s_t=i|O,\lambda^k\right) + \gamma_i =0,\;\; i=1,2,\dots,N,\;\;j=1,2,\dots,M \\ &\sum\limits_{j=1}^Mb_{ij}= 1,\;\;i=1,2,\dots,N \end{aligned}\right. $

     

      计算$\gamma$:

    $ \displaystyle\sum\limits_{j = 1}^M \sum\limits_{t = 1}^T \sum\limits_{\{O|O\in \mathbb{O},o_t=j\}} P\left(s_t=i|O,\lambda^k\right) + \gamma_i = 0  $

    $ \displaystyle \gamma_i = -\sum\limits_{\mathbb{O}} \sum\limits_{t = 1}^T P\left(s_t=i|O,\lambda^k\right) $

      计算优化$b$:

    $ \displaystyle b_{ij}= \frac{\sum\limits_{t = 1}^T \sum\limits_{\{O|O\in \mathbb{O},o_t=j\}} P\left(s_t=i|O,\lambda^k\right)  } {\sum\limits_{\mathbb{O}} \sum\limits_{t = 1}^T P\left(s_t=i|O,\lambda^k\right)} $

      算上训练数据$\mathbb{O}$中不包含某观测$v_j$,使得$b_{ij}=0$的情况(其实上式已经包含了,但是我不确定是看做0还是看做不存在,为了严谨还是显式写出来好了):

    \begin{gather}  b_{ij}=\left\{ \begin{aligned} &\frac{\sum\limits_{t = 1}^T \sum\limits_{\{O|O\in \mathbb{O},o_t=j\}} P\left(s_t=i|O,\lambda^k\right)  } {\sum\limits_{\mathbb{O}} \sum\limits_{t = 1}^T P\left(s_t=i|O,\lambda^k\right)}, &\exists O\in \mathbb{O}, j\in O \\ &0,& \forall O\in \mathbb{O}, j\notin O \end{aligned}\right.  \label{}\end{gather}

    迭代

      综上,使用EM算法迭代计算HMM参数的步骤如下:

      0、初始化$\lambda^0 = (\pi^0,A^0,B^0)$,各取为符合约束的随机值。

      1、第$k$次迭代,在$\lambda^{k-1}$的基础上分别使用$(3),(4),(7)$式对$\pi,a,b$进行优化,得到$\lambda^k$。

      2、判断终止条件,满足即完成迭代,否则回到第一步执行下一次迭代。

    预测

      预测问题最直观的方式,就是直接选择每个时刻最有可能出现的状态$s_t^*$,从而预测整个状态序列,即:

    $ \begin{aligned} &s_t^* = \arg\max\limits_{1\le i \le N} \frac{\alpha_t(i)\beta_t(i)}{\sum\limits_{j=1}^N\alpha_t(j)\beta_t(j)},\;\;t=1,2,...,T\\ &S = (s_1^*,s_2^*,...,s_T^*) \end{aligned} $

      但这并不是整体最优的,而且它并不能剔除因为状态转移概率为0而不可能出现的状态序列。为了整体最优并且符合状态转移概率矩阵,我们通常使用维特比算法来预测状态序列。

    维特比算法

      维特比算法实际上就是动态规划,在递推的过程中保持步步最优,从而最终达到全局最优的目的。

      定义在$t$时刻以内,且$t$时刻状态为$q_i$的所有状态序列的出现概率的最大值为:

    $ \begin{gather}  \begin{aligned} \delta_t(i) = \max_{s_1,...,s_{t-1}}P(s_t=i,s_{t-1},...,s_1,o_t,...,o_1|\lambda),\;\;i=1,2,...,N \end{aligned} \label{}\end{gather} $

      由定义可以获得$\delta$的递推公式:

    $ \begin{aligned} &\delta_{t+1}(i) \\ =& \max_{s_1,...,s_t}P(s_{t+1}=i,s_t,...,s_1,o_{t+1},...,o_1|\lambda)\\ =& \max_{s_t}\max_{s_1,...,s_{t-1}}P(s_{t+1}=i,s_t,...,s_1,o_{t+1},...,o_1|\lambda)\\ =& \max_{1\le j\le N}\max_{s_1,...,s_{t-1}}P(s_{t+1}=i,s_t=j,s_{t-1},...,s_1,o_{t+1},...,o_1|\lambda)\\ =& \max_{1\le j\le N}\max_{s_1,...,s_{t-1}}\left[P(o_{t+1}|s_{t+1}=i,\lambda)P(s_{t+1}=i,s_t=j,s_{t-1},...,s_1,o_t,...,o_1|\lambda)\right]\\ =& P(o_{t+1}|s_{t+1}=i,\lambda)\max_{1\le j\le N}\max_{s_1,...,s_{t-1}}\left[P(s_{t+1}=i|s_t=j,\lambda)P(s_t=j,s_{t-1},...,s_1,o_t,...,o_1|\lambda)\right]\\ =& P(o_{t+1}|s_{t+1}=i,\lambda)\max_{1\le j\le N}\left[P(s_{t+1}=i|s_t=j,\lambda)\max_{s_1,...,s_{t-1}}P(s_t=j,s_{t-1},...,s_1,o_t,...,o_1|\lambda)\right]\\ =& b_{io_{t+1}}\max_{1\le j\le N}a_{ji}\delta_t(j) \end{aligned} $

      以上算的是概率,并没有获取状态编号。所以再定义:

    $ \begin{gather}  \begin{aligned} \Psi_t(i) = \arg\max_{1\le j\le N} \left[\delta_{t-1}(j)a_{ji}\right],\;\;i=1,2,...,N \end{aligned} \label{}\end{gather} $

      用来回溯获取状态序列。

      维特比算法用已知观测序列预测状态序列过程如下:

      1、初始化。直接计算$\delta_1(i)$。

      2、对$t=2,3,...,T$,使用递推公式计算$\delta_t(i)$,使用$(9)$式计算$\Psi_t(i)$。

      3、使用$\Psi_t(i)$回溯,获取最大概率状态序列。

    参考资料

      李航《统计学习方法》

    展开全文
  • 一个好玩的产品或说是细节特性然并卵,需要做的是一个能够持续提供用户价值的产品/特性 虽然直到目前 B3log 系产品用户多,但我们已经初步证明了:Java 用来实现博客、论坛没有什么不好的 使用开源软件,了解...
  • 句法模式识别(一)-串文法

    千次阅读 2014-05-16 10:53:09
    前面介绍所有思想都属于统计模式识别,然而统计模式识别存在2个问题: 1.有模式结构很复杂,能用一个矢量来表示。 2.有模式识别任务中,我们更关心如何描述结构特征。   因此需要另外一种模式识别:...

    前面介绍的所有思想都属于统计模式识别,然而统计模式识别存在2个问题:

    1.有的模式结构很复杂,不能用一个矢量来表示。

    2.有的模式识别任务中,我们更关心如何描述它的结构特征。

     

    因此需要另外一种模式识别:结构模式识别

    这其中,句法模式识别主要使用形式语言来描述模式结构,在理论上完备,表1是句法模式识别与统计模式识别的对应关系,下面做介绍。

     

    表1


    串文法就是一种机器能识别的语法,所以先讲讲语法。

     

    字母表V

    字母a,b,c的有限集合。              

     

    句子x,y,z

    V中的符号形成的有限长度的字符串。

    这其中V的闭包,包含了字母表能组成所有句子的集合。

    V的正闭包,就是把闭包里面的那1个空串去掉就好了。

    这种区别就像是正数与非负数的关系,非负数去掉0就是非负数了。

     

    文法G = 

    一个文法或者说语法,有4部分组成就好了。

    这4个部分依次代表:非终止符、终止符、生成规则、起始符。

    这其中有


     

    举个例子:The boy runs.如图1所示。


    图1




    非终止符就是那些还要继续寻找对应关系的元素,比如说Noun,它与我们想表达的Theboy runs.这个句子相比要进一步寻找对应关系,Noun并不是最终出现在句子里的部分,因此倒了Noun并没有终止,Noun继续链接到boy才OK。所以像Noun这样的元素就叫非终止符。

     

    终止符刚刚介绍了,就是最终要出现在句子里的部分。像The、boy、runs这些都是。

     

    起始符在这个例子中是Sentence,就是句子开始的标志。

    P(生成规则)比较复杂,生成规则就是符号的变换规则表。就像是法律一样,在相应的语法环境下,必须按照这个规则来生成句子。

     

    符号习惯

    非终止符:大写字母

    终止符:小写字母

    仅由终止符构成的字符串:用后面小写字母构成的x,y,z

    由终止符和非终止符混合构成:用希腊字母

     表示一些列地调用P中的规则。

     

    语言L(G)


    语言是字符串的集合。由文法G产生。特点是

    1.所有的字符串由终止符构成

    2.每个字符串都是从S出发调用P中的规则而产生。

     

    串文法的分类

     

    第0类:无限制文法


    这种对文法不加限制,基本没用。

     

    第1类:上下文有关文法


    这种规则就是说,仅当上下文是时,中间的非终止符A才能替换成为混串。这就是其名字的由来。

     

    第2类:上下文无关文法


    这种文法是说,不论上下文如何A都可以用 来替换。

     

    第3类:正规文法


    正规文法是最常用的一种文法。

     

    四种文法的关系

    如图2.

     

    图2

     

    举个例子:染色体分析

    现在要识别2类染色体:中央着丝染色体和顶端着丝染色体。如图3.


    图3


    作为句法的5种基元a,b,c,d,e分别是5种最简单的形状,如图4.


    图4


    这些基元能构成6种子模式(就是非终止符):

    S——臂对,B――底, C——边,  D——单个臂,  E——右臂,  F——左臂。

     

     

    于是这个染色体语法就可以表示出来了:


    这个P生成规则太多了实在是,而且比如A究竟要用到哪条规则是无法事先知道的,要试试。只要最后试出来一条能走完的路径就认为是符合语法的。否则只有当所有可能的路径都不能从S出发,才可以认为该句子是不符合语法的。

     

    最后按照该文法可以得到2种染色体对应的字符串分别为:

    1. abcbabdbabcbabdb

    2. ebabcbab

    如图5.


    图5


    欢迎参与讨论并关注本博客微博以及知乎个人主页后续内容继续更新哦~

    转载请您尊重作者的劳动,完整保留上述文字以及文章链接,谢谢您的支持!



    展开全文
  • ASP.NET网页代码模型及生命周期

    热门讨论 2009-07-28 14:22:11
    在创建了ASP.NET应用程序后,系统同样会默认创建一个Default.aspx页面,不同的是,多出了一个Default.aspx.designer.cs,用来初始化页面控件,一般需要修改。 4.1.5 ASP.NET网站和ASP.NET应用程序的区别 在ASP.NET...
  • 主成分分析 1、背景 ​ 在许多领域研究中,往往需要对反映事物多个变量进行大量观测,收集大量数据以便进行分析寻找规律。...​ 下面再看一组学生成绩统计,见表2: ​ 我们无法从表2中直接看出这组数据
  • (26) 下面不属于软件工程的3个要素的是(D) 注:P62 A. 工具 B. 过程 C. 方法 D. 环境 (27) 程序流程图(PFD)中的箭头代表的是(B) 注:P81 A. 数据流 B. 控制流 C. 调用关系 D. 组成关系 (28) 在数据管理技术的发展...
  • (26) 下面不属于软件工程的3个要素的是______。(D) A. 工具 B. 过程 C. 方法 D. 环境 (27) 程序流程图(PFD)中的箭头代表的是______。(B) A. 数据流 B. 控制流 C. 调用关系 D. 组成关系 (28) 在数据管理技术的发展...
  • 数据逻辑结构是对数据元素之间逻辑关系的描述,它可以用一个数据元素集合和定义在此集合中若干关系来表示。数据逻辑结构有两个要素:一是数据元素集合,通常记为D;二是D上关系,它反映了数据元素之间...
  • 永远遗憾的是Stevens博士已可能完成第3卷了,不过像Gary R.Wright等人也许能够把它整理并续写出来。Wright是Stevens博士另一套丛书即《TCP/IP阐述》(TCP/IP Illustrated)中第2卷的合作者,Stevens博士的个人...
  • 会计理论考试题

    2012-03-07 21:04:40
    1.计算机感染病毒后会产生各种现象,以下不属于病毒现象的是__D__。 A、文件占用的空间变大 B、发生异常蜂鸣声 C、屏幕显示异常图形 D、机内的电扇不转 2. Windows98支持下面___C__网络协议。 A、Net BEUI B、IPX...
  • 6.点单录入同一张单子点某个有例送物品,再点另一个物品,再点上述有例送物品累加数量时例送的问题。 7.员工登陆窗口修改密码时,可以把密码和假帐查询密码修改成相同。 8.数据清理时没有把退酒水单记录清除...
  • 软件测试规范

    2018-04-23 09:16:12
    软件测试目标 .................................................................................................................................. 2 三.软件测试流程 .......................................
  • 仔细比较两种数据的差别,发现出现主机复位问题的数据中DSL板配置了MNT/MLT端口,但是没有做DSL端口之间的半永久数据。 于是在程序中不断加打印语句,通过后台的DBWIN调试程序跟踪,最后终于定位为:每当执行到...
  • oracle数据库经典题目

    2011-02-17 15:05:20
    25. 下列哪个锁模式不属于Oracle?( D ) A. 共享锁 B.排他锁 C. 行级共享锁 D. 死锁 26. 想在另一个模式中创建表,用户最少应该具有什么系统权限?( B ) A.CREATE TABLE B. CREATE ANY TABLE C. RESOURCE D. ...
  • 指向的是window对象。而所谓的对象也就是引用类型,实际上在后台执行环境中,它就是一个指针。 回到Js当代码在执行的时候,会创建变量对象并且构建一个作用域链,而这个对象保存着当前函数...

空空如也

空空如也

1 2 3
收藏数 45
精华内容 18
关键字:

下面不属于描述统计问题的是