Python &引用;参数中存在域错误。”;加上;统计数据beta.rvs“;
我本想建模Thompson采样,但下面的代码在参数中给出了域错误。 我搜索了一下,发现有人说可能是因为Beta的参数是负数,但这里的参数必须是正数,我不知道如何修正它Python &引用;参数中存在域错误。”;加上;统计数据beta.rvs“;,python,scipy,statistics,Python,Scipy,Statistics,我本想建模Thompson采样,但下面的代码在参数中给出了域错误。 我搜索了一下,发现有人说可能是因为Beta的参数是负数,但这里的参数必须是正数,我不知道如何修正它 from scipy import stats class TS(): def __init__(self,alpha,beta,n): self.alpha=alpha self.beta=beta self.n=n self.value=[0,0,0
from scipy import stats
class TS():
def __init__(self,alpha,beta,n):
self.alpha=alpha
self.beta=beta
self.n=n
self.value=[0,0,0]#estimator
self.prob=[0.4,0.6,0.8]
def generate(self):
for j in range(self.n):
tmp=[0,0,0]
for i in range(0,3):
tmp[i]=stats.beta.rvs(self.alpha[i],self.beta[i])
max_index=tmp.index(max(tmp))
r=np.random.choice([0,1],p=(1-self.prob[max_index],self.prob[max_index]))
self.alpha[max_index]+=r
self.beta[max_index]-=(1-r)
print(self.value)
one=TS([1,1,1],[1,1,1],100)
one.generate()
错误:
ValueError Traceback (most recent call last)
<ipython-input-18-9df20b1a6a3b> in <module>()
23 print(self.value)
24 one=TS([1,1,1],[1,1,1],100)
---> 25 one.generate()
<ipython-input-18-9df20b1a6a3b> in generate(self)
16 tmp=[0,0,0]
17 for i in range(0,3):
---> 18 tmp[i]=stats.beta.rvs(self.alpha[i],self.beta[i])
19 max_index=tmp.index(max(tmp))
20 r=np.random.choice([0,1],p=(1-self.prob[max_index],self.prob[max_index]))
C:\ProgramData\Anaconda3\lib\site-packages\scipy\stats\_distn_infrastructure.py in rvs(self, *args, **kwds)
938 cond = logical_and(self._argcheck(*args), (scale >= 0))
939 if not np.all(cond):
--> 940 raise ValueError("Domain error in arguments.")
941
942 if np.all(scale == 0):
ValueError: Domain error in arguments.
ValueError回溯(最近一次调用)
在()
23打印(自我价值)
24一=TS([1,1,1],[1,1,1],100)
--->25一、生成
在生成(自我)
16 tmp=[0,0,0]
17对于范围(0,3)内的i:
--->18 tmp[i]=统计beta.rvs(self.alpha[i],self.beta[i])
19最大指数=tmp指数(最大(tmp))
20R=np.random.choice([0,1],p=(1-self.prob[max_index],self.prob[max_index]))
rvs中的C:\ProgramData\Anaconda3\lib\site packages\scipy\stats\\u distn\u infrastructure.py(self,*args,**kwds)
938 cond=逻辑和(自参数检查(*args),(刻度>=0))
939如果不是np.all(条件):
-->940 raise VALUERROR(“参数中的域错误”)
941
942如果np.all(刻度==0):
ValueError:参数中存在域错误。
self.beta[max\u index]
应增加1-r
。将更新self.beta[max\u index]
的行更改为
self.beta[max_index] += 1 - r
参见第15页的算法2。谢谢你,韦克瑟先生。我现在明白了遗漏的一点。你提到的教程太好了!