精华内容
下载资源
问答
  • 离散随机分布

    千次阅读 2017-11-06 09:28:42
    离散随机分布1.Bernoulli分布:两点分布或者0-1分布。bernoulli试验成功,则Bernoulli随机变量X取值为1,否则X为0。记试验成功概率为θ,即: P(X=1)=θ P(X=0)=1−θ θϵ[0,1] P(X=1)=\theta\ \ \ P(X=0)=1-\...

    离散随机分布

    1.Bernoulli分布:

    两点分布或者0-1分布。bernoulli试验成功,则Bernoulli随机变量X取值为1,否则X为0。记试验成功概率为θ,即:
    P(X=1)=θ   P(X=0)=1θ   θϵ[0,1]
    称X服从参数为θ的Bernoulli分布,记为X~Ber(θ)

    p(x|θ)={θ   if x = 11θ   if x = 0=θx(1θ)x,  θϵ[0,1]

    Bernoulli均值:
    μ=1θ+0(1θ)=θ
    Bernoulli方差:
    σ2=E(x2)μ2=12θ+02(1θ)θ2=θθ2=θ(1θ)

    两类分类问题:y|x服从Bernoulli分布,即类别标签y取值为0或1的离散随机变量

    2.二项(Binomial)分布:

    在抛掷硬币试验中,若只进行一次试验,则为Bernoulli试验。若进行n次试验,则硬币正面向上的数目X满足二项分布,记为: x~ Bin(n,θ)

    p(x|n,θ)=Cxnθx(1θ)nx=n!(nx)!x!θx(1θ)nx
    Binomial均值:

    已知:
    xCxn=nCx1n1

    μ=0C0nθ0(1θ)n+1C1nθ1(1θ)n1+...+kCknθk(1θ)nk+...+nCnnθn(1θ)0=1C1nθ1(1θ)n1+...+kCknθk(1θ)nk+...+nCnnθn(1θ)0=n(C0n1θ1(1θ)n1+...+Ck1n1θk(1θ)nk+...+Cn1n1θn(1θ)0)=nθ(C0n1θ0(1θ)n1+...+Ck1n1θk1(1θ)nk+...+Cn1n1θn1(1θ)0)=nθ(1θ+θ)n1=nθ

    Binomial方差:
    已知:
    x2Cxn=nCx1n1+n(n1)Cx2n2

    σ2=E(x2)μ2

    E(x2)=ni=0i2Cinpi(1p)ni=C1np(1p)n1+ni=2nCi1n1pi(1p)ni+ni=2(n1)nCi2n2pi(1p)ni=np(1p)

    3.多项分布(multinomial):

    假设抛有K个面的的骰子,其中抛掷到第j面的概率为θj, 令θ=(θ1,θ2,...,θk)

    若一共抛掷n次,x=(x1,...,xn)为随机变量,其中xk是抛掷到第k面的次数,则x的分布为多项分布,即x Mu(n,θ)

    p(x|n,θ)=n!x1!...xkKk=1θxkk

    当n=1时为分类分布,Categorical 分布,x Cat(θ)

    展开全文
  • 关于用程序模拟的随机分布

    千次阅读 2016-04-13 19:07:21
    随机分布

    昨天服务器端的童靴遇到了一个问题,被我偷听到了~问题是这样的,某物品在制作时的产出概率是p,要制作n次,除了把rand循环n次之外,还有啥方法么?……
    这个问题之前宝宝在给另一位服务器童靴写测试代码的时候碰到过,当时的问题是,想要在一个技能范围(例如球体)内随机的产生爆炸(一个点),怎么均匀的随机在一个球体中?
    这个拿随机分布的视角看一下,尊的都是草鸡简单的问题……然而我当时还是没有给服务器童靴讲清(之前那位也没有讲清=.=),服务器童靴把我涂涂涂的草稿纸拿走了但是我涂得也是异常混乱而且貌似好多错~所以我打算好好写下来,以便以后直接用=.=


    问题分析

    基本思路是,随机生成一个数a,然后对这个数使用一个应设函数f(a),得到另一个同范围的数,而后者的分布将变为所需的分布。

    也就是说,给定一个概率密度函数p(m)(数学函数),如何利用均匀分布的函数 rand()(程序函数) ,来得到新的给定概率密度的函数 new_rand()(程序函数)?(m 在[0,1]内)
    具体数学过程以后我补补数学课再写 =.= ,依靠女人超强的第六感我猜测的结论如下:
    对于一个P(m)(m在[0,n])分布生成的数a(a在[0,1]),对它使用函数f(a)(f(a)和a在[0,1]),得到令f(a)的分布密度是Q(m),那么f(a) = P(Q^(-1)(a))。


    代码(这里用了一个0~1上半周的余弦的分布):

    // 生成一个均匀分布的 0~1 之间的double
    double rand_double()
    {
        return (double)rand()/(double)RAND_MAX;
    }
    
    // 转换均匀分布的 0~1 之间的double为新的 0~1 之间的分布
    double trans(double old)
    {
        return (asin( (old-0.5)*2 ) / PI_D2 )/2 +0.5; //这个函数将会被换成其
    
    他需要的函数
    }
    
    // 测试函数:n个样本,总共dn段步长
    typedef unsigned sample_count_type;
    typedef unsigned step_count_type;
    void test(sample_count_type n, step_count_type dn, sample_count_type* res)
    {
        double t_rand;
        for(step_count_type i=0; i < dn; ++i)
        {
            *(res + i) = 0;
        }
    
        srand((unsigned int)time(0));
        while(--n != 0)
        {
            t_rand = trans( rand_double() );
            ++ *(res + (step_count_type)(t_rand * dn));
        }
    }
    
    int main()
    {
        const step_count_type dn = 10;
        sample_count_type n = 500;
        sample_count_type res[dn];
    
        test(n, dn, res);
    
        for(step_count_type i=0; i<dn; ++i)
        {
            cout<<res[i]<<"   ";
        }
        cout<<endl;
    
        return 0;
    }

    我的测试结果:

    10   37   68   75   79   69   70   50   28   13

    脑补一下这个分布,确实是中间凸一点~

    回到现实中来~上边说到的那两个问题,后者容易解决一点,对球积分求逆就可以,各种方向的任君选择;但是前者内个二项分布的问题,我搜了一圈发现这货好像真的没有求和公式或者连续近似的积分~
    在下唯一想到的方法就是数值的方法了……
    就是用一个数组来近似表达一个连续函数的思想,在上边的trans函数上做。也是O(1)的复杂度~
    如何插值随意~如何求积分数组也有各种数值积分方案随意~

    =,= 突然赶脚以上是不是应该是数值策划干的事情啊……

    展开全文
  • 用蒙特卡洛法验证2d平面上随机实数的分布是否为随机分布,用VB编程实现怎么做?
  • Java中实现正态随机分布

    万次阅读 2018-08-24 17:00:52
    这次内容分为两部分,如果你对算法怎么实现没兴趣的话,看看简单版如何调用库函数就好了,如果你和我一样对算法又有那么点兴趣,那就...//标准正态随机分布 public static double StandardNormalDistribution(){ ...

    这次内容分为两部分,如果你对算法怎么实现没兴趣的话,看看简单版如何调用库函数就好了,如果你和我一样对算法又有那么点兴趣,那就接着看看进阶版,看不懂也不亏嘛。

     

    简单版

    如果不想自己写的话,Java util库中早就有提供好的标准正态分布的随机函数:

    //标准正态随机分布
    public static double StandardNormalDistribution(){
           java.util.Random random = new java.util.Random();
           return random.nextGaussian();
    }

    库里只有标准正态分布N(0,1),那么想得到满足N(u,v)的随机数怎么办呢,利用N(0,1)有个近似的简单算法:

    //普通正态随机分布
    //参数 u 均值
    //参数 v 方差
    public static double NormalDistribution(float u,float v){
           java.util.Random random = new java.util.Random();
           return Math.sqrt(v)*random.nextGaussian()+u;
    }

    有人可能会怀疑上面   Math.sqrt(v)*random.nextGaussian()+u  这个公式到底靠谱吗?我们先来证明下吧:

    N(0,1)-N(\mu,\sigma^2)

    P(y)_{N(0,1))}=P(x)_{N(\mu,\sigma^2))}

    \frac{1}{\sqrt(2\pi)}\exp^{-\frac{y^2}{2}}=\frac{1}{\sqrt(2\pi)*\sigma}\exp^{-\frac{(x-\mu)^2}{2(\sigma)^2}}

    y\approx\frac{x-\mu}{\sigma}

    x=\sigma y+\mu

    同时,我们在Matlab里面验证一下,附上Matlab代码:

    %%%%随机数数量
    L=1000000;
    x=zeros(1,L);
    y=zeros(1,L);
    
    %%%%均值
    u=10;
    %%%%方差 
    v=10;
    
    %%%%normrnd是正态分布函数
    for i=1:length(x)
        x(i)=u+sqrt(v)*normrnd(0,1);
        y(i)=normrnd(u,v);
    end
    
    figure(1);
    hist(x,1000);
    title('近似算法');
    
    figure(2);
    hist(y,1000);
    title('标准算法');

    来看结果:

    可见图像还是非常接近的,说明近似效果还是相当不错的。

     

    进阶版

    如果你跟我一样很闲,想要自己实现下正态分布的算法,那就接着看吧。我这里主要介绍Box–Muller算法和中心极限定理。

    Box–Muller算法

    Box–Muller算法是由 George E. P. Box 与 Mervin E. Muller 在1958年提出的,证明过程很复杂这里就不提了,但是公式却很简单,看公式:

    感谢网友提供的图。这个公式主要利用了两个均匀分布产生的随机数U1,U2。Z0和Z1实现的效果是一致的,我们在代码中实现一下:

    //生成两个(0~1)的随机数 x1,x2;
    double x1=Math.Random();
    double x2=Math.Random();
    
    double Z0=Math.sqrt(-2*Math.log(x1))*Math.cos(2*Math.PI*x2);
    double Z1=Math.sqrt(-2*Math.log(x1))*Math.sin(2*Math.PI*x2);

    还是非常简单的。那么真实的效果又如何呢,在Matlab里面验证一下:

    用了一百万个随机数据画出的分布直方图,可见还是非常不错的。当然这里实现的还是标准正态分布N(0,1),若要得到一般的正态分布N(u,v),还需要利用之前的公式再转换一下。

     

    中心极限定理

    中心极限定律很有意思,简而言之呢就是说从各种独立分布中都可以找到一个规律,这个规律近似满足正态分布,具体的推导方面可以自行研究。

    假设有一个独立随机的分布 X={x1,x2,x3,...,xn}

    可知X的期望 E{X}=u

           X的方差 D{X}=v

    Y=\frac{\sum X -n*u}{\sqrt{n*v}}

    n越大,Y的分布就越近似于正态分布。而当n接近无穷大时,得到的Y可以看作标准正态分布N(0,1)。

     

    那么我们就试着用均匀分布来实现正态分布:

    public static float getStandardGaussian(){
            //(0~1)均匀分布均值为0.5
            float u=0.5;
            //(0~1)均匀分布方差为1/12
            float v=1/12;
    
            //n取100个点
            int n=100;
    
            float sum=0;
            for(int i=0;i<n;i++){
                sum+=Math.Random();
            }
    
            float y=(sum-n*u)/Math.sqrt(n*v);
            return y;
     }

    来吧,看看Matlab的验证效果如何:

    还是很不错的。不过有个缺点就是每次计算n 遍,没有Box–Muller算法计算的快。同样的,计算得到的是标准正态随机分布,一般的分布还是需要转换一下才行。

    展开全文
  • 在学习生活中,我们经常性的发现有很多事物背后都有某种规律,而且,这种规律可能符合某种随机分布,比如:正态分布、对数正态分布、beta分布等等。所以,了解某种分布对一些事物有更加深入的理解并能清楚的阐释事物...

    在学习生活中,我们经常性的发现有很多事物背后都有某种规律,而且,这种规律可能符合某种随机分布,比如:正态分布、对数正态分布、beta分布等等。

    所以,了解某种分布对一些事物有更加深入的理解并能清楚的阐释事物的规律性。现在,用python产生一组随机数据,来演示这些分布:

    import random

    import matplotlib

    import matplotlib.pyplot as plt

    SAMPLE_SIZE = 1000

    buckets = 100

    fig = plt.figure()

    matplotlib.rcParams.update({"font.size": 7})

    #第一个图形是在[0,1)之间分布的随机变量(normal distributed random variable)。

    ax = fig.add_subplot(5,2,1)

    ax.set_xlabel("random.random")

    res = [random.random() for _ in xrange(1, SAMPLE_SIZE)]

    ax.hist(res, buckets)

    #第二个图形是一个均匀分布的随机变量(uniformly distributed random variable)。

    ax_2 = fig.add_subplot(5,2,2)

    ax_2.set_xlabel("random.uniform")

    a = 1

    b = SAMPLE_SIZE

    res_2 = [random.uniform(a, b) for _ in xrange(1, SAMPLE_SIZE)]

    ax_2.hist(res_2, buckets)

    #第三个图形是一个三角形分布(triangular distribution)。

    ax_3 = fig.add_subplot(5,2,3)

    ax_3.set_xlabel("random.triangular")

    low = 1

    high = SAMPLE_SIZE

    res_3 = [random.uniform(low, high) for _ in xrange(1, SAMPLE_SIZE)]

    ax_3.hist(res_3, buckets)

    #第四个图形是一个beta分布(beta distribution)。参数的条件是alpha 和 beta 都要大于0, 返回值在0~1之间。

    plt.subplot(5,2,4)

    plt.xlabel("random.betavariate")

    alpha = 1

    beta = 10

    res_4 = [random.betavariate(alpha, beta) for _ in xrange(1, SAMPLE_SIZE)]

    plt.hist(res_4, buckets)

    #第五个图形是一个指数分布(exponential distribution)。 lambd 的值是 1.0 除以期望的中值,是一个不为零的数(参数应该叫做lambda没但它是python的一个保留字)。如果lambd是整数,返回值的范围是零到正无穷大;如果lambd为负,返回值的范围是负无穷大到零。

    plt.subplot(5,2,5)

    plt.xlabel("random.expovariate")

    lambd = 1.0/ ((SAMPLE_SIZE + 1) / 2.)

    res_5 = [random.expovariate(lambd) for _ in xrange(1, SAMPLE_SIZE)]

    plt.hist(res_5, buckets)

    #第六个图形是gamma分布(gamma distribution), 要求参数alpha 和beta都大于零。

    plt.subplot(5,2,6)

    plt.xlabel("random.gammavariate")

    alpha = 1

    beta = 10

    res_6 = [random.gammavariate(alpha, beta) for _ in xrange(1, SAMPLE_SIZE)]

    plt.hist(res_6, buckets)

    #第七个图形是对数正态分布(Log normal distribution)。如果取这个分布的自然对数,会得到一个中值为mu,标准差为sigma的正态分布。mu可以取任何值,sigma必须大于零。

    plt.subplot(5,2,7)

    plt.xlabel("random.lognormalvariate")

    mu = 1

    sigma = 0.5

    res_7 = [random.lognormvariate(mu, sigma) for _ in xrange(1, SAMPLE_SIZE)]

    plt.hist(res_7, buckets)

    #第八个图形是正态分布(normal distribution)。

    plt.subplot(5,2,8)

    plt.xlabel("random.normalvariate")

    mu = 1

    sigma = 0.5

    res_8 = [random.normalvariate(mu, sigma) for _ in xrange(1, SAMPLE_SIZE)]

    plt.hist(res_8, buckets)

    #最后一个图形是帕累托分布(Pareto distribution), alpha 是形状参数。

    plt.subplot(5,2,9)

    plt.xlabel("random.normalvariate")

    alpha = 1

    res_9 = [random.paretovariate(alpha) for _ in xrange(1, SAMPLE_SIZE)]

    plt.hist(res_9, buckets)

    plt.show()

    201907150022504742.jpg

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持找一找教程网。

    展开全文
  • "取值随机会而定" "是实验结果的函数"随机事件 → 静态(常量)随机变量 → 动态(变量)离散型常见的离散型随机变量:两点分布、二项分布、泊松分布(分布律)设 为离散型随机变量,............ & 离散型-04.png...
  • 文章目录概率密度的性质常见的连续型随机变量均匀分布指数分布正态分布伽马分布连续型随机变量及其概率密度 概率密度的性质 常见的连续型随机变量 均匀分布 指数分布 正态分布 伽马分布 ...
  • 用python生成各种随机分布

    万次阅读 2017-06-06 23:37:08
    在学习生活中,我们经常性的发现有很多事物背后都有某种规律,而且,这种规律可能符合某种随机分布,比如:正态分布、对数正态分布、beta分布等等。 所以,了解某种分布对一些事物有更加深入的理解并能清楚的阐释...
  • WordCloud 关键词随机分布 生成词云 from pyecharts import Pie,Bar,Gauge,EffectScatter,WordCloud import random name=[u"网络",u"数据分析",u"hadoop",u"flask"] ...
  • 前面的文章中主要就线性回归进行了模拟,这篇文章重点讨论一下学习和训练过程中训练数据的问题。并对随机分布的噪声如何生成以及结果展示进行确认。
  • 用matplotlib绘制随机分布图 1.创建RandomWalk()类 我们先创建一个随机漫步的类,它可以随机选择前进方向。这个类需要三个属性,其中一个是储存随机漫步次数的变量,其他两个是列表,分别储存随机漫步经过的每个点的...
  • [整理] 利用R生成随机分布的…

    千次阅读 2017-04-14 09:47:18
    原文地址:利用R生成随机分布的方法">[整理] 利用R生成随机分布的方法作者:周庭锐教授[整理] 利用R生成随机分布的方法 文/周庭锐 夜里复习各种统计分布的模拟、拟合、验证的R编程,顺手整理一下。 (不懂怎么一回...
  • 对概率密度函数积分归一化得到概率函数,然后采用概率函数反函数生成随机分布; 代码实现 void GenerateDirection() { TRandom3 rndm; TH1D *h1 = new TH1D("","",400,0.,3.1415/2); for(int i=0;i;
  • 10个随机分布的坐标点 Demo #!/usr/bin/python3 from random import uniform ''' uniform(a,b)生成[a,b)内的一个随机数 ''' r=[(uniform(0,10),uniform(0,10)) for _ in range(10)] print(r) 运行结果 [(3....
  • 1.产生[0 N-1]区间的一个随机整数 ...4.产生服从某个分布的概率随机数 1.产生[0 N-1]区间的一个随机整数 #include <iostream> #include<stdlib.h> using namespace std; int main() { srand((int)ti...
  • 随机分布生成

    千次阅读 2010-05-05 16:53:00
    用C在WINDOWS下编程有一点很不好,就是随机样本的生成很不方便。前一段时间实现HDP时,因为用系统的随机生成的随机数,初始化模型时,效果很不好。因为初始的模型随机性太差,最后用了LDA的经典程序中生成随机数的哪...
  • R语言中实现随机分布

    千次阅读 2018-09-19 16:07:55
    在R中各种概率函数都有统一的形式,即一套统一的 前缀+分布函数名: 如: 1. r*** function (for "random"随机函数), a d*** function (for "density"密度函数), a p*** (for "...
  • 程序实现泊松随机分布

    千次阅读 2015-01-26 09:58:44
    泊松分布适合于描述单位时间(或空间)内随机事件发生的次数。如某一服务设施在一定时间内到达的人数,电话交换机接到呼叫的次数,汽车站台的候客人数,机器出现的故障数,自然灾害发生的次数,一块产品上的缺陷数,...
  • 均匀随机分布的Y的期望和方差

    千次阅读 2019-03-26 11:10:48
    如果y在a,b之间随机均匀分布,则y的方差为(a-b)**2/12,y的期望为(a+b)/2
  • 气泡随机分布界面的实现

    千次阅读 2015-04-29 18:01:02
     整体界面要求为气泡大致位置在屏幕某个区域,但圆心本身位置在该区域内随机,气泡半径,背景色也随机。然后界面展示时有一个漂浮出来的动画效果,气泡之间可以有遮挡但不可以挡住字,点击换一批的时候,重复以上所...
  • 对离散型随机分布的理解

    千次阅读 2012-05-05 23:02:30
    01分布是比较简单的离散型分布,是伯努利分布的一个特例。伯努利分布:F(x)= ∑(k:0->x){C(n,k) p^k(1-p)^(n-k)},取n=1,即做一次伯努利试验,则得01分布。当n->∞时,p比较小的时候,P(X=k)=C(n,k) p^k(1-p)^(n-k,设...
  • 生成随机正态分布 numpy.random.binomial(n,p,size):二项分布 二项分布(伯努利分布)是n个独立的是/非试验中成功的次数的概率分布,其中每次试验的成功概率为p; np.random.binomial()函数是模拟产生size个...
  • 如何平均得到圆内点的随机分布

    千次阅读 2014-01-07 21:02:08
    如何利用一个能够返回平均随机点的函数,等概率地生成一个单位圆中的点,使得生成地点在圆内的分布概率尽量平均,即在面积上平均分布。 首先,要弄明白之间的平均随机是指什么;其次,还需要搞清楚在面积上平均...
  • 本代码利用分布函数在二维几何体中生成随机点。It is about generating random points inside two-dimensional geo...
  • 题:设随机变量 独立同分布且具有相同的分布函数,证明:   证明: 在以下证明中假设f(x), F(x) 分别为 共同的概率密度和分布函数 步骤一: 大于 到 中的全部值也就是说对于任意一个 均小于 ,所以原式...
  • 方案一: import numpy as np array = np.arange(0, 10, 1) print("原来数据顺序:") print(array) state = np.random.get_state() np.random.shuffle(array) ...print("打乱原顺序,新的随机数据:") print(ar...
  • 【random.uniform()】是随机分布

    千次阅读 2019-03-21 21:47:12
    import numpy as np import random import matplotlib.pyplot as plt L = list(range(33, 170, 1)) l = [a/10 for a in L] ll = [0]*100 for i in range(1000000): x = round(random.uniform(0, 99)) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,905
精华内容 7,562
关键字:

随机分布