Matplotlib-实现常见概率分布

简介: Matplotlib-实现常见概率分布

本次实验所用的4种常见分布,连续分布的代表:beta分布、正态分布,均匀分布,离散分布的代表:二项分布


1、导入模块


import numpy as np
from scipy.stats import beta, norm, uniform, binom
import matplotlib.pyplot as plt
from functools import wraps


2、定义带四个参数的画图装饰器


绘图装饰器带有四个参数分别表示legend的2类说明文字,y轴label, 保存的png文件名称。


# 定义带四个参数的画图装饰器
def my_plot(label0=None,
            label1=None,
            ylabel='probability density function',
            fn=None):
    def decorate(f):
        @wraps(f)
        def myplot():
            fig = plt.figure(figsize=(16, 9))
            ax = fig.add_subplot(111)
            x, y, y1 = f()
            ax.plot(x, y, linewidth=2, c='r', label=label0)
            ax.plot(x, y1, linewidth=2, c='b', label=label1)
            ax.legend()
            plt.ylabel(ylabel)
            plt.show()
            plt.savefig('img/%s' % (fn, ))
            plt.close()
        return myplot
    return decorate


3、均匀分布(uniform)


从图中可看出,红色概率密度函数只在0~1才会发生,曲线与x轴的0~1区间所封闭的面积为全概率1.0.


@my_plot(label0='b-a=1.0', label1='b-a=2.0', fn='uniform.png')
def unif():
    x = np.arange(-0.01, 2.01, 0.01)
    y = uniform.pdf(x, loc=0.0, scale=1.0)
    y1 = uniform.pdf(x, loc=0.0, scale=2.0)
    return x, y, y1

ed7551e6e0fa4c3f9027460ef12d5b32.png


4、二项分布


红色曲线表示发生一次概率为0.3,重复50次的密度函数,二项分布期望值为0.3*50 = 15次。看到这50次实验,很可能出现的次数为10~20.可与蓝色曲线对比分析。


@my_plot(
    label0='n=50,p=0.3',
    label1='n=50,p=0.7',
    fn='binom.png',
    ylabel='probability mass function')
def bino():
    x = np.arange(50)
    n, p, p1 = 50, 0.3, 0.7
    y = binom.pmf(x, n=n, p=p)
    y1 = binom.pmf(x, n=n, p=p1)
    return x, y, y1


c04ad961c706417c98bd0693ae9ed47d.png

5、高斯分布


红色曲线表示均值为0,标准差为1.0的概率密度函数,蓝色曲线的标准差更大,所以它更矮胖,显示出取值的多样性,和不稳定性。


@my_plot(label0='u=0.,sigma=1.0', label1='u=0.,sigma=2.0', fn='guass.png')
def guass():
    x = np.arange(-5, 5, 0.1)
    y = norm.pdf(x, loc=0.0, scale=1.0)
    y1 = norm.pdf(x, loc=0., scale=2.0)
    return x, y, y1

91e3dc0ab4884d39925a41a47a198470.png


6、beta分布


@my_plot(label0='a=10., b=30.', label1='a=4., b=4.', fn='beta.png')
def bet():
    x = np.arange(-0.1, 1, 0.001)
    y = beta.pdf(x, a=10., b=30.)
    y1 = beta.pdf(x, a=4., b=4.)
    return x, y, y1


0e7dc0e2d080453eb0faa55d88a9867f.png

7、绘制所有四种分布


distrs = [unif, bino, guass, bet]
for distri in distrs:
    distri()


部分代码来源于公众号:Python与算法社区

目录
相关文章
|
1月前
|
Python
用scipy解决最优化问题
用scipy解决最优化问题
|
13天前
|
Python
NumPy中的直方图
【6月更文挑战第12天】NumPy中的直方图。
9 1
|
13天前
|
Python
NumPy中的二维直方图
【6月更文挑战第12天】NumPy中的二维直方图。
10 1
|
25天前
|
机器学习/深度学习 数据采集 数据可视化
NumPy 正态分布与 Seaborn 可视化指南
该文档介绍了正态分布(高斯分布),包括它的简介、特征、生成正态分布数据的方法(使用 NumPy 的 `random.normal()` 函数)、如何用 Seaborn 可视化正态分布,以及正态分布的应用(如统计学、机器学习、金融和工程)。还提供了一些练习,如生成特定参数的正态分布随机数并绘图,以及比较不同标准差下的分布形状。最后,给出了练习的解决方案,展示了如何执行这些任务。
|
26天前
|
Python
NumPy中的直方图
NumPy中的直方图。
19 3
|
27天前
|
数据可视化 Python
NumPy 泊松分布模拟与 Seaborn 可视化技巧
泊松分布是描述单位时间间隔内随机事件发生次数的离散概率分布,参数λ表示平均速率。公式为 P(k) = e^(-λ) (λ^k) / k!。NumPy 的 `random.poisson()` 可生成泊松分布数据。当 λ 很大时,泊松分布近似正态分布。练习包括模拟顾客到达、比较不同 λ 下的分布及模拟电话呼叫中心。使用 Seaborn 可进行可视化。关注公众号 `Let us Coding` 获取更多文章。
40 1
|
26天前
|
数据可视化 Python
NumPy 二项分布生成与 Seaborn 可视化技巧
二项分布是描述固定次数独立试验中成功次数的概率分布,常用于分析如抛硬币、选择题等二元结果事件。分布由试验次数 n、每次试验的成功概率 p 和成功次数 k 定义。公式为 P(k) = C(n, k) * p^k * (1 - p)^(n - k)。NumPy 的 `random.binomial()` 可生成二项分布随机数,Seaborn 可用于可视化分布。当 n 很大且 p 接近 0.5 时,二项分布近似正态分布。练习包括模拟不同条件下的成功次数分布、比较不同试验次数的影响以及应用二项分布在考试成绩和及格率计算上。
|
1月前
|
Python
matplotlib-直方图
matplotlib-直方图
|
1月前
|
Python
手推反向传播+numpy实现
手推反向传播+numpy实现
26 0
|
1月前
|
数据可视化
R语言画ROC曲线总结
R语言画ROC曲线总结