Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python &引用;参数中存在域错误。”;加上;统计数据beta.rvs“;_Python_Scipy_Statistics - Fatal编程技术网

Python &引用;参数中存在域错误。”;加上;统计数据beta.rvs“;

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

我本想建模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]#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。

谢谢你,韦克瑟先生。我现在明白了遗漏的一点。你提到的教程太好了!