多元正态分布可视化

Beginner

This tutorial is from open-source community. Access the source code

简介

本实验使用 Python Matplotlib 探索多元正态分布上的各种归一化方法。在本实验中,你将学习线性归一化、幂律归一化,以及如何使用 Matplotlib 可视化多元正态分布。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。

导入库

在这一步中,你需要从 NumPy.random 中导入必要的库,即 MatplotlibNumPyMultivariate_normal

import matplotlib.pyplot as plt
import numpy as np
from numpy.random import multivariate_normal

设置随机状态

在这一步中,你需要设置随机状态以确保可重复性。

np.random.seed(19680801)

创建数据

在这一步中,你需要使用 multivariate_normal() 创建数据。此函数从多元正态分布中生成一个随机样本。

data = np.vstack([
    multivariate_normal([10, 10], [[3, 2], [2, 3]], size=100000),
    multivariate_normal([30, 20], [[3, 1], [1, 3]], size=1000)
])

创建直方图

在这一步中,你需要使用 hist2d() 创建一个直方图。hist2d() 函数用于创建二维直方图。

plt.hist2d(data[:, 0], data[:, 1], bins=100)

创建幂律归一化

在这一步中,你需要使用 PowerNorm() 创建幂律归一化。

plt.hist2d(data[:, 0], data[:, 1], bins=100, norm=mcolors.PowerNorm(gamma))

创建子图

在这一步中,你需要使用 subplots() 创建子图。

fig, axs = plt.subplots(nrows=2, ncols=2)

创建线性归一化

在这一步中,你需要创建线性归一化。

axs[0, 0].hist2d(data[:, 0], data[:, 1], bins=100)

创建幂律归一化

在这一步中,你需要使用不同的伽马值创建幂律归一化。

for ax, gamma in zip(axs.flat[1:], gammas):
    ax.hist2d(data[:, 0], data[:, 1], bins=100, norm=mcolors.PowerNorm(gamma))

设置标题

在这一步中,你需要为每个图表设置标题。

axs[0, 0].set_title('线性归一化')

for ax, gamma in zip(axs.flat[1:], gammas):
    ax.set_title(r'幂律 ($\gamma = %1.1f$)' % gamma)

紧凑布局

在这一步中,你需要调整子图之间的间距。

fig.tight_layout()

显示图表

在这一步中,你需要使用 show() 来显示图表。

plt.show()

总结

本实验使用 Python 的 Matplotlib 探索了多元正态分布上的各种归一化方法。你了解了线性归一化、幂律归一化,以及如何使用 Matplotlib 来可视化多元正态分布。