Python大本营连载栏目第六期更新!
最近超火的专栏你们有get吗?
清华大学硕士,带你七天打卡机器学习知识点,分享实战案列,小伙伴们抓紧学习起来吧~
专栏作者介绍|
前言 |当下机器学习、人工智能领域吸引了许多技术人才投身其中,数学知识繁杂的理论与思想方法是大家在学习过程中的难点,这篇专栏将机器学习涉及到的数学知识统一梳理出来,相信你可以有所收获。
机器学习第六天分享:几何分布与几何随机变量与泊松分布及泊松随机变量
小编已经给大家整理好前五天学习内容,有不清楚的小伙伴可戳下文拿小本本记下↓↓
第二天分享内容:(机器学习概率统计)理论基石:条件概率、独立性与贝叶斯
01
几何分布与几何随机变量
6.1.几何分布的应用场景
我们在二项分布的基础上再来介绍几何分布,在连续抛掷硬币的试验中,每次抛掷出现正面的概率为pp,出现反面的概率为1-p1−p,在这种背景下,几何随机变量XX就用来表示连续抛掷硬币直到第一次出现正面所需要的抛掷次数。
或者我们再举一个庸俗直白点的例子,学校里有1010个白富美女生(假定她们互相不认识,保证独立性),你依次去找她们表白,只要有一个成功了,你就结束了单身狗的日子。
但是表白成功的概率为pp,当然,成功的概率肯定不大,但是你秉持着死皮赖脸、死缠烂打,不成功誓不罢休的精神,只要女神拒绝你的表白,就换一个女神继续表白,直到某一个女神答应你为止,那么你一共表白过的总的次数,就是几何型的随机变量。
这个逻辑是不是清晰明了
6.2.几何分布的PMF图
我们还是先绘制几何分布的PMFPMF图,方法和二项分布并无二致:
代码片段:
from scipy.stats import geom
import matplotlib.pyplot as plt
import seaborn
seaborn.set()
fig, ax = plt.subplots(2, 1)
params = [0.5, 0.25]
x = range(1, 11)
for i in range(len(params)):
geom_rv = geom(p=params[i])
ax[i].set_title('p={}'.format(params[i]))
ax[i].plot(x, geom_rv.pmf(x), 'bo', ms=8)
ax[i].vlines(x, 0, geom_rv.pmf(x), colors='b', lw=5)
ax[i].set_xlim(0, 10)
ax[i].set_ylim(0, 0.6)
ax[i].set_xticks(x)
ax[i].set_yticks([0, 0.1, 0.2, 0.3, 0.4, 0.5])
plt.show()
运行结果:
6.3.采样试验和数字特征
同样的,我们进行1010万次采样试验,来观察验证一下,同时观察他的统计特征。
代码片段:
from scipy.stats import geom
import matplotlib.pyplot as plt
import seaborn
seaborn.set()
x = range(1, 21)
geom_rv = geom(p=0.5)
geom_rvs = geom_rv.rvs(size=100000)
plt.hist(geom_rvs, bins=20, normed=True)
plt.gca().axes.set_xticks(range(1,21))
mean, var, skew, kurt = geom_rv.stats(moments='mvsk')
print('mean={},var={}'.format(mean,var))
plt.show()
运行结果:
总结一下,几何分布的期望和方差分别为:
E[X]=\frac{1}{p}E[X]=p1
V[X]=\frac{1-p}{p^2}V[X]=p21−p
02
泊松分布及泊松随机变量
7.1.泊松分布的应用场景
我们刚刚讲了,nn次独立的伯努利试验成功的次数是一个服从二项分布的随机变量,其中参数为nn和pp,期望为npnp。
我们这里看一种非常特殊的情况:就是nn非常大,pp非常小,但是期望npnp结果适中。
现实生活中有没有这类情况?
有,比如我们考虑任何一天内发生飞机事故的总数,记作随机变量XX,总共飞机飞行的次数nn非常大,但是单架次飞机出现事故的概率pp非常小。
或者用随机变量XX表示一本书中字印刷错误的次数,nn表示一本书中的总字数,非常大,而pp表示每个字印刷出错的概率,非常小。
这种情况下,nn很大pp很小,二项分布的分布列可以简化为我们这里谈到的泊松分布的分布列:
p_X(k)=e^{-\lambda}\frac{\lambda^k}{k!}pX(k)=e−λk!λk,其中,\lambda=npλ=np,k=0,1,2,...k=0,1,2,...
期望和方差满足:
E[X]=\lambdaE[X]=λ
V[X]=\lambdaV[X]=λ
特别的,当我们的n\rightarrow\inftyn→∞,且p=\lambda / n \rightarrow 0p=λ/n→0 时,对应的二项分布列:
p_X(k)=P(X=k)=\begin{pmatrix} n\\ k\end{pmatrix}p^k(1-p)^{n-k}pX(k)=P(X=k)=(nk)pk(1−p)n−k就收敛于上面的泊松分布列了。
通俗点说把,就是只要当\lambda=npλ=np,且nn非常大,pp非常小,泊松分布就是二项分布的一个非常好的近似。计算简便就是他的一个很大的优势。
7.2.泊松分布的PMF图
同样的,我们也用pythonpython代码来画一下他的PMFPMF函数图,对应的观察一下指定参数下泊松分布的分布列。
正如我们所说,泊松分布的参数就是一个\lambdaλ,我们分别绘制一个\lambda=10λ=10和\lambda=2λ=2的泊松分布PMFPMF图,并获取他们的均值和方差。
代码片段:
from scipy.stats import poisson
import matplotlib.pyplot as plt
import seaborn
seaborn.set()
fig, ax = plt.subplots(2, 1)
x = range(0, 20)
params = [10, 2]
for i in range(len(params)):
poisson_rv = poisson(mu=params[i])
mean, var, skew, kurt = poisson_rv.stats(moments='mvsk')
ax[i].plot(x, poisson_rv.pmf(x), 'bo', ms=8)
ax[i].vlines(x, 0, poisson_rv.pmf(x), colors='b', lw=5)
ax[i].set_title('$\\lambda$={}'.format(params[i]))
ax[i].set_xticks(x)
print('lambda={},E[X]={},V[X]={}'.format(params[i], mean, var))
plt.show()
运行结果:
lambda=10,E[X]=10.0,V[X]=10.0
lambda=2,E[X]=2.0,V[X]=2.0
同样的,我们对\lambda=2λ=2的泊松分布进行采样。
代码片段:
import numpy as np
from scipy.stats import poisson
import matplotlib.pyplot as plt
import seaborn
seaborn.set()
lambda_ = 2
data = poisson.rvs(mu=lambda_, size=100000)
plt.figure()
plt.hist(data, normed=True)
plt.gca().axes.set_xticks(range(0, 11))
print('mean=', np.mean(data))
print('var=', np.square(np.std(data)))
plt.show()
运行结果:
mean= 2.00542
var= 2.0082906236
这也是我们通过1010万次采样试验得出的统计结果,我们通过这个结果集计算了均值和方差,和模型的理论推导值是一致的。
离散型随机变量的内容就暂时到这,在下一节,我们将介绍连续型随机变量的有关内容。
本期内容学会了吗,抓紧分享小伙伴一起学习吧!
好了,本次分享的内容就到这里,感觉有收获的同学,可以滑到文章底部,帮助老师分享点赞收藏,咱们明天见!
下期预告:连续随机型变量:分布与数字特征。
注:以上内容及后续将要连续分享的内容,均来自张雨萌老师在CSDN专栏创作的《机器学习中的数学》。
扫码下方二维码,
查看张老师更多的专栏内容
学习了解张老师的专栏内容