1. 程式人生 > >概率演算法_二項分佈和泊松分佈

概率演算法_二項分佈和泊松分佈

本次函式有

1、階乘

2、計算組合數C(n,x)

3、二項概率分佈

4、泊松分佈

以下是歷史函式

---------------以上是舊的------------------------------------------------------------------------
---------------以下是新的------------------------------------------------------------------------

繼續概率,本次是二項分佈和泊松分佈,這個兩個還是挺好玩的,可以作為預測函式用,因為函式比較少,本次就不給例子了,但是會對函式做逐一說明

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 

複製程式碼

www.lnluqu.cn
www.025invest.cn
www.wx-detian.cn
www.xintravel.cn
www.fenghuicaifu.cn
www.chinaytbzw.cn
www.sydire.cn
www.jnymkj.cn
www.metrel-china.cn
www.hongheqiche.cn
www.zazhiku.cn
www.yz-hysl.cn
www.gutiangelun.cn
www.lnjjpm.cn
www.touraround.cn
www.sunmoon88.com.cn
www.13142js.cn
www.caixiantang.com.cn
www.poponet.cn
www.zglogistics.cn
www.zgxwzk.cn
www.bjltsc.cn
www.shshunfeng.cn
www.hzwssy.com.cn
www.daoyitang.cn
www.rossicount.cn
www.bjchange.cn