生成多元随机变量

Python 中的蒙特卡洛模拟

Izzy Weber

Curriculum Manager, DataCamp

从多元分布采样

多项分布

  • 各变量分别服从二项分布
  • 各变量的概率之和为 1

 

示例:模拟偏置硬币投掷结果

scipy.stats.multinomial.rvs()
Python 中的蒙特卡洛模拟

从多元分布采样

多元正态分布

  • 各变量分别服从正态分布
  • 变量可相关也可不相关

 

示例:模拟价格与需求

scipy.stats.multivariate_normal.rvs()
Python 中的蒙特卡洛模拟

从多项分布采样

模拟:.rvs(n, p, size)

  • $n$:50
  • $p$:[0.2, 0.8]
  • size:500
results = st.multinomial.rvs(50,
    [0.2, 0.8], size=500)

df_results=pd.DataFrame( {"Head":results[:, 0], "Tail":results[:, 1]}) sns.pairplot(df_results)

偏置硬币采样的配对图

Python 中的蒙特卡洛模拟

从多元正态分布采样

模拟:.rvs(mean, size)

  • mean:[2, 6]
  • size:500
results=st.multivariate_normal.rvs(
    mean=[2, 6], size=500)

df_results=pd.DataFrame( {"Price":results[:, 0], "Demand":results[:, 1]}) sns.pairplot(df_results)

价格与需求采样结果的配对图

Python 中的蒙特卡洛模拟

协方差矩阵

  • 表示各变量的方差与协方差
  • 以两个随机变量 $x$ 与 $y$ 定义:

协方差矩阵结构

示例:

df_historical.cov()
|        | Price     | Demand   |
|--------|-----------|----------|
| Price  | 0.920545  | -0.85578 |
| Demand | -0.855780 | 0.98417  |
Python 中的蒙特卡洛模拟

按给定协方差采样多元正态

模拟:.rvs(mean, size)

  • mean:[2, 6]
  • size:500
  • cov:np.array([[1, -0.9], [-0.9, 1]])
cov_mat = np.array([[1,-0.9], [-0.9,1]])
results = st.multivariate_normal.rvs(
    mean=[2,6], size=500, cov=cov_mat)

df_results = pd.DataFrame( {"Price":results[:,0], "Demand":results[:,1]}) sns.pairplot(df_results)

结果的配对图

Python 中的蒙特卡洛模拟

Passons à la pratique !

Python 中的蒙特卡洛模拟

Preparing Video For Download...