matlab泊松分布随机数和图像_统计概率思维及几种分布的Python实现

一、统计概率

1.1 随机变量(通常用大写字母表示)

量化随机事件的函数,将随机事件可能出现的结果赋予了一个数字。

f76c59e8311a744cfb3e99e5b82213c2.png

1.2 概率分布

  • 概率分布=随机变量+概率+分布(在统计图中的形状);
  • Python实现:科学计算SciPy的stats模块;
#anaconda prompt下安装scipy包
conda install scipy
#导入包,统计计算包的统计模块
import scipy.stats as stats

737f5d9d0e6ae00072112235c69d0c0c.png

1.3 离散概率分布

7d014ddd9f598867ea7843456c4d2f23.png

附加知识点:因为Python绘图时坐标轴不显示中文,需要进行修改,网上有好几种修改方法,我自己改过两次配置文件,一次改坏了,一次改了没反应,所以不推荐这种方式,尝试了动态设置参数,稍微麻烦些,每次使用都要设置,但是可以应急,把设置代码放在下面,亲测有用,还有其他没尝试过的方法,待以后解决。

#设置显示中文字体
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

伯努利分布Python实现:

#导入包
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

#第一步,定义随机变量1和0,抛硬币正面朝上为1,反面朝上为0
X=np.arange(0,2,1) #生成等差数组,arrange(start,stop,step)

#第二步:求对应分布的概率质量函数(PMF),返回一个列表,列表中每个元素表示随机变量中对应值的概率
p=0.5 #硬币朝上概率
plist=stats.bernoulli.pmf(X,p)

'''
plot默认绘制折线,因为是离散随机变量,只绘制点,所以传入以下参数:marker:点的形状, o表示为圆圈标记;
linestyle:线条的形状,值None表示不显示连接各个点的折线; vlines用于绘制竖直线,vline(X坐标值,
y最小坐标值,y最大坐标值);传入的X是一个数组, 是给数组中的每个X坐标值绘制竖直线,y最小坐标值是0,
最大坐标值是对用plist中的值。
'''
#第3步:绘图
plt.plot(X,plist,marker='o',linestyle='None')
plt.vlines(X,0,plist)
#设置显示中文字体
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
#x轴文本
plt.xlabel('随机变量:抛硬币1次')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('伯努利分布:p=%.2f' % p)
#显示图形
plt.show()

e40828ba933181ac8c340ab14097ab51.png

二项分布Python实现:

#导入包
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

#第一步,定义随机变量:抛硬币5次,正面朝上的概率
n=5   #次数
p=0.5 #成功的概率
X=np.arange(0,n+1,1) #生成等差数组,arrange(start,stop,step)

#第二步:求对应分布的概率质量函数(PMF),返回一个列表,列表中每个元素表示随机变量中对应值的概率
plist=stats.binom.pmf(X,n,p)

#第3步:绘图
plt.plot(X,plist,marker='o',linestyle='None')
plt.vlines(X,0,plist)
#设置显示中文字体
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
#x轴文本
plt.xlabel('随机变量:抛硬币正面朝上次数')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('二项分布:n=%i,p=%.2f' % (n,p))
#显示图形
plt.show()

5eeb8065e010190f23c83628494a5d7b.png

几何分布Python实现:

#导入包
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

#第一步,定义随机变量:首次成功的次数,可能是1次,2次,3次等,这里我们想知道5次成功的概率
n=6   #次数
p=0.7 #成功的概率
X=np.arange(1,n+1,1) #生成等差数组,arrange(start,stop,step)

#第二步:求对应分布的概率质量函数(PMF),返回一个列表,列表中每个元素表示随机变量中对应值的概率
plist=stats.geom.pmf(X,p)

#第3步:绘图
plt.plot(X,plist,marker='o',linestyle='None')
plt.vlines(X,0,plist)
#设置显示中文字体
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
#x轴文本
plt.xlabel('随机变量:第n次首次成功')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('几何分布:p=%.2f' % p)
#显示图形
plt.show()

a09439c0d9a9e8ea8d90dc92f1ef84c3.png

泊松分布Python实现:

#导入包
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

#第一步,定义随机变量:已知班主任透过窗户盯人的概率是每天2次,那么一天内盯人k次的概率是?
mean=2   #均值,每天盯2次
k=5 #每天盯5次的概率
X=np.arange(0,k+1,1) #生成等差数组,arrange(start,stop,step)

#第二步:求对应分布的概率质量函数(PMF),返回一个列表,列表中每个元素表示随机变量中对应值的概率
plist=stats.poisson.pmf(X,mean)

#第3步:绘图
plt.plot(X,plist,marker='o',linestyle='None')
plt.vlines(X,0,plist)
#设置显示中文字体
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
#x轴文本
plt.xlabel('随机变量:盯人k次')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('泊松分布:均值mean=%i' % mean)
#显示图形
plt.show()

aba8a78b9651cbf1024f7fd95a845125.png

1.4 连续概率分布

  1. 正态分布[1];
  2. 幂律分布[2]

正态分布Python实现:

#导入包
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

#第一步,定义随机变量
mu=0   #均值
sigma=1  #标准差
X=np.arange(-5,5,0.1) #生成等差数组,arrange(start,stop,step)

#第二步:求对应分布的概率密度函数(PDF)
y=stats.norm.pdf(X,mu,sigma)

#第3步:绘图
plt.plot(X,y)
#设置显示中文字体
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
#x轴文本
plt.xlabel('随机变量:X')
#y轴文本
plt.ylabel('概率:y')
#标题
plt.title('正态分布:$mu$=%.1f,$sigma^2$=%.1f' %(mu,sigma))
#网格
plt.grid()
#显示图形
plt.show()

3c462317ebd937edce76218e55a97643.png

二、统计概率

2.1 总体和样本

总体是研究对象的全部,样本是从总体中抽出的部分单位集合,这个集合的大小叫做样本量样本个数指从总体中可能抽取的样本数[3],比如一个代销为500的样本,从中抽取100个调查,则样本个数为100。

83dd1cd9712fcfa6df4909119bc6072a.png

相关Python模块是随机数(random)包,randint()函数可生成随机数

#生成随机数x,x为a到b之间的数字(a<= x <=b)
import random
x = random.randint(a,b)
#案例,生成[0,9]之间的随机数a
a = random.randint(0,9)

用Python实现一个小抽奖:

#导入random(随机数)模块
import random
'''
range()函数创建一个整数列表,一般用在for循环中。
range(start,stop,step),计数从start开始,默认为0,不包括stop,
步长step默认为1.如range(0,5)等价于range(0,5,1)
'''
#抽奖,从1000个用户中随机抽取5个人作为中奖者
for i in range(1,6):
    userid=random.randint(1,1000)
    #用%s格式化字符串
    print('第 %s 位获奖用户id是 %s' % (i,userid))

7592676feaee5308ddb045fc51b4395b.png

pandas数据框DataFrame抽样方法:

import numpy as np  #数组包
import pandas as pd #数据分析包
'''
arange()函数产生一个含有5*4个元素的一维数组;
reshape:将数组转换为5行4列的二维数组
'''
df = pd.DataFrame(np.arange(5*4).reshape(5,4))
#随机选择一个n行的子集
sample1 = df.sample(n=3)
sample1

0d95228e5ffd88fffc1da146f2cd10a2.png

2.2 中心极限定理

4cf7dd313c83eb033bb4fcdd16f9f071.png

2.3 样本估计总体标准差

b22e362ca7b10c4088302db553d4193b.png
样本与总体

01a871f736525d4b068f1a22bf475fc7.png
标准差计算公式

16cb107b0fc13346b6748f374cd4a5e1.png
标准差和标准误差

cc97e4c2dae6844da52dac97a28f062c.png
标准误差计算公式

4aa74d0df931c63fb9717db275665483.png
样本平均值概率图

2.4 概率“偏见”

e1f5475259c3b6e5c377861f55627ef2.png

参考

  1. ^正态分布百科 https://baike.baidu.com/item/%E6%AD%A3%E6%80%81%E5%88%86%E5%B8%83
  2. ^幂律分布百科 https://baike.baidu.com/item/%E5%B9%82%E5%BE%8B%E5%88%86%E5%B8%83
  3. ^样本容量MBA智库百科 https://wiki.mbalib.com/wiki/%E6%A0%B7%E6%9C%AC%E5%AE%B9%E9%87%8F
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值