From ebbf32c94b0218dc6b225daee6a9c44488e9f1e3 Mon Sep 17 00:00:00 2001 From: unknown <温德斯> Date: Sun, 16 Jul 2017 22:55:57 +0800 Subject: [PATCH 1/4] add hmm --- hmm/hmm.py | 238 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 hmm/hmm.py diff --git a/hmm/hmm.py b/hmm/hmm.py new file mode 100644 index 0000000..2894f6a --- /dev/null +++ b/hmm/hmm.py @@ -0,0 +1,238 @@ +# encoding=utf8 + +import numpy as np +import csv + +class HMM(object): + def __init__(self,N,M): + self.A = np.zeros((N,N)) # 状态转移概率矩阵 + self.B = np.zeros((N,M)) # 观测概率矩阵 + self.Pi = np.array([1.0/N]*N) # 初始状态概率矩阵 + + self.N = N # 可能的状态数 + self.M = M # 可能的观测数 + + def cal_probality(self, O): + self.T = len(O) + self.O = O + + self.forward() + return sum(self.alpha[self.T-1]) + + def forward(self): + """ + 前向算法 + """ + self.alpha = np.zeros((self.T,self.N)) + + # 公式 10.15 + for i in range(self.N): + self.alpha[0][i] = self.Pi[i]*self.B[i][self.O[0]] + + # 公式10.16 + for t in range(1,self.T): + for i in range(self.N): + sum = 0 + for j in range(self.N): + sum += self.alpha[t-1][j]*self.A[j][i] + self.alpha[t][i] = sum * self.B[i][self.O[t]] + + def backward(self): + """ + 后向算法 + """ + self.beta = np.zeros((self.T,self.N)) + + # 公式10.19 + for i in range(self.N): + self.beta[self.T-1][i] = 1 + + # 公式10.20 + for t in range(self.T-2,-1,-1): + for i in range(self.N): + for j in range(self.N): + self.beta[t][i] += self.A[i][j]*self.B[j][self.O[t+1]]*self.beta[t+1][j] + + def cal_gamma(self, i, t): + """ + 公式 10.24 + """ + numerator = self.alpha[t][i]*self.beta[t][i] + denominator = 0 + + for j in range(self.N): + denominator += self.alpha[t][j]*self.beta[t][j] + + return numerator/denominator + + def cal_ksi(self, i, j, t): + """ + 公式 10.26 + """ + + numerator = self.alpha[t][i]*self.A[i][j]*self.B[j][self.O[t+1]]*self.beta[t+1][j] + denominator = 0 + + for i in range(self.N): + for j in range(self.N): + denominator += self.alpha[t][i]*self.A[i][j]*self.B[j][self.O[t+1]]*self.beta[t+1][j] + + return numerator/denominator + + def init(self): + """ + 随机生成 A,B,Pi + 并保证每行相加等于 1 + """ + import random + for i in range(self.N): + randomlist = [random.randint(0,100) for t in range(self.N)] + Sum = sum(randomlist) + for j in range(self.N): + self.A[i][j] = randomlist[j]/Sum + + for i in range(self.N): + randomlist = [random.randint(0,100) for t in range(self.M)] + Sum = sum(randomlist) + for j in range(self.M): + self.B[i][j] = randomlist[j]/Sum + + def train(self, O, MaxSteps = 100): + self.T = len(O) + self.O = O + + # 初始化 + self.init() + + step = 0 + # 递推 + while step Date: Sun, 16 Jul 2017 23:12:36 +0800 Subject: [PATCH 2/4] add readme hmm --- README.md | 7 +++++-- weibo.png | Bin 0 -> 16605 bytes 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 weibo.png diff --git a/README.md b/README.md index 9495dd7..ceebe06 100644 --- a/README.md +++ b/README.md @@ -55,10 +55,13 @@
纯Python代码:[AdaBoost/adaboost.py](https://github.com/WenDesi/lihang_book_algorithm/blob/master/AdaBoost/adaboost.py)
Python C++代码:[AdaBoost/adaboost_cpp.py](https://github.com/WenDesi/lihang_book_algorithm/blob/master/AdaBoost/adaboost_cpp.py),[AdaBoost/Sign/Sign/sign.h](https://github.com/WenDesi/lihang_book_algorithm/blob/master/AdaBoost/Sign/Sign/sign.h),[AdaBoost/Sign/Sign/sign.cpp](https://github.com/WenDesi/lihang_book_algorithm/blob/master/AdaBoost/Sign/Sign/sign.cpp) -### 第九章 EM算法及其推广 -正在施工中... +### 第十章 EM算法及其推广 +博客:[李航《统计学习方法》第十章——用Python实现隐马尔科夫模型](http://blog.csdn.net/wds2006sdo/article/details/75212599) +
代码:[hmm/hmm.py](https://github.com/WenDesi/lihang_book_algorithm/blob/master/hmm/hmm.py) + ## 额外章节 + ###softmax分类器 博客:[python 实现 softmax分类器(MNIST数据集)](http://blog.csdn.net/wds2006sdo/article/details/53699778)
代码:[softmax/softmax.py](https://github.com/WenDesi/lihang_book_algorithm/blob/master/softmax/softmax.py) diff --git a/weibo.png b/weibo.png new file mode 100644 index 0000000000000000000000000000000000000000..20b252cd340f441c164945fa90c0049c78496de5 GIT binary patch literal 16605 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 OQ&H4Z`1;Z;?Ee7`Kg*f` literal 0 HcmV?d00001 From 61b73cdde25fdfa585084a4801afb253c97a7106 Mon Sep 17 00:00:00 2001 From: wds2006sdo <641614152@qq.com> Date: Sun, 16 Jul 2017 23:17:53 +0800 Subject: [PATCH 3/4] add photo --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index ceebe06..77373ed 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,8 @@ # lihang_book_algorithm - -哇!看到有人star这个项目了 -本来打算把这个项目当成一个备份的 -但既然有人star了,那么就要好好对待啦!!! +被李航老师肯定啦!!开心! +![](https://raw.githubusercontent.com/WenDesi/lihang_book_algorithm/master/weibo.png) ## 简介 我这里不介绍任何机器学习算法的原理,只是将《统计学习方法》中每一章的算法用我自己的方式实现一遍。 @@ -55,7 +53,7 @@
纯Python代码:[AdaBoost/adaboost.py](https://github.com/WenDesi/lihang_book_algorithm/blob/master/AdaBoost/adaboost.py)
Python C++代码:[AdaBoost/adaboost_cpp.py](https://github.com/WenDesi/lihang_book_algorithm/blob/master/AdaBoost/adaboost_cpp.py),[AdaBoost/Sign/Sign/sign.h](https://github.com/WenDesi/lihang_book_algorithm/blob/master/AdaBoost/Sign/Sign/sign.h),[AdaBoost/Sign/Sign/sign.cpp](https://github.com/WenDesi/lihang_book_algorithm/blob/master/AdaBoost/Sign/Sign/sign.cpp) -### 第十章 EM算法及其推广 +### 第十章 隐马尔科夫模型 博客:[李航《统计学习方法》第十章——用Python实现隐马尔科夫模型](http://blog.csdn.net/wds2006sdo/article/details/75212599)
代码:[hmm/hmm.py](https://github.com/WenDesi/lihang_book_algorithm/blob/master/hmm/hmm.py) From 41ae6fa704cc231081dbe8528a297fe6d494a0f0 Mon Sep 17 00:00:00 2001 From: wds2006sdo <641614152@qq.com> Date: Sun, 16 Jul 2017 23:18:43 +0800 Subject: [PATCH 4/4] change line --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 77373ed..22270ef 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ # lihang_book_algorithm 被李航老师肯定啦!!开心! -![](https://raw.githubusercontent.com/WenDesi/lihang_book_algorithm/master/weibo.png) +
![](https://raw.githubusercontent.com/WenDesi/lihang_book_algorithm/master/weibo.png) ## 简介 我这里不介绍任何机器学习算法的原理,只是将《统计学习方法》中每一章的算法用我自己的方式实现一遍。