精华内容
下载资源
问答
  • 后向算法

    千次阅读 多人点赞 2018-08-21 15:58:12
    可以根绝算法后向算法的定义,将两种计算方式结合起来,如下:   https://blog.csdn.net/u012771351/article/details/53113377 那么算法后向算法之间联系 我们来推导一下: 从...

    https://blog.csdn.net/Hearthougan/article/details/77930786

     本文是自己学习隐马尔科夫模型的一个总结,为了自己以后方便查阅,也算作是李航老师的《统计学习方法》的一个总结,若有疑问,欢迎讨论。

    推荐阅读知乎上Yang Eninala写的《如何用简单易懂的例子解释隐马尔可夫模型?》,写的非常好。我会联系两者,来作为自己的一篇学习笔记。

        隐马尔可夫模型: 隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。隐藏的马尔可夫链随机生成的状态的序列,称为状态序列(state sequence),每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列(observation sequenoe )。序列的每一个位置又可以看作是一个时刻。

    隐马尔科夫模型的3个基本问题:

         (1)概率计算问题。给定模型和观测序列,计算在模型下的观测序列出现的概率

        (2)学习问题。已知观测序列,估计模型参数,使得在该模型下观测序列概率最大。

        (3)预测问题,也称为解码(decoding)问题。已知模型参数和观测序列,求对给定观测序列前提下,条件概率最大的状态序列。即给定观测序列,求最有可能的对应的状态序列。

    概率计算问题:
    1、 直接计算方法
        这种方法说白了就是暴力搜索,枚举每一种状态序列,然后在根据状态序列求出观测序列的概率。
        思想很简单,可以这么想:假如我们现在已知状态序列为,那么根据状态序列S,求观测序列的概率,不就是相应的输出概率的连乘么!满足假设的状态序列总共有种,然后对所有假设的状态得出的概率相加,即为。细化如下:

        状态序列的概率是

     


        对已经假设的状态序列,观测序列,的概率是

     

        观测序列O和状态序列S同时出现的概率是:

        最后,对所有的状态序列S求和,即可得到观测序列O的概率

        对于实现上式,很简单,个for循环即可枚举所有的状态,然后计算每种状态对应的观测概率,时间复杂度是O(T),因此要直接计算的话,总的时间复杂度为,当数据量稍微大一点,具体实施就不太可能,因此要实现HMM的第一个问题,就要换一种方法。

    2、前向算法:

        给定隐马尔可夫模型,定义到时刻t部分观测序列且状态为的概率为前向概率,记作

        可以递推地求得前向概率及观测序列概率

        这个可以这么理解,已知选每种骰子的概率,每种骰子的输出概率,那么前t次掷骰子,掷出的点数为,并且第t用的骰子是,的概率是就是

    (1)初值:

    【第一次掷的是骰子是,掷出的点数为的概率,其中表示开始的时候选用骰子的概率】

     

    (2)递推:

    【第t+1次用骰子,掷出的概率】

        上式方括号中,表示第t次使用骰子掷出点数的的概率,,表示前t次掷出点数为的概率×第t+1次使用骰子的概率。

        由于第t次骰子的种类有N种,因此,第t+1次使用,而前一次,也就是第t次,使用的骰子有N种可能,即如下图:

    (3)终止:

        根据(2)的递推式子可以求出,表示第T次使用可以产生序列,i仍有N中可能所以相加即为最终的结果。

        例子1(前向算法):考虑盒子和球模型,状态集合,观测集合,并且有:

    ,试用前向算法计算

    根据上面我们描述的算法,一步一步地计算,

    (1)计算初值:

    (2)递推:

         当时:

        当时:

    3、后向算法

        给定隐马尔可夫模型,定义在时刻t部状态为的条件下,从的部分观测序列为的概率为后向概率,记作:

    可以递推地求得后向概率及观测序列概率

       可以这么理解,已知第t次掷骰子所用的骰子是,那么它表示的就是从次到第次的看到的点数为:的概率。

    (1)初值

    【解释:已知最后一次所用的骰子为,那么第次之后,为任意值的概率,故而为1】

    (2)递推

    (3)终止

        后向算法依旧是解决概率计算问题,只不过是两种计算方式,计算结果应该是和前向算法相同,可以用例1验证一下,如下:

        例2(后向算法),考虑盒子和球模型,状态集合,观测集合,并且有:

    ,试用后向算法计算。
        我们仍然根据上面的算法描述,一步一步地计算,

    (1)计算初值

        当

    (2)递推

        当时:

        当

    (3)终止

     

    可以根绝前向算法和后向算法的定义,将两种计算方式结合起来,如下:

     

    https://blog.csdn.net/u012771351/article/details/53113377

    那么前向算法和后向算法之间联系

    我们来推导一下:

    从结论我们不难看出,在t时刻如果知道了状态为qi,那么可以将这个t之前和之后阻断,最后变换成前向概率和后向概率。

    那么我们就可以求单个状态的概率了:

    这样的话我么你从t=1一直计算到t=T,我们就可以得到每个时刻最有可能的那个状态,但是这样子做对么?

    我认为是不对的,原因是每一个时刻最有可能最终组成的状态序列是不一定存在的,打个比方说,全市高考,我选出每个学科的最高分,那么我就说这是第一名的各科成绩,显然是不一定的,那么正确的做法是什么呢?我们将在后边的Viterbi算法中介绍。

     

    进一步思考:如果要求了t时刻状态为i,t+1时刻状态为j的联合概率呢?

    最终结果是:

    这里把联合概率这块拿出来只是让大家更直观的感觉这个前后向概率而已,跟我们整体的HMM模型框架无关。

    展开全文
  • HMM后向算法

    千次阅读 2018-06-12 21:52:09
    HMM后向算法HMM的三个基本问题中,对于HMM参数的学习是最难的。对于给定的观测序列O,如何估计模型参数使得P(O|λ)最大。目前为止,可能并不存在一种方法使得P(O|λ)最大,但是接下里的后向算法是能够使上述...

    HMM前向后向算法

    HMM的三个基本问题中,对于HMM参数的学习是最难的。对于给定的观测序列O,如何估计模型参数使得P(O|λ)最大。目前为止,可能并不存在一种方法使得P(O|λ)最大,但是接下里的前向后向算法是能够使上述问题得到局部最优。

    首先:假设给定模型λ和观测序列,计算观测序列出现的概率P(O|λ)。令隐含状态序列I={i1,i2...iT};观测序列是O={O1,O2,...OT},计算联合概率P(O,I|λ),然后将所有可能的I进行求和,就是P(O|λ)。

    隐含状态序列I的概率是:

    当固定隐含状态I和给定模型参数时,观测序列为O={O1,O2,...OT}的概率是P(O|I,λ)


    O和I同时出现的概率是:


    对所有的I进行求和:


    ---------(1)

    (1)  式计算量太大,于是才有之前的前向算法和后向算法。

     

     

    给定模型λ和观测序列O,在t时刻处于状态qi的概率:

    而且还有:

    回顾一下:前向概率的定义:

    给定HMM的参数λ,定义到t时刻的部分观测序列o1,o2..ot,且状态是qi的概率为前向概率:

    后向概率的定义:


    给定HMM的参数λ,在t时刻状态为qi的条件下,t+1到T的观测序列ot+1,ot+2..oT的概率为后向概率:

    P(it=qi,O|λ)的意思是:在给定HMM的参数λ,观测序列是O(O1,O2,...OT),在t时刻的状态为qi的概率。换句话理解就是:从1~t时刻,t时刻的状态为qi,输出是(O1,O2,...Ot),的概率,然后t时刻之后,在t时刻状态为qi,输出序列是(ot+1,ot+2..oT)的概率。

    1~t时刻的,输出是(O1,O2,...Ot),的概率:这不就是前向概率的定义么?

    t时刻之后,在t时刻状态为qi输出序列是(ot+1,ot+2..oT)的概率,这不就是后向概率么?

    于是就有:

    结合公式(1),(3),(6),可以得到:


    ----------(7)

    1.        

    给定模型参数λ和观测序列O,t时刻是qi,t+1时刻是qj的概率是:

    类似于公式(3):

     

    的意思是在给定HMM的参数下,观测序列是O,t时刻的状态是qi,t+1时刻的状态是qj的概率。

    这个概率=P(1~t时刻的输出序列O1,O2,...Ot,t时刻是qi|λ)*P(qi转移到t+1时刻的qj)*P(t+1时刻之后输出序列是ot+2,ot+3..oT|t+1时刻是qj, λ)*P(t+1时刻输出是Ot+1):

    这里面有好几个乘积,逐一解释:

    P(1~t时刻的输出序列O1,O2,...Ot,t时刻是qi|λ):这不就是t时刻的前向概率αt(i)么?

    P(qi转移到t+1时刻的qj):这不就是转移概率aij么?

    P(t+1时刻之后输出序列是ot+2,ot+3..oT|t+1时刻是qj,λ):这不就是t+1时刻的后向概率βt+1(i)么?

    (注意:t+1时刻的后续输出序列是ot+2,ot+3..oT,即下标是从t+2开始,不是t+1开始,请仔细理解后向概率的定义)

    前面少了Ot+1这个时间点的观测序列,因此要补上P(t+1时刻输出是Ot+1),而这个不就是bj(Ot+1)么?

    因此:

    从而根据(8),(9),(10)可以变换为:


    -----------(11)

    ---------(12)

    (12)式表示观测序列是O时,状态i出现的期望

    ---------(13)

    (13)式表示观测序列是O时,由状态i转移的期望

    ----------(14)

    (14)式表示观测序列是O时,由状态i转移到j的期望.

     

    2.       前向-后向算法(baum-welch)

    这里主要来推导非监督情况下的baum-welch算法。

    在只有观测序列时(只有O是已知的),如何估计HMM的参数λ使得P(O|λ)最大,前面已经讲过了,由于没有办法找到一种方法使得P(O|λ)全局收敛,baum-welch算法只能是局部最优。

    在公式(1)中有:

    观测序列是O (o1,o2,...oT),隐含状态是I{i1,i2.....iT},完全数据是(O,I)={ o1,o2,...oT , i1,i2.....iT}完全数据的对数似然函数是log(O,I|λ)。HMM的参数学习算法可以通过EM算法来实现。

    E-step:

    确定Q函数,即隐含变量的期望:


    ----------(16)

    (不太懂这个公式是如何计算来的)

    由于:

    ----------(17)

    因此有:


    ----------(18)

    M-step:

    极大化来计算参数A,B,π。

    对(18)式的三项分别进行极大化.

    第一项:

    其中:

    于是,写成拉格朗日函数如下:


    ----------(19)

    对(19)式求偏导:

    ----------(20)

    于是可以计算出:

    -----------(21)

    同时求和可以得到:

    ----------(22)

    将等式(22)带入到等式(21)中有:

    ----------(23)

    等式(18)第二项:

    -----------(24)

    约束条件是:

    同样让(24)变成拉格朗日函数式:

    ------------(25)

    做法与第一项最大化一致,最后计算的结果是:

    ----------(26)

    第三项:

    -----------(27)

    约束条件是:

    类似的,构建拉格朗日函数:

    ----------(28)

    对bj进行求偏导,并且令求偏导之后的函数为0,

    ----------(29)

    对于(29),如果t时刻,

    同时对j求和,然后可以计算得到:

    在时,(29)时左边才有意义,否则就是0,用来表示这种情况,于是可以计算bj

    以上(23),(26),(30)就是我们最终要的东西。

    再进一步:

    仔细看一下(23)和(7),这俩不是一回事儿么?(23)分子不就是说在给定λ情况下,观测序列是O,在t时刻是i的概率么?于是有,只不过现在t=1而已:

    ----------(31)

    同理:

    ----------(32)

    ----------(33)

    至此,baum-welch算法就已经推导完成了。

     


    展开全文
  • 上述程序中的例子用的是后向概率的算法,程序中算法后向算法可以单独拿出来进行计算,另外,李航《统计学习方法》中P189的习题10.2也可以计算得到, 其代码中调用上述程序函数,代码如下: function [p1,p2] =...

    由于研究需要,在网上找了不少关于隐马尔可夫模型的MATLAB程序,可能是没有耐下心去看,总之感觉看懂别人写的程序很费劲,所以就自己动手写了一下。

    主要的参考书目是李航的《统计学习方法》,并实现了书中部分例题和习题的解答,关于隐马尔可夫模型的理论知识不再赘述,这方面的经典论文和网上的优秀博客很多,这里介绍两篇经典的论文:

    1,Bilmes L,et al. A Gentle Tutorial of EM Algorithm and its Application to Parameter Estimation for Gaussian Mixture and Hidden Markov Models(1997)
     2,Rabiner L. A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition(1989)

    下面按照HMM的三个问题:概率计算,参数学习和解码顺序介绍我的代码。

    1,概率计算问题--前向后向算法

    function [P1,P2,p1] = ForwardBackwardAlgo(A,B,Pi,O)
    % 函数功能:前向后向算法,计算alpha值矩阵P1和beta值矩阵P2
    %
    % 参考文献:李航《统计学习方法》
    %
    % 思路:
    % 给定模型lambda和观测序列O,在时刻t处于状态qi的概率,记做
    % gamma_t(i) = P(it = qi|O,lambda) = P(it = qi,O|lambda) / P(O|lambda)
    % P(it = qi,O|lambda) = alpha_t(i) * beta_t(i)
    % 在这里,alpha矩阵表示前向概率矩阵,放在矩阵P1中,且为i*t阶
    %         beta矩阵表示后向概率矩阵,放在矩阵P2中,且为i*t阶
    %         
    % 输入:隐马尔可夫模型lambda(A,B,Pi),观测序列O;
    %       其中A为转移概率,B为观测概率(行数表示状态集合中的元的个数,列数表示观测集中的元的个数);
    %       Pi为初始概率,P为1*2阶矩阵,存放所求概率P(it = qi,O|lambda)中it和qi的角标t和i,即P=[t,i]
    %       【!!注意:初始概率Pi、观测序列O以及矩阵P均须为列矩阵】
    % 输出:P1:alpha值构成的矩阵,为i*t阶
    %       P2:beta值构成的矩阵,为i*t阶
    %       p1:观测序列概率P(O|lambda)
    %       
    % 示例:(李航《统计学虚方法》P188习题10.1)
    % 输入:
    % A1 =
    %     0.5000    0.1000    0.4000
    %     0.3000    0.5000    0.2000
    %     0.2000    0.2000    0.6000
    % B1 =
    %     0.5000    0.5000
    %     0.4000    0.6000
    %     0.7000    0.3000
    % Pi =
    %     0.2000
    %     0.3000
    %     0.5000
    % O =
    %      1
    %      2
    %      1
    %      2
    % 输出
    % P1 =
    %     0.1000    0.0770    0.0419    0.0211
    %     0.1600    0.1104    0.0355    0.0252
    %     0.2800    0.0606    0.0528    0.0138
    % P2 =
    %     0.1125    0.2461    0.4600    1.0000
    %     0.1217    0.2312    0.5100    1.0000
    %     0.1049    0.2577    0.4300    1.0000
    % p1 =
    %     0.0601
    
    alpha_1 = zeros();
    sum_alpha_j = zeros();
    sum_beta_i = zeros();
    % sum_p = zeros();
    P1 = zeros();
    A_size = size(A);
    O_size = size(O);
    N = A_size(1,1);
    M = A_size(1,2);
    K = O_size(1,1);
    P2 = zeros(N,K);
    
    % ---------------前向算法---------------
    %求解初值
    for i = 1:N
        alpha_1(i,1) = Pi(i,1) * B(i,O(1,1));
    end
    P1= alpha_1;
    
    %递推求解前向概率,存放在矩阵P1中
    for k = 1:K-1
        for j = 1:M
            for i = 1:N
               sum_alpha_j(i,1) = P1(i,k) .* A(i,j);
            end
            P1(j,k+1) = sum(sum_alpha_j) .* B(j,O(k+1,1));
        end
    end
    
    %计算观测概率P(O|lambda)
     p1 = sum(P1(:,K));
    
    % ----------------后向算法---------------
    % 对最终时刻所有状态有beta_T(i) = 1
    P2(:,K) = 1;
    
    % 递推求解后向概率,存放在矩阵P2中
    for k = K-1:-1:1
        for i = 1:M
            for j = 1:N
                sum_beta_i(j,1) = A(i,j) .* B(j,O(k+1,1)) .* P2(j,k+1);
            end
            P2(i,k) = sum(sum_beta_i);
        end
    end
    
    上述程序中的例子用的是后向概率的算法,程序中前向算法和后向算法可以单独拿出来进行计算,另外,李航《统计学习方法》中P189的习题10.2也可以计算得到,
    其代码中调用上述程序函数,代码如下:
    function [p1,p2] = ForwardBackwardAppli(A,B,Pi,O,P)
    % 函数功能:前向后向算法应用,计算P(it = qi|O,lambda)
    %
    % 参考文献:李航《统计学习方法》
    %
    % 思路:
    % 给定模型lambda和观测序列O,在时刻t处于状态qi的概率,记做
    % gamma_t(i) = P(it = qi|O,lambda) = P(it = qi,O|lambda) / P(O|lambda)
    % P(it = qi,O|lambda) = alpha_t(i) * beta_t(i)
    % 在这里,alpha矩阵表示前向概率矩阵,放在矩阵P1中,且为i*t阶
    %         beta矩阵表示后向概率矩阵,放在矩阵P2中,且为i*t阶
    %         
    % 输入:隐马尔可夫模型lambda(A,B,Pi),观测序列O;
    %       其中A为转移概率,B为观测概率(行数表示状态集合中的元的个数,列数表示观测集中的元的个数),Pi为初始概率;
    %       P为1*2阶矩阵,存放所求概率P(it = qi,O|lambda)中it和qi的角标t和i,即P=[t,i]
    %       【!!注意:初始概率Pi、观测序列O以及矩阵P均须为列矩阵】
    % 输出:p1:观测序列概率P(O|lambda)
    %       p2:所求概率P(it = qi|O,lambda)
    %       
    % 示例:(李航《统计学习方法》P189习题10.2)
    % 输入:
    % A1 =
    %     0.5000    0.1000    0.4000
    %     0.3000    0.5000    0.2000
    %     0.2000    0.2000    0.6000
    % B1 =
    %     0.5000    0.5000
    %     0.4000    0.6000
    %     0.7000    0.3000
    % Pi =
    %     0.2000
    %     0.3000
    %     0.5000
    % O3 =
    %      1
    %      2
    %      1
    %      1
    %      2
    %      1
    %      2
    %      2   
    % P =
    %      4
    %      3
    % 输出
    % [a7,b7] = ForwardBackwardAlgo(A1,B1,Pi,O3,P)
    % a7 =
    %     0.0035
    % b7 =
    %     0.5370
    
    P1 = zeros();
    A_size = size(A);
    O_size = size(O);
    N = A_size(1,1);
    M = A_size(1,2);
    K = O_size(1,1);
    P2 = zeros(N,K);
    
    % 调用函数前向后向算法ForwardBackwardAlgo_1,计算得到alpha矩阵P1,beta矩阵P2观测序列O的概率p1
    [P1,P2,p1] = ForwardBackwardAlgo(A,B,Pi,O);
    % 计算所求值
    p2 = P1(P(2,1),P(1,1)) * P2(P(2,1),P(1,1)) / p1;


    
    

    下一篇介绍参数学习的Baum-Welch算法程序。


    展开全文
  • HMM——后向算法

    千次阅读 2015-09-19 20:29:14
    后向算法或者Baum-Welch,不太好理解

    1. 前言

    解决HMM的第二个问题:学习问题, 已知观测序列,需要估计模型参数,使得在该模型下观测序列 P(观测序列 | 模型参数)最大,用的是极大似然估计方法估计参数。

    根据已知观测序列和对应的状态序列,或者说只有观测序列,将学习过程分为监督和无监督学习方法

    主要参考《李航统计学习》、《PRML》

    2. 监督学习方法

    给定了s个长度相同的观测序列和对应的状态序列(相当于有s个样本,所有样本长度一样)


    然后我们需要做的就是统计三种频率:

    ① 在样本中,从t 时刻的各状态转移到 t+1时刻的各状态的频率,比如第一个状态转移到第二个状态共有3次,第2个状态转移到第三个状态共有10次,等。。。。。

    据此能够推导出状态转移概率


    ② 在样本中,每对(某个状态j,某个观测k)出现的频率,就是状态为j 观测为k的概率,即混淆矩阵


    ③在样本中,统计s个样本中初始状态为 的频率就是初始状态概率πi

    缺点就是:监督学习需要人工标注训练数据,代价高

    3.前向-后向算法

    3.1 目标

    其它称呼有:Baum-Welch算法

    主要针对只有观测序列没有对应的状态序列的情况

    这一部分在《统计学习方法》中推导的非常好,主要利用的是拉格朗日乘子法求解

    已知:训练数据是S个长度为T的观测序列,没有对应的状态序列

    求解:学习隐马尔科夫的参数,包括:转移矩阵、混淆矩阵、初始概率

    思路:

    因为HMM中引入了隐状态,所以设隐状态序列为I,那么HMM就可以当做一个具有隐变量的概率模型:


    其实这个式子就有点像一种边缘概率:


    只不过将这个概率加了一个条件,是在HMM的模型参数下计算的,就变成了条件概率。

    求解的时候利用E-M算法求解即可(EM中,E代表expectation,是求期望;M代表的是maximization,求极大;合起来EM算法就被称为期望值最大化算法)

    3.2 EM步骤简述

    摘自《统计学习方法》

    输入:观测变量数据Y,隐变量数据Z,联合分布 P(Y, Z | θ),条件分布 P( Z | Y , θ)

    输出:模型参数 θ

    步骤:

    ① 选择参数初值,开始迭代

    ② E步:记为第 i 次迭代参数θ的估计值,在第 i+1 次迭代E步,计算


    第二个等式的第二项是给定观测数据Y和当前的估计参数下隐变量数据Z的条件概率分布

    ③ M步:求使得极大化的θ,确定第 i+1 次迭代的参数的估计值


    ④ 重复第②和③步,直到收敛

    3.3求解HMM模型参数

    (1) 确定完全数据的对数似然函数

    观测数据:

    隐藏数据:

    完全数据:

    完全数据的对数似然函数就是

    ②EM算法之E:求Q函数


    式子中是HMM模型参数的当前估计值,λ 是要极大化的HMM模型参数

    对于前面一半,根据概率有向图的联合概率分布,我们知道



    两式相乘就可以得到:


    根据P(O,I | λ)可以将 Q 函数可以改写为:


    式中的求和是对所有训练数据的序列长度T进行的

    ③ EM算法之M:极大化Q函数求解模型参数π、A、B

    观察E步骤的式子发现三个参数刚好分别在三项中,所以单独对每一项求解就行了

    第一步先求π:

    注意,π只与初始状态有关,第一项可以写成


    意思就是在模型参数已知的条件下,初始时候的各种状态以及对应的初始观测的概率的和

    限制条件就是对于某种观测,初始的所有状态,其概率和为1,例如,第一天观测为晴天时候,海藻的干燥、湿润、潮湿三个状态概率和为1


    那么就可以根据拉格朗日乘法计算了,设


    那么令其偏导数等于零


    对 i 求和得到


    再带回偏导为0的式子中得到


    第二步求转移矩阵A

    将第二项改写为


    找到约束条件为


    意思就是上一个隐状态到当前所有隐状态的转移概率和为1,比如今天是晴天,那么到明天得隐状态转移:晴天->多云,晴天->雨天,晴天->晴天的概率和为1

    依旧根据拉格朗日乘子法得到


    第三步求混淆矩阵

    将第三项改写为


    找到约束条件为


    也就是说一个隐状态对应的所有观测概率和为1,比如天气为晴天的时候,对应的海藻干燥、湿润、潮湿的概率和为1

    但是有一个需要注意的是只有当观测状态为当前所求导的状态时候,的偏导数才不为0,其实也就相当于的时候才是偏导不为0,书中用表示,最终偏导以后求得:


    3.4 Baum-Welch算法

    该求得都求了,那么具体的HMM模型参数估计算法就是:

    输入:观测数据

    输出:HMM的模型参数

    (1) 初始化:

    对n=0,选取得到模型

    (2) 递推,对n=1,2,...

    分别计算上面的三个偏导

    (3) 计算到最后一次迭代就得到最终结果了


    后续分析一下HMM的代码再另行添加

    展开全文
  • HMM基础-HMM训练-后向算法

    千次阅读 2017-03-03 19:07:30
    HMM基础-HMM训练-后向算法
  • 维特比算法(Viterbi Algorithm)   找到可能性最大的隐藏序列 通常我们都有一个特定的HMM,然后根据一个可观察序列去找到最可能生成这个可观察序列的隐藏序列。   1.穷举搜索 我们可以在下图中看到每个状态和...
  • HMM——算法后向算法

    万次阅读 多人点赞 2015-09-19 19:27:00
    算法后向算法主要还是针对HMM三大问题之一的评估问题的计算,即给定模型参数,计算观察序列的概率。文章不介绍过多公式,主要看两个例子 复习一下HMM的三大要素(以海藻(可观测)和天气(隐状态)为例): ...
  • 后向最大匹配算法2.1 后向最大匹配算法的原理3. 双向最大匹配算法3.1 双向最大匹配算法的原理 1. 向最大匹配算法 1.1 向最大匹配算法的原理 首先,我们分词的目的是将一段中文分成若干个词语,向最大匹配就是...
  • HMM之前向后向算法

    千次阅读 2016-11-10 10:40:28
    注:本文中所有公式和思路来自于邹博先生...在说后向算法之前我们需要先讲一下概率计算的暴力求解是怎么做的(不会白讲的,后边会用到) 暴力求解 按照概率公式,列举所有可能的长度为T的状态序列I = {i1
  • 向-后向算法(Forward-backward algorithm)

    万次阅读 2015-11-30 11:31:03
     与HMM模型相关的“有用”的问题是评估(前向算法)和解码(维特比算法)——它们一个被用来测量一个模型的相对适用性,另一个被用来推测模型隐藏的部分在做什么(“到底发生了”什么)。可以看出它们都依赖于隐...
  • 面试之排序算法

    千人学习 2019-12-24 15:54:46
    排序算法是我们面试被问到最多的基础算法,本课程详细介绍了七种排序算法,包括插入排序、选择排序、冒泡排序、谢尔排序、快速排序、堆积排序和二路并归排序。每种算法都详细介绍了核心思想、详细步骤、时间复杂度和...
  • 经典蝙蝠算法MATLAB实现

    万次阅读 多人点赞 2019-02-24 21:19:42
    为什么会有这么多基于群智能的算法,蚁群、粒子群、鱼群、烟花、炮竹、猪群、牛群、马群、羊群、猴群、鸡群。。。算法。?????? 黑人问号.jpg 蝙蝠算法( BA) 是 Yang 教授于 2010 年基于群体智能提出的启发式...
  • 算法基础入门:90分钟搞定动态规划

    千人学习 2019-12-29 10:11:22
    为什么人人都要学算法? 程序员对算法通常怀有复杂情感,算法很重要是共识,但是否每个程序员都必须学算法是主要的分歧点。很多人觉得像人工智能、数据搜索与挖掘这样高薪的工作才用得上算法,觉得算法深不可测。...
  • 先看看前向传播算法(Forward propagation)与反向传播算法(Back propagation)。1.前向传播如图所示,这里讲得已经很清楚了,前向传播的思想比较简单。 举个例子,假设上一层结点i,j,k,…等一些结点与本层的结点w有...
  • 遗传算法原理及算法实例

    万次阅读 多人点赞 2017-11-26 09:42:19
    遗传算法原理解析 遗传算法(GA)是一种元启发式自然选择的过程,属于进化算法(EA)大类。遗传算法通常是利用生物启发算子,如变异、交叉和选择来生成高...这样进化N代就很有可能会进化出适应度函数值很高的个体。
  • 详解遗传算法(含MATLAB代码)

    万次阅读 多人点赞 2019-05-29 11:30:47
    一、遗传算法概述 二、遗传算法的特点和应用 三、遗传算法的基本流程及实现技术 3.1 遗传算法的基本流程 3.2 遗传算法的实现技术 1.编码 2.适应度函数 3.选择算子 4.交叉算子 5.变异算子 6.运行参数 四、...
  • 数据结构与算法中的经典算法

    万次阅读 多人点赞 2018-07-19 21:47:12
    数据结构与算法之经典算法 常见数据结构与算法整理总结(上) 常见数据结构与算法整理总结(下) 二、针对性参考 1) 排序 数据结构与算法之经典排序 2)二叉树 数据结构与算法之二叉树+遍历+哈夫曼树 ...
  • 深度学习视频教程,包括经典算法与具体案例实战,该系列教程旨在帮助同学们掌握深度学习基础知识点,对复杂的神经网络模型进行通俗解读,逐步迈向深度学习两大核心模型-卷积与递归神经网络。使用当下主流深度学习...
  • Java经典算法讲解

    万人学习 2015-05-01 04:13:33
    在面试中,算法题目是必须的,通过算法能够看出一个程序员的编程思维,考察对复杂问题的设计与分析能力,对问题的严谨性都能够体现出来。一个算法的好坏,直接影响一个方法调用的性能,进而影响软件的整体性能。算法...
  • 目录:一、简介二、二位式控制算法三、位置式PID算法1. P算法2. I 算法3. D算法四、增量式PID算法五、几种增量式PID算法的变形 一、简介 将偏差的 比例(Proportion)、积分(Integral) 和 微分(Differential) ...
  • 1. 前向传播算法 所谓的前向传播算法就是:将上一层的输出作为下一层的输入,并计算下一层的输出,一直到运算到输出层为止。 从上面可以看出,使用代数法一个个的表示输出比较复杂,而如果使用矩阵法则比较的简洁...
  • java数据结构算法

    千人学习 2019-11-22 10:12:46
    稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序...
  • RRT路径规划算法

    万次阅读 多人点赞 2019-08-29 21:43:42
    RRT路径规划算法地图RRT算法原理...基本思想是以产生随机点的方式通过一个步长目标点搜索前进,有效躲避障碍物,避免路径陷入局部极小值,收敛速度快。本文通过matlab实现RRT算法,解决二维平面的路径规划问题。...
  • 人工智能之机器学习算法的介绍

    千人学习 2017-02-28 17:24:05
    机器学习算法入门教程,主要介绍人工智能机器学习常见算法,包括决策树、基于概率论的分类方法:朴素贝叶斯、Logistic回归、支持向量机、第利用AdaBoost元算法提高分类性能。
  • 遗传算法(二)改进:自适应、遗传退火算法

    万次阅读 多人点赞 2017-08-25 13:51:31
    笔记(二) 遗传算法的优化改进 自适应遗传算法and模拟退火遗传算法
  • 使用java语言来实现数据结构中涉及到的算法,并针对每个算法搭配习题进行实现。
  • NSGA2算法中文详解与MATLAB实现整理

    万次阅读 多人点赞 2019-03-07 20:55:25
    NSGA2算法 NSGA-II多目标遗传算法概述 http://www.omegaxyz.com/2017/04/14/nsga-iiintro/ NSGA2算法MATLAB实现(能够自定义优化函数) http://www.omegaxyz.com/2018/01/22/new_nsga2/ NSGA2算法特征选择...
  • 数据结构和算法视频教程

    万人学习 2015-01-29 08:45:17
    数据结构、算法视频培训课程,该教程主要是介绍在游戏开发中经常使用的数据结构,例如数组,链表,栈,队列,二叉树,递归等重要知识点讲解以及将它们里灵活的运用到算法里面。
  • 数据结构与算法书籍推荐

    万次阅读 多人点赞 2019-03-16 18:49:31
    学习数据结构与算法,还是很有必要看几本相关的书籍,但根据不同基础的人,合适看的书也不一样,因此,针对不同层次、不同语言的人,推荐几本市面上口碑不错的书。 1. 入门级 针对刚入门的同学,建议不要急着去看...
  • 目前推荐系统研宄的主要趋势是从单一的、独立的推荐系统算法逐渐组合多种推荐算法形成混合式的综合推荐算法方向发展,越来越多的结合用户标签数据、社交网络数据、上下文信息、地理位置信息。群体推荐也成为一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,856,835
精华内容 1,942,734
关键字:

前向后向算法