再看如何实现dropout的时候,发现了这个函数。
这个函数是用来计算一个随机变量X(它满足二项分布),他的取值的结果0-n中的哪一个。二项分布可以理解成n次贝努力试验,以X表示的是事件A发生的概率,X是一个随机变量,他的取值为0,1,,,,n。这里的n表示的是n次贝努力试验,和size是不相关的。size表示的是整个n次贝努力试验进行的次数。
(1)函数原型:numpy.random.binomial(n,p,size=None)
n表示n次的试验,p表示的试验成功的概率,n可是是一个float但是也会被变成整数来使用。
参数的介绍:
n:int型或者一个int型的数组,大于等于0,接受浮点数但是会被变成整数来使用。
p:float或者一组float的数组,大于等于0且小于等于1.
size:可选项,int或者int的元祖,表示的输出的大小,如果提供了size,例如(m,n,k),那么会返回m*n*k个样本。如果size=None,也就是默认没有的情况,当n和p都是一个数字的时候只会返回一个值,否则返回的是np.broadcast(n,p).size个样本.
返回的是:一个数字或者一组数字
每个样本返回的是n次试验中事件A发生的次数。
(2)二项分布的数学表达式与案例展示
二项分布:表示的是随机变量x取N的时候的概率。
案例:抛2个硬币吧,抛到正反两面的概率都是0.5,那么两个硬币都是正面的概率是多少?
那么使用上面的函数怎么计算呢?
因为我们上面的公式进行的是采样工作,也就是试验成功了多少次,那么我们就考虑,我们两个硬币n=2,成功抛为正面的个数也要是2,重复多次的试验10000次吧(假设,次数越多越接近0.25),那么结果为
同样的三个硬币进行抛掷,其中一个为正面,两个为反面的概率为,
上面你理解了吗?我们一般说这个事件发生的概率为p,那么多次重复的试验,实验的次数是无穷多次,成功发生该事件的次数是N次,那么N次除以这个接近于无穷次的试验次数得到的结果就近似于这个事件发生的概率p,这个都懂吧概率论的基础,你抛一万次的硬币,正面朝上的次数应该差不多5000次,即抛硬币正面朝上的概率为5000/10000。那么我们这个函数的意思是什么呢?这里这个函数表示的是我试验size次,每一次都会得到一个输出,这个输出是X可以取得值,也就是一个整数。这个随机变量X满足二项分布,那么这个X的取值范围为0到n次。
看上图这个例子,一目了然。我这个抛硬币(抛三个硬币事件)的这个事件服从的是二项分布,那么这件事发生的概率怎么算呢?我们利用本文所描述的函数np.random.binomial()将关于这个事件的参数传入,也就是n和p,那么n=3,p=0.5,如果你只给这个函数传入n和p,size默认为None,那么表示我试验一次,这个试验我跑了三个硬币,看到下图的结果得到的是两个正面朝上的结果。这个存在很大的随机性,可能你在运行下图的代码就输出为1,在输出可能为3,都说不定,那么我如果传入的size足够大,有无穷那么大,比如上上图,我可能试验了五十万次,那么每次都会得到一个正面朝上的结果,跑三次一次正面朝上,我用二项分布计算的结果为0.375,那么你只需要判断函数返回值是否==1,如何求个和,就得到等于1的实验的次数,那么除以总的试验次数就几乎等于0.375了。
(3)官网的案例
案例1:表示的是n次的trials,测试了1000次,下面得到的是1000个实验结果,实验结果即为0-n的一个数字。
案例二:
九个石油探井,每个井成功挖存在油的概率为0.1。求九个都失败的概率。
我们先利用二项分布来计算结果
下面我们对这个满足二项分布的试验在进行测试20000次得到X=0的事件发生的次数除以总的测试次数(20000次),得到的差不多吧。。。可能是测试的次数太少了,所以不是很一样啊、。。。
Let’s do 20,000 trials of the model, and count the number that generate zero positive results.
(4)dropout中的使用
在dropout中假如这层我们总共有1000个节点,每个节点留下来的概率为0.4,那么最后可能就有600个被丢弃了,400个被留了下来。那么这个n=1,p=0.4,也就是每个节点X=1就留下来,X=0就丢弃。下面虽然不是正好8个留下来,但是7个,因为是随机的试验嘛对吧!