zoukankan      html  css  js  c++  java
  • 概率算法_二项分布和泊松分布

    本次函数有

    1、阶乘

    2、计算组合数C(n,x)

    3、二项概率分布

    4、泊松分布

    以下是历史函数

    create_rand_list() #创建一个含有指定数量元素的list
    sum_fun() #累加
    len_fun() #统计个数
    multiply_fun() #累乘
    sum_mean_fun() #算数平均数
    sum_mean_rate() #算数平均数计算回报
    median_fun() #中位数
    modes_fun() #众数
    ext_minus_fun() #极差
    geom_mean_fun() #几何平均数
    geom_mean_rate() #几何平均回报

    var_fun() #方差-样本S^2
    covar_fun() #协方差(标准差)-样本S
    trans_coef_fun() #变异系数CV
    pearson_fun() #相关系数-样本r

    unite_rate_fun #联合概率
    condition_rate_fun #条件概率
    e_x #随机变量期望值
    var_rand_fun #随机变量方差
    covar_rand_fun #随机变量协方差
    covar_rand_xy_fun #联合协方差
    e_p #组合期望回报
    var_p_fun #投资组合风险
    bayes #贝叶斯

    ---------------以上是旧的------------------------------------------------------------------------
    ---------------以下是新的------------------------------------------------------------------------

    继续概率,本次是二项分布和泊松分布,这个两个还是挺好玩的,可以作为预测函数用,因为函数比较少,本次就不给例子了,但是会对函数做逐一说明

    1、阶乘n!
    就是每次-1乘,直到*1,例如5! = 5 * 4 * 3 * 2 * 1 = 120,这个是正常的,但是在写函数的时候这样算法效率会低些,因此直接反过来,1*2*3...这种,那么函数就是

    def fact_fun(n):
      if n == 0:
        return 1
      n += 1
      fact_list = [i for i in range(1,n)]
      fact_num = multiply_fun(fact_list)
      return fact_num

    2、计算组合数C(n,x)
    C(n,x) = n! / (x! * (n - x)!)
    表示从n个样本中抽取x个样本单元,可能出现结果的组合数,例如从5个物品中抽取3个物品,这三个物品的组合数就是10种

    def c_n_x(case_count,real_count):
      fact_n = fact_fun(case_count)
      fact_x = fact_fun(real_count)
      fact_n_x = fact_fun(case_count - real_count)
      c_n_x_num = fact_n / (fact_x * fact_n_x)
      return c_n_x_num

    3、二项概率分布
    执行n次伯努利试验,伯努利试验就是执行一次只有两种可能且两种可能互斥的事件,比如丢硬币实验,执行n次,成功k次的概率
    P(ξ=K) = C(n,k) * p^k * (1-p)^(n-k)
    n=5 k=3 P(ξ>=K) = p(K = 3) + p(K = 4) + p(K = 5)
    p表示一个事件的成功概率,失败则是1 - p

    def binomial_fun(case_count,real_count,p):
      c_n_k_num = c_n_x(case_count,real_count)
      pi = (p ** real_count) * ((1 - p) ** (case_count - real_count))
      binomial_num = c_n_k_num * pi
      return binomial_num

    4、泊松分布
    给定的一个机会域中,机会域可以是一个范围,也可以是一段时间,在这个机会域中可能发生某个统计事件的概率,举个例子,比有个商店,每小时平均有10位顾客光顾,那么一个小时有13位顾客光顾的概率,就是泊松分布,13位顾客光顾就是统计事件
    P(X) = (e^-λ*λ^X)/X! = (2.7182818^-10*10^13)/13! = 0.0729
    这里的λ是指平均值,可以使用算数平均数得到,e是自然常数~=2.7182818,有函数

    def poisson_fun(chance_x, case_list = [0],mean_num = 0):
      chance_x_fact = fact_fun(chance_x)
      e = 2.7182818
      if len_fun(case_list) == 1 and case_list[0] == 0:
        poisson_num = ((e ** (0-mean_num)) * mean_num ** chance_x) / chance_x_fact
      else:
        mean_num = sum_mean_fun(case_list)
        poisson_num = ((e ** (0-mean_num)) * mean_num ** chance_x) / chance_x_fact
      return poisson_num

    这个函数需要说明下,实际需要的是两个参数,一个平均值另一个是期望统计量,之所以指定了3个函数是因为可能输入的不一定是一个数字,也可能是个list,那么会有两种计算方式,这个已在if中体现,引用方法有两种,例如

    if __name__ == '__main__':
      # 第一种
      poisson_rate = poisson_fun(mean_num = 10,chance_x = 13)
      print poisson_rate 
      # 第二种
      case_list = [8,9,10,11,12]
      poisson_rate = poisson_fun(case_list = case_list ,chance_x = 13)
      print poisson_rate 
  • 相关阅读:
    11111 Generalized Matrioshkas
    Uva 442 Matrix Chain Multiplication
    Uva 10815 Andy's First Dictionary
    Uva 537 Artificial Intelligence?
    Uva 340 MasterMind Hints
    SCAU 9508 诸葛给我牌(水泥题)
    Uva 10420 List of Conquests(排序水题)
    Uva 409 Excuses, Excuses!
    10/26
    11/2
  • 原文地址:https://www.cnblogs.com/xiu123/p/9524333.html
Copyright © 2011-2022 走看看