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与算法社区

目录
相关文章
|
数据挖掘 索引 Python
Pandas 相关系数与协方差
Pandas 相关系数与协方差
sklearn.preprocessing.PolynomialFeatures多项式特征
sklearn.preprocessing.PolynomialFeatures多项式特征
123 0
|
人工智能 数据可视化 开发者
statsmodels 回归分析 | 学习笔记
快速学习 statsmodels 回归分析
statsmodels 回归分析 | 学习笔记
|
9月前
|
数据可视化 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 时,二项分布近似正态分布。练习包括模拟不同条件下的成功次数分布、比较不同试验次数的影响以及应用二项分布在考试成绩和及格率计算上。
|
9月前
|
机器学习/深度学习 数据采集 数据可视化
NumPy 正态分布与 Seaborn 可视化指南
该文档介绍了正态分布(高斯分布),包括它的简介、特征、生成正态分布数据的方法(使用 NumPy 的 `random.normal()` 函数)、如何用 Seaborn 可视化正态分布,以及正态分布的应用(如统计学、机器学习、金融和工程)。还提供了一些练习,如生成特定参数的正态分布随机数并绘图,以及比较不同标准差下的分布形状。最后,给出了练习的解决方案,展示了如何执行这些任务。
|
机器学习/深度学习 算法 数据可视化
轻松玩转 Scikit-Learn 系列 —— 你居然不知道 PCA ?
PCA 的全称是 Principal Component Analysis,翻译过来就是主成分分析法,是数据分析中常用的数据降维方法,亦是一种学习数据表示的无监督学习算法。在讨论 PCA 之前,让我们先考虑下机器学习中的数据。
304 0
轻松玩转 Scikit-Learn 系列 —— 你居然不知道 PCA ?
|
9月前
基于R语言实现LASSO回归分析
基于R语言实现LASSO回归分析
轻松玩转 Scikit-Learn 系列 —— 多项式回归 !
上次刚和小伙伴们学习过 PCA,PCA 主要用来降低数据特征空间的维度,以达到方便处理数据,减小计算开销,和数据降噪提高模型准确率的目的。
511 0
轻松玩转 Scikit-Learn 系列 —— 多项式回归 !

热门文章

最新文章