hmmlearn這個庫有三種模型,分別是Gaussian,Multinomial和GMMHMM。這三種模型對應(yīng)的就是三種emission matrix(即混淆矩陣,也就是隱狀態(tài)到觀察態(tài)的概率)。Gaussian就是說混淆矩陣是一個高斯分布,即觀察態(tài)是連續(xù)的。Multinomiual就是說混淆矩陣事一個Multibimiual distribution,即觀察態(tài)勢離散的。GMMHMM則是說混淆矩陣是遵循gaussinan mixture 分布,也是連續(xù)的。

創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計、成都網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元上猶做網(wǎng)站,已為上家服務(wù),為上猶各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575
題主問如何把混淆矩陣輸入到模型里面。首先你要確定你的混淆矩陣的類型。對于Gaussian類型,就是把你希望的 mean和variance值放到模型里面。我就直接把文檔里面的例子搬過來,例子里是建立了一個高斯分布的隱馬爾科夫模型。
import numpy as np
from hmmlearn import hmm
#一個隱馬爾科夫模型由(p向量,狀態(tài)轉(zhuǎn)移矩陣,混淆矩陣)來定義。
startprob = np.array([0.6, 0.3, 0.1])
# 定義初始狀態(tài)的概率
transmat = np.array([[0.7, 0.2, 0.1], [0.3, 0.5, 0.2], [0.3, 0.3, 0.4]])#定義轉(zhuǎn)移矩陣的概率
means = np.array([[0.0, 0.0], [3.0, -3.0], [5.0, 10.0]])
#定義混淆矩陣的均值
covars = np.tile(np.identity(2), (3, 1, 1))# 定義混淆矩陣的方差
model = hmm.GaussianHMM(3, "full", startprob, transmat)# 定義一個混淆矩陣為高斯分布的隱馬爾科夫模型。 這里‘full’的意思就是說你輸入的方差矩陣每個元素都給出了,不是一個只是對角線上的元素為0的矩陣
model.means_ = means
model.covars_ = covars#把你希望的均值方差輸入你定義的模型里面,到此你就把混淆矩陣輸入進模型了
X, Z = model.sample(100)
對于Multinomial 和 GMM,我還沒用,不過Multinomial應(yīng)該是需要你自己手動輸入隱狀態(tài)到觀察態(tài)的概率的,而GMM應(yīng)該是和Gaussian類型類似,只是需要多輸入一個權(quán)重因子。
對于第二個問題,covariance_type意思是你的混淆矩陣的covariance matrix是什么類型,比如若只是對角線上的元素不為0,則把covariance_type設(shè)為‘diag’。
【常見的內(nèi)置函數(shù)】
1、enumerate(iterable,start=0)
是python的內(nèi)置函數(shù),是枚舉、列舉的意思,對于一個可迭代的(iterable)/可遍歷的對象(如列表、字符串),enumerate將其組成一個索引序列,利用它可以同時獲得索引和值。
2、zip(*iterables,strict=False)
用于將可迭代的對象作為參數(shù),將對象中對應(yīng)的元素打包成一個個元組,然后返回由這些元組組成的列表。如果各個迭代器的元素個數(shù)不一致,則返回列表長度與最短的對象相同,利用*號操作符,可以將元組解壓為列表。
3、filter(function,iterable)
filter是將一個序列進行過濾,返回迭代器的對象,去除不滿足條件的序列。
4、isinstance(object,classinfo)
是用來判斷某一個變量或者是對象是不是屬于某種類型的一個函數(shù),如果參數(shù)object是classinfo的實例,或者object是classinfo類的子類的一個實例,
返回True。如果object不是一個給定類型的的對象, 則返回結(jié)果總是False
5、eval(expression[,globals[,locals]])
用來將字符串str當(dāng)成有效的表達式來求值并返回計算結(jié)果,表達式解析參數(shù)expression并作為Python表達式進行求值(從技術(shù)上說是一個條件列表),采用globals和locals字典作為全局和局部命名空間。
【常用的句式】
1、format字符串格式化
format把字符串當(dāng)成一個模板,通過傳入的參數(shù)進行格式化,非常實用且強大。
2、連接字符串
常使用+連接兩個字符串。
3、if...else條件語句
Python條件語句是通過一條或多條語句的執(zhí)行結(jié)果(True或者False)來決定執(zhí)行的代碼塊。其中if...else語句用來執(zhí)行需要判斷的情形。
4、for...in、while循環(huán)語句
循環(huán)語句就是遍歷一個序列,循環(huán)去執(zhí)行某個操作,Python中的循環(huán)語句有for和while。
5、import導(dǎo)入其他腳本的功能
有時需要使用另一個python文件中的腳本,這其實很簡單,就像使用import關(guān)鍵字導(dǎo)入任何模塊一樣。
您好,Python內(nèi)置的sum函數(shù)可以用來按行求和。sum函數(shù)可以接受一個可迭代對象,并返回這個可迭代對象中所有元素的總和。因此,如果要按行求和,可以使用sum函數(shù),并將每一行作為一個可迭代對象傳入sum函數(shù),就可以按行求和了。例如,假設(shè)有一個二維數(shù)組A,其中每一行都是一個可迭代對象,那么可以使用sum函數(shù)按行求和,如下所示:
sums = [sum(row) for row in A]
這樣,sums就是一個列表,其中每一個元素都是A中每一行的總和。
另外,sum函數(shù)還支持一個可選參數(shù)start,用于指定sum函數(shù)的初始值,默認值為0。例如,如果要求每一行的總和加上一個常數(shù)c,那么可以使用sum函數(shù),如下所示:
sums = [sum(row, c) for row in A]
這樣,sums就是一個列表,其中每一個元素都是A中每一行的總和加上常數(shù)c。
總之,Python內(nèi)置的sum函數(shù)可以用來按行求和,可以接受一個可迭代對象,并返回這個可迭代對象中所有元素的總和,還支持一個可選參數(shù)start,用于指定sum函數(shù)的初始值,默認值為0。
1、高階函數(shù)
變量可以指向函數(shù),函數(shù)的參數(shù)可以接收變量,那么函數(shù)可以接收另一個函數(shù)作為參數(shù),這種函數(shù)稱為高階函數(shù)。
(1)把函數(shù)作為實參
(2)把函數(shù)作為返回值
2、系統(tǒng)的內(nèi)置高階函數(shù)
(1)map函數(shù):接收兩個參數(shù),一個是函數(shù),一個是序列,map將傳入的函數(shù)依次作用到序列的每個元素,并且把結(jié)果作為新的列表返回
(2)reduce函數(shù):把一個函數(shù)作用到一個序列上,這個函數(shù)必須接收兩個參數(shù),reduce把結(jié)果和序列的下一個元素做累積計算
(3)filter函數(shù):也接收一個函數(shù)和一個序列,和map函數(shù)不同的是,filter函數(shù)把傳入的函數(shù)依次作用于每個元素,然后返回返回值是True的元素
(4)sorted函數(shù):排序函數(shù)
把用戶名按照首字母不區(qū)分大小寫排序
(5)sorted()函數(shù)按照關(guān)鍵字排序
關(guān)鍵字:商品個數(shù)
(6)sorted()函數(shù)按照關(guān)鍵字排序,用鍵值來查找
(7)lambda匿名函數(shù):有時候傳參數(shù)時不需要顯示自定義的函數(shù),直接傳入匿名函數(shù)更方便;冒號前面的x,y表示函數(shù)參數(shù),匿名函數(shù)不需要擔(dān)心函數(shù)名的沖突,匿名函數(shù)也是一個函數(shù)對象,可以把匿名函數(shù)賦值給一個變量,再利用變量來調(diào)用函數(shù),匿名函數(shù)也可以作為返回值返回
3、高階函數(shù)的應(yīng)用:
(1)sorted函數(shù):
(2)sorted函數(shù)默認是從小到大排序
4、裝飾器
裝飾器就是用來裝飾函數(shù)的:想要增加原有函數(shù)的功能,但是不希望修改原有函數(shù)的定義,在代碼運行期間動態(tài)增加功能的方式
(1)此裝飾器的功能:計算函數(shù)的運行時間
import functools
@functools.wraps(f)? ?##保留原有函數(shù)的屬性
運行結(jié)果:
(2)此裝飾器的功能:用戶登錄認證
運行結(jié)果:
(3)此裝飾器的功能:認證用戶的同時,顯示用戶的轉(zhuǎn)賬金額
import inspect
inspect.getcallargs()將傳的參數(shù)封裝為一個字典,字典的key值是形式參數(shù),value值是實參
(4)此裝飾器的功能:確保收到的每個參數(shù)都是整數(shù),是整數(shù)就求和,否則拋出錯誤
(5)此裝飾器的功能:給裝飾器傳參數(shù),是整數(shù)和浮點數(shù)就求和
python學(xué)習(xí)網(wǎng),大量的免費python視頻教程,歡迎在線學(xué)習(xí)!
hmmlearn
隱式馬爾科夫模型Hidden Markov Models(HMMs) 是一種通用的概率模型。一個可觀測的變量X的序列被一個內(nèi)部的隱藏狀態(tài)Z所生成。其中,隱藏狀態(tài)Z無法被直接觀測。在隱藏狀態(tài)之間的轉(zhuǎn)移被假設(shè)是通過 馬爾科夫鏈(Markov chain) 的形式。
模型可以表示為 起始概率向量 和轉(zhuǎn)移概率矩陣 . 一個觀測量生成的概率可以是關(guān)于 的任意分布, 基于當(dāng)前的隱藏狀態(tài)。
HMMs的3個基本問題:
hmmlearn 是Python支持HMMs的包。原來是sklearn的一部分,后來由于接口不一致分成單獨的包了。不過使用起來和sklearn的其他模型類似。
構(gòu)造HMM model:
初始化的參數(shù)主要有 n_components , covariance_type , n_iter 。每個參數(shù)的作用我還沒有研究。
通過 fit 方法。
輸入是一個矩陣,包含拼接的觀察序列concatenated sequences of observation (也就是samples),和序列的長度。
EM算法是背后擬合模型的算法。基于梯度優(yōu)化的方法。通常會卡到一個局部極優(yōu)值上。通常用戶需要用不同的初始化跑多次 fit ,然后選擇分數(shù)最高的模型。
分數(shù)通過 score 方法計算。
推導(dǎo)出的最優(yōu)的隱藏狀態(tài)可以調(diào)用 predict 方法獲得。 predict 方法可以指定解碼器算法。當(dāng)前支持的有 viterbi (Vierbi algorithm)和 map (posteriori estimation)。
文章標(biāo)題:python中hmm函數(shù) python h
鏈接URL:http://www.yijiale78.com/article20/docjdjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、App設(shè)計、App開發(fā)、域名注冊、網(wǎng)站設(shè)計、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)