Report
In this project we first creat a HMM class, the method as fllow
class hmm
{
public:
int M;// 观察值得个数; O={0,2,...,M-1}
int N;// 状态的个数; q={0,2,...,N-1}
vector<vector<double> > A;
// A[0..N-1][0..N-1]. a[i][j] 是从 t 时刻的状态 i 转移到 t+1 时刻的状态 j 的转移概率
vector<vector<double> > B;
// B[0..N-1][0..M-1]. b[j][k] 是在状态 j 观察到观察值 k 的概率
vector<double> pi;
// pi[0..N-1] pi[i] 是进入 Markov 链的状态分布
hmm(int m,int n);
int trainhmm(char* filePath,map<string,int> &words,map<string,int> &tags);
// 训练 Markov 模型参数 A,B,pi
void printhmm();
// 打印训练出的概率矩阵
void Viterbi(int T,vector<int> &O,vector<int> &q, double *pprob,vector< vector<double> >
delta,vector< vector<int> > psi);
// 调用 Viterbi 算法
int testhmm(char* filePath,char* outFilePath,map<string,int> &words,map<string,int>
&tags);
// 测试实验数据
virtual ~hmm();
};
评论0