首页 > 代码库 > 大数据之道 HMM系列<二>(成长)

大数据之道 HMM系列<二>(成长)

一:HMM解码问题

(1)编程深处无非就是算法和结构,以及各种架构和版本的管理(如Git管理),因此作为程序员算法这一关是绕不过去的;

(2)关于算法,个人比较崇尚的一本书是《算法导论》和ACM实战系类的算法培训;

(3)对于自然语言处理领域或者部分机械学习领域的算法,HMM模型是非常经典的算法之一,非常适合初学者学习和研究;

(4)HMM模型μ=(A,B,π),的状态是不可见的,我们看到的仅仅是状态表现出来的观察值和状态概率函数。

二:HMM简介(u = {N,M,A,B,pai} ---> u ={A,B,pai} 

(1)模型中的状态数N

(2)每一个状态可以输出的观测值M

(3)状态转移矩阵A={aij},其中aij满足aij = P(qt=sj|qt-1=si) , 并且 关于j的aij求和为1

(4)发射矩阵 B = {bj(k)},即从状态sj观测到符号vk的概率分布矩阵

(5)初始状态概率分布pai

三:HMM的三个基本问题

(1)评估问题:给定一个观察序列O=O1O2...OT,和模型μ=(A,B,π),如何计算观察到的序列O=O1O2...OT的概率,即P(O|u) 

---------> 前向后向算法 ForWard-BackWard Algorithm(前向向量和后向向量,一个从前算,一个从后算)

(2)解码问题:给定一个观察序列O=O1O2...OT,和模型μ=(A,B,π),如何快速有效地选择在一定意义下“最优”的状态序列Q=q1q2...qT,使该状态最好地解释观察序列。

---------> 维特比算法 Viterbi Algorithm

请看 大数据之道 HMM系列<一>

(3)学习问题:给定一个观察序列O=O1O2...OT,如何调参数μ=(A,B,π),使得P(O|M)最大

---------> 前向后向算法 ForWard-BackWard Algorithm(前向向量和后向向量,一个从前算,一个从后算)

四:知识补充(部分转载的)

(1)作为一个优秀的程序员,需要掌握一个文本编辑器/ IDE,然后坚持不懈地掌握这个工具。如果你选择的是 VIM,那就要成为它的主人,让它往东就往东

(2)使用版本控制系统,我建议使用 Git。下面是我喜欢的资源:Pro git——免费的在线电子书,详细讲解了 git 的各个方面。

(3)将重构养成习惯,随着你不断添加更多的功能,代码库也会越来越复杂。为了保持代码库的可管理化,你需要重构。如果你不重构的话,你很快就会进入两难境地——即使是做很小的改动都很困难、bug 没法避免、没有人愿意处理这个凌乱的代码库。重构能让你的工作更加轻松。至于怎么重构代码,我之前的一篇博客:3000行代码可以重构成15行,下面这本好书能教你该怎么做: 《Refactoring: Improving the Design of Existing Code》by Martin Fowler

(4)学习软件架构,根据你上面选择的堆栈,再学习相关的架构。我推荐 Martin Fowler 写的《Patterns of Enterprise Application Architecture》一书

五:心灵鸡汤(部分转载的)

(1)浅析理科生思维和文科生思维 所想到的 ------>

(2)一元思维模式:美就是美,丑就是丑,这两者具有原则性的区别,就好像判断好人和坏人一样,一定是有标准的。他们喜欢制定各种“客观标准”,也相信有一个最好的解决问题的方式,如果自己不知道,就在别人那里。而且,这种思维模式的人喜欢追求“至高”“至美”“至大”的“境界”,会在一个方向上不断追求,直到无法继续为止。
(3)二元思维模式:美和丑是相对立而存在的,互相可以转化。就如同好人和坏人一样,相对立而存在,并在一定条件下相互转化。这种人生活,和性格都将变得比较和谐,容易理解别人一些。这种人更容易成为管理者。
(4)多元思维模式:世间本无美丑善恶,一切取决于人心的思维和判断角度,这种思维模式出神入化,具有极高的灵活性;这就是你们在[老子]

(5)数理逻辑思维是有缺陷的:它只是一种一元思维模式,缺乏灵活性。而且一元思维模式容易走极端,所谓的“钻牛角尖”,“一条道走到黑”的,就是这种人;“立场坚定,观点鲜明”。好处在于专注,专心一志。所以很多工程技术人员都显得比较呆板,生活了无情趣。中国一些退休的优秀工程技术人员,业余生活可以说很悲惨,很多人与子女家庭的关系都不好,非常孤独。但最优秀的科学家如爱因斯坦等不会这样,因为他们的思维方式已经跳出一元,进入多元世界。

只有文科能够提供多元思维方式的教育。如果接受过良好的文科教育,多数人有机会学会二元思维方式,就是所谓的“一分为二”,达到这个境界的人就不会偏激了。 

总之,作为工科出身的我们,我们整天对着machine的程序猿们:建议多读文章,要读好的文章,而不是言情方面的书,多读一些带有逻辑性的文章,会有所帮助的;而且在读故事的文章过程中尽量推测一下下面文章的内容,这对揣摩事物很有帮助.还有就是在读文章时不要急于读懂,好的一篇文章往往是读的边数多理解的就越明白.还有就是多写文章,也有一定的帮助.我一般就是这么学习文学的.所以一般考试答分析和辩论等类型的题往往比别人高的多.文科是属于积累性学习不能急于求成.要慢慢培养.尤其在思考问题这方面.看的多就想的多,想的多了回答的就自然多了.


大数据之道 HMM系列<二>(成长)