机器学习太难?这篇带你入门! | 第五期

Python大本营连载栏目第五期更新!

清华大学硕士,带你七天打卡机器学习知识点,分享实战案列,小伙伴们抓紧学习起来吧~

前言 | 当下机器学习、人工智能领域吸引了许多技术人才投身其中,数学知识繁杂的理论与思想方法是大家在学习过程中的难点,这篇专栏将机器学习涉及到的数学知识统一梳理出来,相信你可以有所收获。

机器学习第五天分享:离散型随机变量:分布与数字特征

01

从事件到随机变量

在前面两节内容中,我们介绍了事件概率的一些基本概念,有不清楚的小伙伴可戳下文拿小本本记下↓↓

第一天分享内容:从概率到条件概率

第二天分享内容:(机器学习概率统计理论基石:条件概率、独立性与贝叶

第三天分享内容:事件的关系:深入理解独立性1

第四天分享内容:事件的关系:深入理解独立性2

以上呢,主要是给大家找了找概率的“感觉”,对于“试验”、“试验结果”、“事件发生的概率”等等重要概念有了直观的认识,那么我们进一步来讨论一个新的概念:

我们可以把某一次具体试验中所有可能出现的结果构成一个样本空间,对于样本空间中的每一个可能的试验结果,我们去将他关联到一个特定的数。这种试验结果与数的对应关系就形成了随机变量,我们将试验结果所对应的数称为随机变量的取值。这里就是我们接下来要讨论的重要内容。

请注意这个概念中的一个关键点,随机变量如何取值?他可以直接就是试验的结果取值,比如“抛掷骰子的结果点数为55”

但是,随机变量更多的是这种情况,比如随机变量可以是“连续抛掷硬币1010次,其中硬币正面出现的次数”,或者是“转了一道弯”的映射值:我们把骰子连续抛掷两次,随机变量对应连续两次试验中的最大值或者点数之和,这就是映射的情况。但是无论如何,对于随机变量,都必须要明确对应具体的取值。

02

离散型随机变量及其要素

读者很容易联想到,随机变量作为一种映射后的取值,本质上和函数取值一样,可以有连续型和离散型两种,在这一小节里,我们主要讨论离散型的情况和应用场景,连续型的情况我们放在下一小节来讲解。

对于连续和离散的概念,大家脑海里的直观印象往往更加简单,但具体怎么用形式化的概念语言来描述他,反而要更繁琐一些,我们还是严格的对离散型随机变量做一个定义,即:随机变量的取值只能是有限多个或者是可数的无限多个值。

那么对于任意的我们获取的一组随机变量,我们最关注的是哪些要素呢?我来列举一下:

第一:随机变量的取值。**显然这个是我们首先需要关注的,由试验结果派生出的这一组随机变量到底能取到哪些值,这是我们首要关注的问题点。

第二:试验中每个对应取值的概率。**每个事件的结果肯定不是等概率的,这也恰恰就是我们研究的出发点。

第三:随机变量的统计特征和度量方法。**弄清楚随机变量每一个具体的取值,我们把握的是他的个体特征,那么我们如何从整个上来把握这一组随机变量的统计特征呢?这也是非常重要的。

结合三个问题,我们来讨论一下离散型随机变量的分布

03

离散型随机变量的分布列

分布列描述的就是离散型随机变量每一种取值及其对应的概率,随机变量一般用大写字母表示,其具体的取值一般用小写字母来表示,例如随机变量XX的分布列,我们一般用p_XpX,而用xx来表示随机变量XX的某个具体取值,因此把上述信息合起来就有:

随机变量XX取值为xx的概率,本质上也是一个事件的概率,这个事件就是 \{X=x\}{X=x},我们将他记作:P_X(x)=P(\{X=x\})PX(x)=P({X=x})。

为了更清楚的解释这个式子,我们还是回到抛硬币这个最简单的情况中来,随机变量XX表示两次抛掷硬币正面向上的次数,随机变量XX的分布列如下表所示:

取值001122其他
PP\frac{1}{4}41\frac{1}{2}21\frac{1}{4}4100

从上面的随机变量分布列中我们可以清晰的看出随机变量XX的每一种取值以及所对应的取值概率。例如,正面向上的次数为11时,对应的事件概率为 \frac{1}{2}21。

这个分布列虽然非常简单,但是麻雀虽小五脏俱全,下面我们来重点关注里面最重要的两个要点:

第一,对于随机变量XX的所有可能取值,其概率之和为11,表示成表达式就是:\sum_{x}{P_X(x)}=1∑xPX(x)=1

第二,对于随机变量XX的不同取值xx,对应的事件\{X=x\}{X=x}彼此之间是互不相容的。因此多个事件构成的事件集合SS的发生概率,可以通过对应事件发生的概率直接相加得到。即:P(X\inS)=\sum_{x\in S}{p_X(x)}P(X∈S)=∑x∈SpX(x)。

举个例子,比如我们想计算一下连续两次抛掷硬币,出现正面向上的概率为多大,这个事件集合实际上包含了两个事件:事件11是\{X=1\}{X=1},事件22是 \{X=2\}{X=2},二者彼此是互不相容的,我们按照上面的式子可以得出其概率:

P(X>0)=\sum_{x=1}^{2}{p_X(x)}=P_X(1)+P_X(2)=\frac{1}{2}+\frac{1}{4}=\frac{3}{4}P(X>0)=∑x=12pX(x)=PX(1)+PX(2)=21+41=43

04

分布列和概率质量函数PMF

一般情况下,我们最好是结合图形来观察一个随机变量的分布,这样一来,他的特性就能够非常直观的展现出来。

这里,就不得不提一下概率质量函数(PMFPMF),概率质量函数就是将随机变量的每个值映射到其概率上,看上去和分布列就是一回事儿。

以上,我们就讲清楚了离散型随机变量的基本概念,下面我们开始详细介绍几种常见且非常重要的随机变量,并且借助PythonPython工具来进行随机变量的生成和概率的展示。

05

二项分布及二项随机变量

5.1.分布列及PMF

我们还是举抛硬币的例子:将一个硬币抛掷nn次,每次抛掷出现正面的概率为pp,每次抛掷彼此之间都是相互独立的,随机变量XX对应nn次抛掷得到的是正面的次数。

这里,随机变量XX服从二项分布,二项分布中的核心参数就是上面提到的nn和pp,随机变量的分布列可以通过下面这个熟悉的公式计算得到:

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

下面我们通过依次指定不同的(n,p)(n,p)参数:(10,0.25)(10,0.25),(10,0.5)(10,0.5),(10,0.8)(10,0.8),来绘制PMFPMF图,来观察一下二项随机变量的分布情况:

代码片段:

from scipy.stats import binom
import matplotlib.pyplot as plt
import seaborn
seaborn.set()

fig, ax = plt.subplots(3, 1)
params = [(10, 0.25), (10, 0.5), (10, 0.8)]
x = range(0, 11)

for i in range(len(params)):
    binom_rv = binom(n=params[i][0], p=params[i][1])
    ax[i].set_title('n={},p={}'.format(params[i][0], params[i][1]))
    ax[i].plot(x, binom_rv.pmf(x), 'bo', ms=8)
    ax[i].vlines(x, 0, binom_rv.pmf(x), colors='b', lw=3)
    ax[i].set_xlim(0, 10)
    ax[i].set_ylim(0, 0.35)
    ax[i].set_xticks(x)
 ax[i].set_yticks([0, 0.1, 0.2, 0.3])
    
plt.show()

运行结果:

挺好看的一张图,我们来简要解释一下代码:

第11行: 生成服从指定参数nn, pp的二项分布随机变量。
第12行~第18行: 分别对其进行PMF图绘制,因为是离散型随机变量,因此不建议画成折线图,这种形态更为合适一些。

在这个例子中,我们直接通过scipyscipy中的statsstats模块得到的二项分布的概率质量函数,也就是反映了不同参数条件下,随机变量XX各取值点所对应的取值概率。

5.2.随机变量的采样

我们可以使用binombinom模块中的rvsrvs方法进行二项随机变量的采样模拟,我们可以指定所要采样的随机变量个数,这里指定重复采样1010万次。我们使用三组参数(n,p)(n,p):分别是(10,0.25)(10,0.25),(10,0.5)(10,0.5)和(10,0.8)(10,0.8)。

通过上述模拟采样试验可以得到每种实验结果所对应的次数,然后我们通过归一化,可以计算出随机变量每一种取值所对应的频数,并将其作为概率的近似进行绘图观察。

代码片段:

from scipy.stats import binom
import matplotlib.pyplot as plt
import seaborn
seaborn.set()

fig, ax = plt.subplots(3, 1)
params = [(10, 0.25), (10, 0.5), (10, 0.8)]
x = range(0, 11)
for i in range(len(params)):
    binom_rv = binom(n=params[i][0], p=params[i][1])
rvs = binom_rv.rvs(size=100000)
    ax[i].hist(rvs, bins=11, normed=True)
    ax[i].set_title('n={},p={}'.format(params[i][0], params[i][1]))
    ax[i].set_xlim(0, 10)
    ax[i].set_ylim(0, 0.4)
    ax[i].set_xticks(x)
    print('rvs{}:{}'.format(i, rvs))

plt.show()

运行结果:

rvs0:[0 4 2 ... 3 2 3]
rvs1:[6 6 5 ... 5 7 8]
rvs2:[7 8 9 ... 9 7 8]

程序打印的结果是三个数组,这就是我们在不同参数下分别做1010万次采样试验的结果数组。

5.3.随机变量的数字特征

服从二项分布的随机变量,他的期望和方差的表示很简单,服从参数为(n,p)(n,p) 的二项分布的随机变量XX,他的期望和方差的公式我们直接给出来:

期望:E[X]=npE[X]=np

方差:V[X]=np(1-p)V[X]=np(1−p)

我们可以结合上面的试验,用几种方法来验证一下上述结论:

代码片段:

import numpy as np
from scipy.stats import binom

binom_rv = binom(n=10, p=0.25)
mean, var, skew, kurt = binom_rv.stats(moments='mvsk')

binom_rvs = binom_rv.rvs(size=100000)
E_sim = np.mean(binom_rvs)
S_sim = np.std(binom_rvs)
V_sim = S_sim * S_sim

print('mean={},var={}'.format(mean,var))
print('E_sim={},V_sim={}'.format(E_sim,V_sim))
print('E=np={},V=np(1-p)={}'.format(10 * 0.25,10 * 0.25 * 0.75))

运行结果:

mean=2.5,var=1.875
E_sim=2.50569,V_sim=1.8735076238999997
E=np=2.5,V=np(1-p)=1.875

我们用三种方法计算了服从参数为(n=10,p=0.25)(n=10,p=0.25)的二项分布随机变量的均值和方差,其中:

第04行~第05行: 是用函数包中的方法计算的分布的各个理论统计值;
第07行~第10行: 从采样试验中得到的样本数据计算出来的均值和方差;
第14行: 通过公式直接计算出来的理论值。

看的出,利用采样样本数据计算出来的值和理论值基本上是相等的。

本期内容你get了吗?

好了,本次分享的内容就到这里,感觉有收获的同学,可以滑到文章底部,帮助老师分享点赞收藏,咱们明天见!

下期预告:离散型随机变量:分布与数字特征02。

注:以上内容及后续将要连续分享的内容,均来自张雨萌老师在CSDN专栏创作的《机器学习中的数学》

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

扫码下方二维码,

查看张老师更多的专栏内容

学习了解张老师的专栏内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值