teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記

2020/02/01 01:42

投稿

meg_
meg_

スコア10980

answer CHANGED
@@ -20,4 +20,46 @@
20
20
  ```
21
21
  「0~1の範囲でのレビュー評価 : 0.875」の表示までは出来ました。他のエラーが出ましたが
22
22
  TypeError: __init__() got an unexpected keyword argument 'value'
23
- そちらの環境では問題なく動くのではないでしょうか?
23
+ そちらの環境では問題なく動くのではないでしょうか?
24
+
25
+ ---
26
+ 【追記】
27
+ pm.Binomial()のところで、observed=review_rate_0_to_1 * review_numに変更し、TypeErrorは解消しました。
28
+ しかし下記コードにて「pm.MAP」と「pm.MCMC」でAttributeErrorが出ます。
29
+ pymc3にはこれらのAttributeはないようです。
30
+ この2つの代々手段について別の質問を立ち上げた方が良いと思います。
31
+ ```Python
32
+ ##-------------------------------
33
+ # モデルの設計
34
+ ##-------------------------------
35
+
36
+ # レビュー評価の事後分布の軌跡(trace)を取得する
37
+ # レビューの評価は0.0〜5.0のものを、0~1の範囲の一様分布で扱うため、引数で与えられた値に対して調整を加える
38
+ # name は確率変数名
39
+ def get_posterior_review_rate_trace(review_rate, review_num):
40
+ with pm.Model() as model:
41
+ _review_rate = pm.Uniform(name='review_rate', lower=0, upper=1)
42
+ review_rate_0_to_1 = (review_rate - 1) * 0.25
43
+ print('0~1の範囲でのレビュー評価 : ', review_rate_0_to_1)
44
+
45
+ # 連続確率変数のためBeta分布を使用
46
+ with pm.Model() as model:
47
+ theta = pm.Beta(name='theta', alpha=1, beta=1)
48
+
49
+ with pm.Model() as model:
50
+ observations = pm.Binomial(
51
+ # nはレビュー数、valueはレビュー評価にレビュー数を乗算した値を指定
52
+ name='obs', n=review_num, p=theta,
53
+ observed=review_rate_0_to_1 * review_num)
54
+ map_ = pm.MAP([theta, observations]).fit()
55
+
56
+ with pm.Model() as model:
57
+ model2 = pm.Model([theta, observations])
58
+ mcmc = pm.MCMC(model2)
59
+
60
+ # MCMCの探索を。第一引数は探索回数。第二引数のバーンインは最初の収束していない一定数は好ましくないので破棄して5000件目~20000件目のサンプリング結果を取得
61
+ mcmc.sample(20000, 5000)
62
+ # 探索結果のthetaの確率変数の軌跡を取得
63
+ trace = mcmc.trace('theta')
64
+ return trace
65
+ ```

2

追記

2020/02/01 01:42

投稿

meg_
meg_

スコア10980

answer CHANGED
@@ -18,5 +18,6 @@
18
18
  model2 = pm.Model([theta, observations])
19
19
  mcmc = pm.MCMC(model2)
20
20
  ```
21
- 「0~1の範囲でのレビュー評価 : 0.875」の表示までは出来ましたが、他のエラーが出ました
21
+ 「0~1の範囲でのレビュー評価 : 0.875」の表示までは出来ました他のエラーが出ました
22
- TypeError: __init__() got an unexpected keyword argument 'value'
22
+ TypeError: __init__() got an unexpected keyword argument 'value'
23
+ そちらの環境では問題なく動くのではないでしょうか?

1

追記

2020/02/01 00:52

投稿

meg_
meg_

スコア10980

answer CHANGED
@@ -9,4 +9,14 @@
9
9
 
10
10
  下記環境では問題なく実行できました。
11
11
    Python:3.6.9
12
-   pymc3:3.7
12
+   pymc3:3.7
13
+
14
+ ---
15
+ 【追記】
16
+ 質問のコードの下記部分を変更したところ(変数名modelが重複していたのでmodel2に変更)
17
+ ```Python
18
+ model2 = pm.Model([theta, observations])
19
+ mcmc = pm.MCMC(model2)
20
+ ```
21
+ 「0~1の範囲でのレビュー評価 : 0.875」の表示までは出来ましたが、他のエラーが出ました。
22
+ TypeError: __init__() got an unexpected keyword argument 'value'