- 随机变量记作 X X X,观测值记作 x x x,观测值只是数字而已,没有随机性,如 P ( X = 0 ) = 1 2 P(X=0)=\frac{1}{2} P(X=0)=21中为大写;
- 给定随机变量
X
X
X,它的累积分布函数(即概率分布函数)(CDF)是函数
F
X
:
R
→
[
0
,
1
]
F_X:R\to[0,1]
FX:R→[0,1],定义为:
F X ( x ) = P ( X ≤ x ) F_X(x)=P(X\le x) FX(x)=P(X≤x) - 对于离散概率分布,有概率质量函数
p
(
x
)
p(x)
p(x),假设随机变量
X
X
X取值范围是集合
χ
\chi
χ
则有: ∑ x ∈ χ p ( x ) = 1 \sum_{x\in \chi}^{} p(x)=1 x∈χ∑p(x)=1 , X X X的概率质量函数为 p ( ⋅ ) p(\cdot) p(⋅),则函数 h ( X ) h(X) h(X)关于变量 X X X的期望是
E X ∼ p ( ⋅ ) [ h ( X ) ] = ∑ x ∈ χ p ( x ) ⋅ h ( x ) E_{X\sim p(\cdot)}[h(X)]=\sum_{x\in \chi}^{}p(x)\cdot h(x) EX∼p(⋅)[h(X)]=x∈χ∑p(x)⋅h(x) - 对于连续概率发布,有概率密度函数
p
(
x
)
p(x)
p(x),随机变量
X
X
X的取值范围
χ
\chi
χ是连续集合,则有:
∫
−
∞
x
p
(
u
)
d
u
=
F
X
(
x
)
=
P
(
X
≤
x
)
\int_{-\infty }^{x} p(u)du=F_X(x)=P(X\le x)
∫−∞xp(u)du=FX(x)=P(X≤x)
∫
−
∞
+
∞
p
(
u
)
d
u
=
1
\int_{-\infty }^{+\infty} p(u)du=1
∫−∞+∞p(u)du=1,
X
X
X的概率密度函数为
p
(
⋅
)
p(\cdot)
p(⋅),则函数
h
(
X
)
h(X)
h(X)关于变量
X
X
X的期望是
E X ∼ p ( ⋅ ) [ h ( X ) ] = ∫ χ p ( x ) ⋅ h ( x ) d x E_{X\sim p(\cdot)}[h(X)]=\int_{\chi}p(x)\cdot h(x)dx EX∼p(⋅)[h(X)]=∫χp(x)⋅h(x)dx
例一、近似 π \pi π值
import torch
m = 0
n = 100000
for i in range(n):
x,y = 2*torch.rand(1)-1,2*torch.rand(1)-1
if torch.pow(x,2)+ torch.pow(y,2) <= 1:
m = m+1
pi = 4 * m / n
print(pi)
输出:3.13528
# 2.2节,蒙特卡洛近似计算圆周率。
import numpy as np
def approxiate_pi(n: int):
# 在[-1, 1] x [-1, 1]的空间中随机取n个点。
x_lst = np.random.uniform(-1, 1, size=n)
y_lst = np.random.uniform(-1, 1, size=n)
# 统计距离圆心距离在1以内的点。
m = 0
for x, y in zip(x_lst, y_lst):
if x ** 2 + y ** 2 <= 1:
m += 1
# 近似计算圆周率。
pi = 4 * m / n
return pi
if __name__ == "__main__":
pi = approxiate_pi(100)
print("100个点近似的圆周率:", pi)
pi = approxiate_pi(10000)
print("10000个点近似的圆周率:", pi)
pi = approxiate_pi(1000000)
print("1000000个点近似的圆周率:", pi)
输出:100个点近似的圆周率: 3.08
10000个点近似的圆周率: 3.1352
1000000个点近似的圆周率: 3.141
例二、计算阴影部分面积
import torch
m = 0
n = 100000
for i in range(n):
x,y = 2*torch.rand(1),2*torch.rand(1)
if ((x-1)**2+(y-1)**2<=1) & (x**2+y**2>4):
m = m+1
s = 4 * m / n
print(s)
输出:0.59632
例三、计算近似期望
假设用期望计算 ∫ 0 3 x 2 3 d x \int_{0}^{3}x^\frac{2}{3}dx ∫03x32dx
q=0
t=1
n=10000
def f(x):
return x ** (2/3)
for i in range(n):
a = torch.rand(1) * 3
q = (1-1/t) * q + (1/t) * f(a)
t = t+1
print(q)
输出:tensor([1.2374])
第二章习题2.2
# 方法1
import torch
n = 10000
f = 0
for i in range(n):
x = torch.normal(mean=1,std=2,size=(1,))
f = 2*x+10*torch.sqrt(torch.abs(x))+3+f
print(f/n)
输出:tensor([17.3412])
```python
# 方法2
import torch
n = 10000
q=0
t=1
def f(x):
return 2*x+10*torch.sqrt(torch.abs(x))+3
for i in range(n):
x = torch.normal(mean=1,std=2,size=(1,))
q = (1-1/t)*q+1/t * f(x)
t = t+1
print(q)
输出:tensor([17.3020])