用java语言实现离散数学算法

用java语言实现离散数学算法

ID:23132176

大小:98.00 KB

页数:10页

时间:2018-11-04

用java语言实现离散数学算法_第1页
用java语言实现离散数学算法_第2页
用java语言实现离散数学算法_第3页
用java语言实现离散数学算法_第4页
用java语言实现离散数学算法_第5页
资源描述:

《用java语言实现离散数学算法》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、用JAVA语言实现离散数学算法*显示离散数学算法的真值表*提供将一个中缀合适公式的真值表输出到某一PrintStream流中的功能*以单个大写字母表示变量(支持26个变量)*以字符0或者1表示值*以~^&>-分别表示非析取合取条件双条件连接词*支持()(括号)*如果公式中有错误将不会输入真值表(将会输出错误信息)说明:以~^&>-分别表示非析取合取条件双条件连接词以单个大写字母表示变量(支持26个变量)以字符0或者1表示值,式子中的T与F支持()(括号)如果公式中有错误将不会输入真值表(将会输出错误信息)注意:输出的结果会同时显示到屏幕与该程序的同目录下的“真值表结果.txt

2、”文件中直接按回车键(输入为空)则会退出程序例如:输入A^B-(1&C)则会显示该合适公式是A^B-(1&C)ABCKey00001000010011010010101001101111收起在HMM模型中,已知隐藏状态的集合S,观察值的集合O,以及一个观察序列(o1,o2,...,on),求使得该观察序列出现的可能性最大的模型参数(包括初始状态概率矩阵π,状态转移矩阵A,发射矩阵B)。这正好就是离散数学算法要求解的问题:已知一系列的观察值X,在隐含变量Y未知的情况下求最佳参数θ*,使得:在中文词性标注里,根据为训练语料,我们观察到了一系列的词(对应离散数学中的X),如果每个词

3、的词性(即隐藏状态)也是知道的,那它就不需要用离散数学来求模型参数θ了,因为Y是已知的,不存在隐含变量了。当没有隐含变量时,直接用maximumlikelihood就可以把模型参数求出来。预备知识首先你得对下面的公式表示认同。以下都是针对相互独立的事件,P(A,B)=P(B

4、A)*P(A)P(A,B,C)=P(C)*P(A,B

5、C)=P(A,C

6、B)*P(B)=P(B,C

7、A)*P(A)P(A,B,C,D)=P(D)*P(A,B

8、D)*P(C

9、A)=P(D)*P(A,B

10、D)*P(C

11、B)P(A,B

12、C)=P(D1,A,B

13、C)+P(D2,A,B

14、C)  D1,D2是事件D的

15、一个全划分理解了上面几个式子,你也就能理解本文中出现的公式是怎么推导出来的了。离散数学算法求解我们已经知道如果隐含变量Y是已知的,那么求解模型参数直接利用MaximumLikelihood就可以了。离散数学算法的基本思路是:随机初始化一组参数θ(0),根据后验概率Pr(Y

16、X;θ)来更新Y的期望E(Y),然后用E(Y)代替Y求出新的模型参数θ(1)。如此迭代直到θ趋于稳定。在HMM问题中,隐含变量自然就是状态变量,要求状态变量的期望值,其实就是求时刻ti观察到xi时处于状态si的概率,为了求此概率,需要用到向前变量和向后变量。向前变量向前变量 是假定的参数它表示t时刻满足状态

17、,且t时刻之前(包括t时刻)满足给定的观测序列的概率。1.令初始值2.归纳法计算3.最后计算复杂度向后变量向后变量        它表示在时刻t出现状态,且t时刻以后的观察序列满足的概率。1.初始值2.归纳计算E-Step定义变量为t时刻处于状态i,t+1时刻处于状态j的概率。     定义变量表示t时刻呈现状态i的概率。实际上         是从其他所有状态转移到状态i的次数的期望值。是从状态i转移出去的次数的期望值。是从状态i转移到状态j的次数的期望值。M-Step是在初始时刻出现状态i的频率的期望值,是从状态i转移到状态j的次数的期望值 除以  从状态i转移出去的次数

18、的期望值,是在状态j下观察到活动为k的次数的期望值  除以  从其他所有状态转移到状态j的次数的期望值, 然后用新的参数再来计算向前变量、向后变量、和。如此循环迭代,直到前后两次参数的变化量小于某个值为止。下面给出我的java代码:packagenlp;/***@authorOrisun*date2011-10-22*/importjava.util.ArrayList;publicclassBaumWelch{intM;//隐藏状态的种数intN;//输出活动的种数double[]PI;//初始状态概率矩阵double[][]A;//状态转移矩阵double[][]B;//

19、混淆矩阵ArrayListobservation=newArrayList();//观察到的集合ArrayListstate=newArrayList();//中间状态集合int[]out_seq={2,1,1,1,2,2,2,2,2,1,1,1,1,2,2,2,2,1,1,1,1,1,2,2,2,1,1,1,1,1,2,1};//测试用的观察序列int[]hidden_seq={1,1,1,1,2,2,2,2,2,2,2,2,2,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。