質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1839閲覧

pymc3でベイズ推定

color_8

総合スコア20

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/01/31 04:02

編集2020/01/31 06:27

映画サイトのレビュー(星マークの0〜5)の妥当性をベイズ推論で評価しようと考えてます。

取り込んだデータは以下のような形です。
イメージ説明

review_rate →これがレビュー(0〜5で投稿されたものの平均)
review_num  →レビューの投稿数

これに対して、以下の通りモデルの設計をしました。

python

1##------------------------------- 2# モデルの設計 3##------------------------------- 4 5# レビュー評価の事後分布の軌跡(trace)を取得する 6# レビューの評価は0.0〜5.0のものを、0~1の範囲の一様分布で扱うため、引数で与えられた値に対して調整を加える 7# name は確率変数名 8def get_posterior_review_rate_trace(review_rate, review_num): 9 _review_rate = pm.Uniform(name='review_rate', lower=0, upper=1) 10 review_rate_0_to_1 = (review_rate - 1) * 0.25 11 print('0~1の範囲でのレビュー評価 : ', review_rate_0_to_1) 12 13 # 連続確率変数のためBeta分布を使用 14 theta = pm.Beta(name='theta', alpha=1, beta=1) 15 observations = pm.Binomial( 16 # nはレビュー数、valueはレビュー評価にレビュー数を乗算した値を指定 17 name='obs', n=review_num, p=theta, 18 value=review_rate_0_to_1 * review_num, 19 observed=True) 20 map_ = pm.MAP([theta, observations]).fit() 21 model = pm.Model([theta, observations]) 22 mcmc = pm.MCMC(model) 23 # MCMCの探索を。第一引数は探索回数。第二引数のバーンインは最初の収束していない一定数は好ましくないので破棄して5000件目~20000件目のサンプリング結果を取得 24 mcmc.sample(20000, 5000) 25 # 探索結果のthetaの確率変数の軌跡を取得 26 trace = mcmc.trace('theta') 27 return trace

次に、モデルの妥当性を評価するため、以下の処理を実行しました。

python

1##------------------------------- 2# モデルの妥当性を確認 3##------------------------------- 4import pymc3 as pm 5from pymc3 import plots as mcplot 6 7 8# レビュー評価4.5に対して、取得した軌跡(trace)を引数に渡して事後分布の確認 9trace_of_review_num_2 = get_posterior_review_rate_trace( 10 review_rate=4.5, review_num=2)

事後分布を確認するつもりなのですが、
ここで、以下のエラーが発生してしまいます。

TypeError: No model on context stack, which is needed to instantiate distributions. Add variable inside a 'with model:' block, or use the '.dist' syntax for a standalone distribution.

上記を解消するためのコードを教えていただけませんでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

別スレッドで変更して質問しなおしました。

投稿2020/01/31 06:32

color_8

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問