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

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

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

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

Q&A

0回答

787閲覧

PyMC→PyMC3への互換について

color_8

総合スコア20

Python 3.x

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

0グッド

0クリップ

投稿2020/02/01 02:09

PyMCで作られたコードを、PyMC3に載せ替える形で
映画サイトのレビュー(星マークの0〜5)の妥当性をベイズ推論で評価しようと考えてます。

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

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

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

python

1##------------------------------- 2# ライブラリのインポート 3##------------------------------- 4import pandas as pd 5import numpy as np 6import matplotlib.pyplot as plt 7import seaborn as sns 8 9##------------------------------- 10# データの取り込み 11 12# review_num:映画作品に対するレビュー数 13# review_rate:映画作品に対する★1.0〜5.0のレビュー評価値の平均 14##------------------------------- 15data = pd.read_csv("movie_review4.csv") 16 17data = data.astype({'review_rate': float, 'review_num': int}) 18 19# x軸にreview_rate、y軸にreview_num 20data.plot(x='review_rate', y='review_num', kind='hist', bins=20) 21 22 23 24##------------------------------- 25# モデルの設計 26##------------------------------- 27 28# レビュー評価の事後分布の軌跡(trace)を取得する 29# レビューの評価は0.0〜5.0のものを、0~1の範囲の一様分布で扱うため、引数で与えられた値に対して調整を加える 30# name は確率変数名 31def get_posterior_review_rate_trace(review_rate, review_num): 32 with pm.Model() as model: 33 _review_rate = pm.Uniform(name='review_rate', lower=0, upper=1) 34 review_rate_0_to_1 = (review_rate - 1) * 0.25 35 print('0~1の範囲でのレビュー評価 : ', review_rate_0_to_1) 36 37 # 連続確率変数のためBeta分布を使用 38 theta = pm.Beta(name='theta', alpha=1, beta=1) 39 observations = pm.Binomial( 40 # nはレビュー数、valueはレビュー評価にレビュー数を乗算した値を指定 41 name='obs', n=review_num, p=theta, 42 value=review_rate_0_to_1 * review_num, 43 observed=True) 44 map_ = pm.MAP([theta, observations]).fit() 45 model2 = pm.Model([theta, observations]) 46 mcmc = pm.MCMC(model2) 47 # MCMCの探索を。第一引数は探索回数。第二引数のバーンインは最初の収束していない一定数は好ましくないので破棄して5000件目~20000件目のサンプリング結果を取得 48 mcmc.sample(20000, 5000) 49 # 探索結果のthetaの確率変数の軌跡を取得 50 trace = mcmc.trace('theta') 51 return trace 52 53##------------------------------- 54# モデルの妥当性を確認 55##------------------------------- 56import pymc3 as pm 57from pymc3 import plots as mcplot 58 59# レビュー評価4.5に対して、取得した軌跡(trace)を引数に渡して事後分布の確認 60trace_of_review_num_2 = get_posterior_review_rate_trace( 61 review_rate=4.5, review_num=2)

しかし、この結果以下のエラーが発生してしまいます。

どうやら、「pm.MAP」と「pm.MCMC」でAttributeErrorが出ているようで、
pymcからpymc3に載せ替えたため、pymc3にはこれらのAttributeはないようです。
この2つの代々手段について、コードレビューをいただける方ご協力よろしくお願いします。

↓エラーコード

AttributeError Traceback (most recent call last)
<ipython-input-8-3c1692da3682> in <module>
1 # レビュー評価4.5に対して、取得した軌跡(trace)を引数に渡して事後分布の確認
2 trace_of_review_num_2 = get_posterior_review_rate_trace(
----> 3 review_rate=4.5, review_num=2)

<ipython-input-6-dd3a44a6b085> in get_posterior_review_rate_trace(review_rate, review_num)
43 name='obs', n=review_num, p=theta,
44 observed=review_rate_0_to_1 * review_num)
---> 45 map_ = pm.MAP([theta, observations]).fit()
46
47 with pm.Model() as model:

AttributeError: module 'pymc3' has no attribute 'MAP'

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問