新聞中心
GMM或2SLS操作問題求助
比如,在微觀層面,如果面板的觀測值是時序相關(guān)的,用GMM估計的動態(tài)面板就是一種最自然的解決辦法;在宏觀研究中,我們經(jīng)常將理論模型推衍出的一階條件作為GMM估計的矩條件(moment conditions),理論因而能夠得到數(shù)據(jù)的檢驗。不過,GMM估計涉及到的矩條件和工具變量的選擇,經(jīng)常讓人頭疼得要命。這篇短文就是討論GMM估計中矩條件選擇的問題。我不是研究計量經(jīng)濟學的,很多最基本的東西都不懂,下面這些觀點大都來自Victor Chernozhukov和Whitney Newey兩位老師,引述的不對的地方,請大伙兒指出來。所謂矩條件,就是一個同時含有隨機變量和待估計參數(shù)的式子,經(jīng)濟理論告訴我們,它的期望等于0。矩條件最常見的形式是:E{工具變量*殘差}=0。GMM估計就是在一個限定的范圍內(nèi)尋找參數(shù),使這個我們在理論上認為正確的等式填入數(shù)據(jù)后盡可能接近于0。按照我的理解,GMM不僅是一種估計方法,還是一個計量經(jīng)濟學有經(jīng)典框架,我們能想到的大多數(shù)經(jīng)典估計方法,OLS、GLS、2SLS、MD、QR、MLE、QMLE等等,都可以寫成GMM的形式。另一個與之匹敵的經(jīng)典框架是極值估計(extreme estimation)。粗略地說,兩者的差別在于:前者是尋找參數(shù),使矩條件盡可能被滿足;后者是尋找參數(shù),最大化或最小化一個目標函數(shù)(求極值)。簡而易見的是,兩種方法在算術(shù)上基本是等價的,因為任何一個極值函數(shù)的一階條件都是矩條件,而GMM中的目標函數(shù)——矩條件經(jīng)驗期望的二次型——本身又是一個極值函數(shù)。但是,兩者在算法上并不等價。老朱在評論林文夫(Fumio Hayashi)教授那本有名的教科書時說,“GMM的概念很優(yōu)美,也可以應用到很多問題上。一般化的概念雖然適用性廣,還是有代價的。”這里的代價,我猜測,就是指GMM經(jīng)常算不出來——由于矩條件本身的特點,GMM的目標函數(shù)經(jīng)常是接近鋸齒狀的(piecewise constant),在這種情況下,GMM會陷在局部最優(yōu)里,達不到全局最優(yōu)。分位數(shù)回歸(quantile regression)就是一個這樣的例子。不過,GMM在很多時候還是有用的,而且算起來特別快,所以還是有討論的必要。首先我們要問,在GMM估計中,矩條件是不是最多越好?在大樣本下,基本上是這樣——矩條件越多,GMM估計的漸近效率就越高。說“基本上”是因為:第一,這些矩條件必須都是成立的;第二,矩條件的數(shù)目相對于樣本數(shù)要趨向于0。如果矩條件數(shù)與樣本數(shù)是等階的,會造成“過度擬合”的問題。形象地說,我們本來要用工具變量來應付內(nèi)生性問題,但是工具變量太多了,以至于幾乎把內(nèi)生變量完全擬合了出來,那么即使工具變量是外生的,也會導致估計量不一致。而在小樣本下,過多的矩條件會造成可怕的高階偏誤,并且矩條件非線性的程度越高,偏誤就越大。要注意的是,這個問題與“弱工具變量問題”并不等價。即使這些工具變量整體上不弱,甚至每個都不弱,過多的矩條件還是會造成嚴重的小樣本偏誤。這里其實涉及到GMM估計的高階偏誤問題,其核心是由GMM目標函數(shù)的“非線性”特征造成的。當矩條件的數(shù)目很多,矩條件本身又是非線性的時候,這個問題就愈加嚴重;但即使沒有“矩條件過多”的問題,GMM仍然存在不可忽視的小樣本偏誤。在實踐中,我們可以用幾種方法來減輕這一問題。第一,檢驗矩條件(或工具變量)是否成立。 “過度識別檢定”(overidentification test,OIT)可以被用檢驗某一組矩條件是否成立,前提是去除待檢驗的矩條件后,剩余的矩條件數(shù)目仍大于等于待估計參數(shù)的維度。第二,選擇“最有效率”的工具變量。給定一個理論上有效的工具變量Zi,我們可以通過簡便的方法找出Zi的某種最優(yōu)的函數(shù)形式f*(Zi),把f*(Zi)放入矩條件會使得估計量的漸近方差比放入其他f(Zi)要小。這么做可以盡可能地利用Zi中的信息,而不必將不同函數(shù)形式的Zi寫成并列的幾個矩條件。第三,在所有成立的矩條件中選擇一組最優(yōu)的矩條件。用任意組合的矩條件進行估計,看其中哪一組矩條件得到的估計量的“經(jīng)驗均方誤”最小。最后,我們還可以用Fuller、HFUL等K-class估計量或LIML、CUE等經(jīng)驗似然估計量來進行估計,然后用Bekker估計量校正其標準誤。這些估計量可以在很大程度上減小偏誤,即使無法完全消除它。
創(chuàng)新互聯(lián)建站專注于鹽池網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供鹽池營銷型網(wǎng)站建設(shè),鹽池網(wǎng)站制作、鹽池網(wǎng)頁設(shè)計、鹽池網(wǎng)站官網(wǎng)定制、微信平臺小程序開發(fā)服務(wù),打造鹽池網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供鹽池網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
Python hmmlearn中的混淆矩陣是怎么表示的
hmmlearn這個庫有三種模型,分別是Gaussian,Multinomial和GMMHMM。這三種模型對應的就是三種emission matrix(即混淆矩陣,也就是隱狀態(tài)到觀察態(tài)的概率)。Gaussian就是說混淆矩陣是一個高斯分布,即觀察態(tài)是連續(xù)的。Multinomiual就是說混淆矩陣事一個Multibimiual distribution,即觀察態(tài)勢離散的。GMMHMM則是說混淆矩陣是遵循gaussinan mixture 分布,也是連續(xù)的。
題主問如何把混淆矩陣輸入到模型里面。首先你要確定你的混淆矩陣的類型。對于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應該是需要你自己手動輸入隱狀態(tài)到觀察態(tài)的概率的,而GMM應該是和Gaussian類型類似,只是需要多輸入一個權(quán)重因子。
對于第二個問題,covariance_type意思是你的混淆矩陣的covariance matrix是什么類型,比如若只是對角線上的元素不為0,則把covariance_type設(shè)為‘diag’。
[譯] 高斯混合模型 --- python教程
本文翻譯自
上一節(jié)中探討的k-means聚類模型簡單易懂,但其簡單性導致其應用中存在實際挑戰(zhàn)。具體而言,k-means的非概率特性及簡單地計算點與類蔟中心的歐式距離來判定歸屬,會導致其在許多真實的場景中性能較差。本節(jié),我們將探討高斯混合模型(GMMs),其可以看成k-means的延伸,更可以看成一個強有力的估計工具,而不僅僅是聚類。
我們將以一個標準的import開始
我們看下k-means的缺陷,思考下如何提高聚類模型。正如上一節(jié)所示,給定簡單,易于分類的數(shù)據(jù),k-means能找到合適的聚類結(jié)果。
舉例而言,假設(shè)我們有些簡單的數(shù)據(jù)點,k-means算法能以某種方式很快地將它們聚類,跟我們?nèi)庋鄯直娴慕Y(jié)果很接近:
從直觀的角度來看,我可能期望聚類分配時,某些點比其他的更確定:舉例而言,中間兩個聚類之間似乎存在非常輕微的重疊,這樣我們可能對這些數(shù)據(jù)點的分配沒有完全的信心。不幸的是,k-means模型沒有聚類分配的概率或不確定性的內(nèi)在度量(盡管可能使用bootstrap 的方式來估計這種不確定性)。為此,我們必須考慮泛化這種模型。
k-means模型的一種理解思路是,它在每個類蔟的中心放置了一個圈(或者,更高維度超球面),其半徑由聚類中最遠的點確定。該半徑充當訓練集中聚類分配的一個硬截斷:任何圈外的數(shù)據(jù)點不被視為該類的成員。我們可以使用以下函數(shù)可視化這個聚類模型:
觀察k-means的一個重要發(fā)現(xiàn),這些聚類模式必須是圓形的。k-means沒有內(nèi)置的方法來計算橢圓形或橢圓形的簇。因此,舉例而言,假設(shè)我們將相同的數(shù)據(jù)點作變換,這種聚類分配方式最終變得混亂:
高斯混合模型(GMM)試圖找到一個多維高斯概率分布的混合,以模擬任何輸入數(shù)據(jù)集。在最簡單的情況下,GMM可用于以與k-means相同的方式聚類。
但因為GMM包含概率模型,因此可以找到聚類分配的概率方式 - 在Scikit-Learn中,通過調(diào)用predict_proba方法實現(xiàn)。它將返回一個大小為[n_samples, n_clusters]的矩陣,用于衡量每個點屬于給定類別的概率:
我們可以可視化這種不確定性,比如每個點的大小與預測的確定性成比例;如下圖,我們可以看到正是群集之間邊界處的點反映了群集分配的不確定性:
本質(zhì)上說,高斯混合模型與k-means非常相似:它使用期望-最大化的方式,定性地執(zhí)行以下操作:
有了這個,我們可以看看四成分的GMM為我們的初始數(shù)據(jù)提供了什么:
同樣,我們可以使用GMM方法來擬合我們的拉伸數(shù)據(jù)集;允許full的協(xié)方差,該模型甚至可以適應非常橢圓形,伸展的聚類模式:
這清楚地表明GMM解決了以前遇到的k-means的兩個主要實際問題。
如果看了之前擬合的細節(jié),你將看到covariance_type選項在每個中都設(shè)置不同。該超參數(shù)控制每個類簇的形狀的自由度;對于任意給定的問題,必須仔細設(shè)置。默認值為covariance_type =“diag”,這意味著可以獨立設(shè)置沿每個維度的類蔟大小,并將得到的橢圓約束為與軸對齊。一個稍微簡單和快速的模型是covariance_type =“spherical”,它約束了類簇的形狀,使得所有維度都相等。盡管它并不完全等效,其產(chǎn)生的聚類將具有與k均值相似的特征。更復雜且計算量更大的模型(特別是隨著維數(shù)的增長)是使用covariance_type =“full”,這允許將每個簇建模為具有任意方向的橢圓。
對于一個類蔟,下圖我們可以看到這三個選項的可視化表示:
盡管GMM通常被歸類為聚類算法,但從根本上說它是一種密度估算算法。也就是說,GMM適合某些數(shù)據(jù)的結(jié)果在技術(shù)上不是聚類模型,而是描述數(shù)據(jù)分布的生成概率模型。
例如,考慮一下Scikit-Learn的make_moons函數(shù)生成的一些數(shù)據(jù):
如果我們嘗試用視為聚類模型的雙成分的GMM模擬數(shù)據(jù),則結(jié)果不是特別有用:
但是如果我們使用更多成分的GMM模型,并忽視聚類的類別,我們會發(fā)現(xiàn)更接近輸入數(shù)據(jù)的擬合:
這里,16個高斯分布的混合不是為了找到分離的數(shù)據(jù)簇,而是為了對輸入數(shù)據(jù)的整體分布進行建模。這是分布的一個生成模型,這意味著GMM為我們提供了生成與我們的輸入類似分布的新隨機數(shù)據(jù)的方法。例如,以下是從這個16分量GMM擬合到我們原始數(shù)據(jù)的400個新點:
GMM非常方便,可以靈活地建模任意多維數(shù)據(jù)分布。
GMM是一種生成模型這一事實為我們提供了一種確定給定數(shù)據(jù)集的最佳組件數(shù)的自然方法。生成模型本質(zhì)上是數(shù)據(jù)集的概率分布,因此我們可以簡單地評估模型下數(shù)據(jù)的可能性,使用交叉驗證來避免過度擬合。校正過度擬合的另一種方法是使用一些分析標準來調(diào)整模型可能性,例如 Akaike information criterion (AIC) 或 Bayesian information criterion (BIC) 。Scikit-Learn的GMM估計器實際上包含計算這兩者的內(nèi)置方法,因此在這種方法上操作非常容易。
讓我們看看在moon數(shù)據(jù)集中,使用AIC和BIC函數(shù)確定GMM組件數(shù)量:
最佳的聚類數(shù)目是使得AIC或BIC最小化的值,具體取決于我們希望使用的近似值。 AIC告訴我們,我們上面選擇的16個組件可能太多了:大約8-12個組件可能是更好的選擇。與此類問題一樣,BIC建議使用更簡單的模型。
注意重點:這個組件數(shù)量的選擇衡量GMM作為密度估算器的效果,而不是它作為聚類算法的效果。我鼓勵您將GMM主要視為密度估算器,并且只有在簡單數(shù)據(jù)集中保證時才將其用于聚類。
我們剛剛看到了一個使用GMM作為數(shù)據(jù)生成模型的簡單示例,以便根據(jù)輸入數(shù)據(jù)定義的分布創(chuàng)建新樣本。在這里,我們將運行這個想法,并從我們以前使用過的標準數(shù)字語料庫中生成新的手寫數(shù)字。
首先,讓我們使用Scikit-Learn的數(shù)據(jù)工具加載數(shù)字數(shù)據(jù):
接下來讓我們繪制前100個,以準確回憶我們正在看的內(nèi)容:
我們有64個維度的近1,800位數(shù)字,我們可以在這些位置上構(gòu)建GMM以產(chǎn)生更多。 GMM可能難以在如此高維空間中收斂,因此我們將從數(shù)據(jù)上的可逆維數(shù)減少算法開始。在這里,我們將使用一個簡單的PCA,要求它保留99%的預測數(shù)據(jù)方差:
結(jié)果是41個維度,減少了近1/3,幾乎沒有信息丟失。根據(jù)這些預測數(shù)據(jù),讓我們使用AIC來計算我們應該使用的GMM組件的數(shù)量:
似乎大約110個components最小化了AIC;我們將使用這個模型。我們迅速將其與數(shù)據(jù)擬合并確保它已收斂合:
現(xiàn)在我們可以使用GMM作為生成模型在這個41維投影空間內(nèi)繪制100個新點的樣本:
最后,我們可以使用PCA對象的逆變換來構(gòu)造新的數(shù)字:
大部分結(jié)果看起來像數(shù)據(jù)集中合理的數(shù)字!
考慮一下我們在這里做了什么:給定一個手寫數(shù)字的樣本,我們已經(jīng)模擬了數(shù)據(jù)的分布,這樣我們就可以從數(shù)據(jù)中生成全新的數(shù)字樣本:這些是“手寫數(shù)字”,不是單獨的出現(xiàn)在原始數(shù)據(jù)集中,而是捕獲混合模型建模的輸入數(shù)據(jù)的一般特征。這種數(shù)字生成模型可以證明作為貝葉斯生成分類器的一個組成部分非常有用,我們將在下一節(jié)中看到。
當前名稱:gmm函數(shù)python python median函數(shù)
網(wǎng)站URL:http://www.ef60e0e.cn/article/doieeso.html