3 概率论实验

3.1 概率论内容介绍

3.1.1 概率论介绍

概率论是研究随机现象数量规律的数学分支。随机现象是相对于决定性现象而言的,在一定条件下必然发生某一结果的现象称为決定性现象。

概率论是用来描述不确定性的数学工具,很多数据挖掘中的算法都是通过描述样本的概率相关信息或推断来构建模型。

3.1.2 实验介绍

本章节主要实现概率与统计相关的知识点,主要用到的框架是 numpy 和 scipy 框架。

3.2 概率论内容实现

导入相应库:

import numpy as np
import scipy as sp

3.2.1 均值实现

数据准备

ll = [[1,2,3,4,5,6],[3,4,5,6,7,8]]

代码输入:

np.mean(ll)    # 全部元素求均值

结果输出:

4.5

代码输入:

np.mean(ll,0)    # 按列求均值,0代表列向量

结果输出:


代码输入:

np.mean(ll,1)

结果输出:


3.2.2 方差实现

数据准备:

b = [1,3,5,6]
ll = [[1,2,3,4,5,6],[3,4,5,6,7,8]]

求方差:

np.var(b)

结果输出:


代码输入:

np.var(ll,1)    # 第二个参数为1,表示按行求方差

结果输出:


3.2.3 标准差实现

数据准备

ll = [[1,2,3,4,5,6],[3,4,5,6,7,8]] 

代码输入:

np.std(ll)

结果输出:


3.2.4 协方差实现

数据准备:

b = [1,3,5,6]

代码输入:

np.cov(b)

结果输出:


3.2.5 相关系数

数据准备:

vc = [1,2,39,0,8]
vb = [1,2,38,0,8]

利用函数实现:

np.corrcoef(vc,vb)

结果输出:


3.2.6 二项分布实现

服从二项分布的随机变量 X 表示在 n 次独立同分布的伯努利试验中成功的次数,其中每次试验的成功概率为 P。

代码输入:

from scipy.stats import binom,norm,beta,expon
import numpy as np
import matplotlib.pyplot as plt

# n,p 对应二项式公式中的事件成功次数及其概率,size 表示采样次数
binom_sim = binom.rvs(n=10,p=0.3,size=10000)
print('Data:',binom_sim)
print('Mean:%g'%np.mean(binom_sim))
print('SD:%g'%np.std(binom_sim,ddof=1))
# 生成直方图,x 指定每个 bin(箱子)分布的数据,对应 x 轴,binx 是总共有几条条状图,normed 值密度,也就是每个条状图的占比例比默认为1
plt.hist(binom_sim,bins=10,normes=True)
plt.xlabel(('x'))
plt.ylabel('density')
plt.show()

结果输出:


二项分布图如下:
暂无

3.2.7 泊松分布实现

一个服从泊松分布的随机变量 X,表示在具有比率参数 λ 的一段固定时间间隔内,事件发生的次数。参数 λ 告诉你该事件发生的比率。随机变量 X 的平均值和方差都是 λ。
代码输入:

import numpy as np
import matplotlib.pyplot as plt

# 产生10000个符合 lambda=2 的泊松分布的数
X = np.random.poisson(lam=2,size=10000)

a = plt.hist(X,bins=15,normed=True,range=[0,15])
# 生成网格
plt.grid()
plt.show()

泊松分布图如下:
暂无

3.2.8 正态分布

正态分布是一种连续分布,其函数可以在实线上的任何地方取值。正态分布由两个参数描述分布的平均值μ和标准差σ。

代码输入:

from scipy.stats import norm
import numpy as np
import matplotlib.pyplot as plt

mu = 0
sigma = 1
# 分布采样点
x = np.arange(-5,5,0.1)
# 生成符合 mu,sigma 的正态分布
y = norm.pdf(x,mu,sigma)
plt.plot(x,y)
plt.xlabel('x')
plt.ylabel('density')
plt.show()

分布图如下:
暂无

3.2.9 指数分布

指数分布是一种连续概率分布,用于表示独立随机事件发生的时可间隔。比如旅客进入机场的时间间隔、打进客服中心电话的时间间隔等。

代码输入:

from scipy.stats import expon
import numpy as np
import matplotlib.pyplot as plt

lam = 0.5
# 分布采样点
x = np.arange(0,15,0.1)
# 生成符合 lambda 为0.5的指数分布
y = expon.pdf(x,lam)
plt.plot(x,y)
plt.xlabel('x')
plt.ylabel('density')
plt.show()

分布图如下:
暂无

3.2.10 中心极限定理的验证

中心极限定理证明了一系列相互独立的随机变量的和的极限分布为正态分布。即使总体本身不服从正态分布,只要样本组数足够多即可让中心极限定理发挥作用。此实验用于验证中心极限定理。
生成数据。假设观测一个人掷骰子,掷出1~6的概率都是相同的:1/6。掷了一万次。

import numpy as np
import matplotlib.pyplot as plt

# 随机产生10000个范围为(1,6)的数
random_data = np.random.randint(1,7,10000)
print(random_data.mean())
print(random_data.std())

输出结果:


生成直方图

plt.figure()
plt.hist(random_data,bins=6,facecolor='blue')
plt.xlabel('x')
plt.ylabel('n')
plt.show()

分布图如下
暂无

随机抽取10个数据

sample1 = []
# 从生成的1000个数中随机抽取10个
for i in range(1,10)
# int(np.random.random()*len(ramdon_data))为随机生成范围为(0,10000)的整数
sample1.append(random_data[int(np.random()*len(ramdon_data))])

sample1 = np.array(sample1)
print(sample1)
print(sample1.mean())
print(sample1.std())

输出如下:


随机抽取 1000 组数据,每组 50 个

samples = []
samples_mean =[]
samples_std = []

# 从生成的 1000 个数中随机抽取 1000 组
for i in range(0,1000):
sample = []
# 每组随机抽取 50 个数
for j in range(0,50):
sample.append(ramdon_data[int(np.random.random() * len(ramdon_data))])
# 将这 50 个数组成一个 array 放入 samples 列表中
sample_ar = np.array(sample)
samples.append(sample_ar)
# 保存每 50 个数的均值和标准差
samples_mean.append(sample_ar.mean())
samples_std.append(sample_ar.std())
# samples_std_ar = np.array(samples_std)
# samples_mean_ar = np.array(samples_mean)
# print(samples_mean_ar)

生成直方图

plt.figure()
# 根据抽取的 1000 数据的均值,生成直方图,10 个条形柱,柱的颜色为蓝色
plt.hist(samples_mean,bins=10,facecolor='blue')
plt.xlabel('x')
plt.ylabel('n')
plt.show()

分布图如下
暂无