2017-09-12 1 views
1

私はMixtureからPyMC3までの2つのベータディストリビューションの混合を使ってデータをフィットしようとしています。コードは次のとおりです。PyMC3のBetaディストリビューションを正しく定義する方法

model=pm.Model() 
with model: 
    alpha1=pm.Uniform("alpha1",lower=0,upper=20) 
    beta1=pm.Uniform("beta1",lower=0,upper=20) 
    alpha2=pm.Uniform("alpha2",lower=0,upper=20) 
    beta2=pm.Uniform("beta2",lower=0,upper=20) 
    w=pm.Uniform("w",lower=0,upper=1) 
    b1=pm.Beta("B1",alpha=alpha1,beta=beta1) 
    b2=pm.Beta("B2",alpha=alpha2,beta=beta2) 
    mix=pm.Mixture("mix",w=[1.0,w],comp_dists=[b1,b2]) 

このコードを実行すると、次のエラーが発生します。AttributeError: 'list' object has no attribute 'mean'。助言がありますか?

答えて

1

PyMC3には、有用な例を含むpymc3.testsモジュールが付属しています。単語「混合物」のために、そのディレクトリを検索することにより、私はthis exampleに出くわしました:classmethod distが呼び出されること

Mixture('x_obs', w, 
     [Normal.dist(mu[0], tau=tau[0]), Normal.dist(mu[1], tau=tau[1])], 
     observed=self.norm_x) 

は注意してください。

import pymc3 as pm 

model = pm.Model() 
with model: 
    alpha1 = pm.Uniform("alpha1", lower=0, upper=20) 
    beta1 = pm.Uniform("beta1", lower=0, upper=20) 
    alpha2 = pm.Uniform("alpha2", lower=0, upper=20) 
    beta2 = pm.Uniform("beta2", lower=0, upper=20) 
    w = pm.Uniform("w", lower=0, upper=1) 
    b1 = pm.Beta.dist(alpha=alpha1, beta=beta1) 
    b2 = pm.Beta.dist(alpha=alpha2, beta=beta2) 
    mix = pm.Mixture("mix", w=[1.0, w], comp_dists=[b1, b2]) 
:グーグルで削ぎ落とした分布がここで必要とされるものですが、動作しているようですなぜ私は完全には明らかではないよ、この向こう

... each Distribution has a dist class method that returns a stripped-down distribution object that can be used outside of a PyMC model.

を説明しているこのdoc pageにつながる「pymc3のdistがクラスメソッド」

distクラスメソッドを使用する場合、名前文字列は省略されます。

関連する問題