概率算法_二项分布和泊松分布

6、随机变量协方差
函数简单,套用协方差函数即可

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

5、随机变量方差
和样本方差功能一样,不多说了
σ^2 = NΣ[Xi-E(X)]^2P(Xi)

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

下面的内容用花生米的例子就不合适了,换个学校的事
一个班英语考试各分数的比例
分数|占比
20  |0.1
40  |0.1
60  |0.3
80  |0.4
100 |0.1

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

2、联合概率

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

 

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

9、投资组合风险

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

def covar_rand_xy_fun(x_count_list,y_count_list,xy_rate_list):
  e_x_num = e_x(x_count_list,xy_rate_list)
  e_y_num = e_x(y_count_list,xy_rate_list)
  covar_len = len_fun(x_count_list)
  if covar_len == len_fun(y_count_list) and covar_len == len_fun(xy_rate_list):
    covar_rand_xy_list = [(x_count_list[i] - e_x_num) * (y_count_list[i] - e_y_num) * xy_rate_list[i] for i in range(covar_len)]
    covar_rand_xy_num = sum_fun(covar_rand_xy_list)
  else: return None
  return covar_rand_xy_num
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个函数是因为可能输入的不一定是一个数字,也可能是个list,那么会有两种计算方式,这个已在if中体现,引用方法有两种,例如

def e_p(x_count_list,y_count_list,xy_rate_list):
  e_x_num = e_x(x_count_list,xy_rate_list)
  e_y_num = e_x(y_count_list,xy_rate_list)
  w = sum_fun(x_count_list) / (sum_fun(x_count_list) + sum_fun(y_count_list))
  e_p_num = w * e_x_num + (1 - w) * e_y_num
  return e_p_num

本次函数有

def var_rand_fun(count_list,rate_list):
  e_num = e_x(count_list,rate_list)
  var_len = len_fun(count_list)
  if var_len == len_fun(rate_list):
    var_list = [((count_list[i] - e_num) ** 2) * rate_list[i] for i in range(var_len)]
    var_num = sum_fun(var_list)
  else: return None
  return var_num
def poisson_fun(chance_x, case_list = [0],mean_num = 0):  chance_x_fact = fact_fun  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

1、简单边际概率

2、计算组合数C

8、组合期望回报
用最小的风险能获得的最大回报
E(P) = wE(X) + (1 – w)E(Y)
w是投资资产x的比例

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 

3、条件概率
一个事件已发生的情况下,得到另一个事件的发生概率,比较文言的说法是,给定事件B,事件A的发生概率,当然也可以反过来
P(A|B) = P(A∩B)/P(B)
反过来
P(B|A) = P(A∩B)/P(A)
还是这个例子,现在已知B事件是从A袋子取,那么P(B) = 32/49
P(A|B) = (3/49)/(32/49) = 3/32 = 0.0937
这个函数就是

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

既然是联合了,就需要两个事件,记为P(A且B),∩这玩意就是且
就是A事件和B事件联合成同一个事件的概率,从A袋子吃出一个坏花生米的概率就是联合概率,事件A是坏花生米,事件B是A袋子
这个比较有分歧,比较广泛使用的是
P(A∩B) = 3/49 = 0.0612
另一种就是
P(A∩B) = 3/32*0.5 = 0.0517
我个人比较同意第一种,但是受到其他事件的影响比较大,考虑如果B袋子有10000个花生,坏花生数不变,结果会有很大差异
那么函数就有了

1、阶乘

5、随机变量方差

—————以上是旧的————————————————————————
—————以下是新的————————————————————————

 

4、泊松分布

def unite_rate_fun(condition_count,all_count):
  p_a_with_b = float(condition_count) / all_count
  return p_a_with_b
def fact_fun:  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
def var_p_fun(x_count_list,y_count_list,xy_rate_list):
  w = sum_fun(x_count_list) / (sum_fun(x_count_list) + sum_fun(y_count_list))
  var_rand_x_num = var_rand_fun(x_count_list,xy_rate_list)
  var_rand_y_num = var_rand_fun(y_count_list,xy_rate_list)
  covar_rand_xy_num = covar_rand_xy_fun(x_count_list,y_count_list,xy_rate_list)
  var_p_num = (w * w * var_rand_y_num + (1 - w) * (1 - w) * var_rand_y_num + 2 * w * (1 - w) * covar_rand_xy_num) ** 0.5
  return var_p_num

3、二项概率分布

 

以下是历史函数

 

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() #几何平均回报

本次有以下函数

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

7、联合协方差
σxy = NΣ[Xi-E(X)][Yi-E(Y)]P(XiYi)

var_fun()
#方差-样本S^2
covar_fun()
#协方差(标准差)-样本S
trans_coef_fun()
#变异系数CV
pearson_fun()
#相关系数-样本r
—————以上是旧的————————————————————————
—————以下是新的————————————————————————
概率这块整个给我看了个懵逼,后面的代码都是按照我自己理解写的,如果有错误,欢迎指正
另外说明的是概率是很精细的事情,所以浮点型的数字会比较多,而且小数位数十分精确,除特殊情况,我就四舍五入截取到小数点后4位
简单事件,就是只有一个特征的事件,所有可能事件的集合就是样本空间,举个例子
有两袋子花生米,第一个袋子有32个花生米,其中有3个坏的,第二个袋子有17个花生米,其中有5个坏的,这个例子的样本空间就是下面这样。我想说,要是我选了B袋子我一定诅咒卖花生的老板吃方便面没有调料
袋子|是否坏的|花生米个数
A   |0       |3
A   |1       |29
B   |0       |5
B   |1       |12
为了方便起见,是True用0表示,否false用1表示
1、简单边际概率,记做P(A)
这个容易理解,比如计算坏花生米的出现率,这个简单,就不单独写代码了
P(A) = 坏花生米/总数 = 8/49 = 0.1633

8、组合期望回报

def bayes(true_coef,event_rate,event_bool,manage_num):
  'True = 0,False = 1'
  manage_num = manage_num - 1
  false_coef = 1 - true_coef
  event_count = len_fun(event_rate)
  if event_bool[manage_num] == 0:
    main_rate = event_rate[manage_num] * true_coef
  else:
    main_rate = event_rate[manage_num] * false_coef
  event_true_list = [event_rate[n] * true_coef for n in range(event_count) if event_bool[n] == 0]
  event_false_list = [event_rate[n] * true_coef for n in range(event_count) if event_bool[n] == 1]
  event_sum = sum_fun(event_true_list) + sum-fun(evemt_false_list)
  event_succe_rate = main_rate/event_sum
  return event_succe_rate

6、随机变量协方差

other、贝叶斯
这个真的是看的最懵逼的,感觉我写的这个不准,就当做参考吧

3、条件概率

def condition_rate_fun(p_a_with_b,p_b):
  p_a_from_b = p_a_with_b / p_b
  return p_a_from_b

2、联合概率

 

def e_x(count_list,rate_list):
  e_len = len_fun(count_list)
  if e_len == len_fun(rate_list):
    e_list = [count_list[i] * rate_list[i] for i in range(e_len)]
    e_num = sum_fun(e_list)
  else: return None
  return e_num

4、随机变量期望值
和算数平均数差不多,实际结果不应与这个数有太多偏差
μ = E(X) = NΣXiP(Xi)
E(X) = 20 * 0.1 + 40 * 0.1 + 60 * 0.3 + 80 * 0.4 + 100 * 0.1 = 66

7、联合协方差

说概率前复习下历史函数
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()
#几何平均回报

9、投资组合风险
这个没有搞懂是做什么的,应该是期望回报的偏差值吧
σ(p) = [w^2σ(x)^2 + (1 – w)^2σ(y)^2 + 2w(1 – w)σ(xy)]^0.5

4、随机变量期望值

def covar_rand_fun(count_list,rate_list):
  var_rand_num = var_rand_fun(count_list,rate_list)
  covar_num = var_rand_num ** 0.5
  return covar_num