算法数学加油站:一元高斯分布(正态分布)Python精美科研绘图(PDF、CDF、PPF、ECDF曲线;QQ图)

news2024/9/21 8:03:24

这类博客针对算法学习时可能遇到的数学知识补充,但不会太多废话,主要是公式结合Python代码精美绘图理解!

本期重点:

参数:期望、标准差

曲线:概率密度曲线PDF、累积概率密度函数CDF、百分点函数PPF

应用:68-95-99.7法则、参数估计、经验分布函数ECDF、QQ图。

一、一元高斯分布基本知识

一元高斯分布,也即正态分布!

①PDF函数(对应概率密度):

期望影响PDF曲线的位置(位置参数),方差影响PDF的形状(形状参数),方差越大曲线越扁平,越小曲线越瘦高。

PDF曲线下的总面积为“1”,即PDF函数积分结果为“1”,这也是分母除以根号下2pi的缘故。

②CDF函数(对应概率值):

标准一元高斯分布的PDF和CDF曲线如下(y轴含义不同):

③百分点函数PPF(CDF的逆函数):

④Z分数(一种标准化度量尺度):

Z分数也叫标准分数,运算为如下:

这个过程也叫数据的标准化,样本数据的Z分数构成的分布——均值为0,方差为1,标准正态分布的Z值大小上等于样本X值,只不过Z分数无单位。(每一个x对应一个z,所有的z值数量与样本x数量对应)

标准正态分布中,以  z 值(在标准正态中z其实就是样本值x)为节点划分四类面积。z取不同值时,四类面积(概率值)不同,对应有一个 标准概率表格 ,这个表格在 Z检验(Z-test) 常被用到。
Z分数可以看作一种 标准化的“距离度量”。原始样本X的Z分数表示 距离均值若干倍的标准差偏移,如某个样本数据点x对应z值为3,说明这个数据点距均值有3倍的标准差偏移(右偏)——表示一个 偏移的倍数!!!
有了Z分数,不同分布、不同单位的样本数据有了可比性,如下是鸢尾花数据集四个特征的Z分数:(横轴是Z分数值,纵轴是概率密度)
#导入库与数据集
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_iris
from statsmodels.distributions.empirical_distribution import ECDF
from scipy.stats import norm
import scipy

iris = load_iris()
X = iris.data
y = iris.target
feature_names = ['Sepal length, $X_1$','Sepal width, $X_2$',
                 'Petal length, $X_3$','Petal width, $X_4$']

x_array = np.linspace(0,8,100)
# Convert X array to dataframe
X_df = pd.DataFrame(X, columns=feature_names)

计算Z分数然后绘制图像代码如下: 

# %% generate Z score
z_array = np.linspace(-4, 4, 100)
Z_score_df = (X_df - X_df.mean()) / X_df.std()

for feature in feature_names:
    sample = Z_score_df[feature]

    hist = np.histogram(sample, bins=40, range=(-4, 4))
    hist_dist = scipy.stats.rv_histogram(hist)

    mu = sample.mean()
    std = sample.std()
    N_pdf = norm.pdf(z_array, loc=mu, scale=std)
    epdf_y = hist_dist.pdf(z_array)
    fig, ax = plt.subplots()

    # plot empirical PDF
    plt.step(z_array, epdf_y, color='#0070C0')
    ax.fill_between(z_array, epdf_y, step="pre", color='#DBEEF3')
    plt.axvline(x=mu, color='r', linestyle='--')
    plt.axvline(x=mu + std, color='r', linestyle='--')
    plt.axvline(x=mu - std, color='r', linestyle='--')

    # plot parametric (normal) PDF
    plt.plot(z_array, N_pdf, 'r')
    plt.xlabel(feature.replace('X', 'Z') + ' ($\sigma$)')
    plt.ylabel('PDF, probability density')
    plt.gca().spines['right'].set_visible(False)
    plt.gca().spines['top'].set_visible(False)
    plt.gca().yaxis.set_ticks_position('left')
    plt.gca().xaxis.set_ticks_position('bottom')
    plt.xlim(-4, 4)
    plt.ylim(0, 1)
    plt.yticks(np.linspace(0, 1, 6))
    plt.grid(color=[0.7, 0.7, 0.7])
    plt.show()

这样不同的四个特征用Z分数标准化后,变得可比!!


68-95-99.7法则不说了,大家都知道68%、95%、99.7%分别对应距离均值1倍、2倍、3倍标准差的偏移。


二、参数估计——估计概率密度

机器学习中,概率密度估计是一个常见问题——从离散的样本数据中估计得到连续的概率密度函数曲线。

#%% compare PDF curves
for feature in feature_names:

    sample = X_df[feature]
    hist = np.histogram(sample, bins=30, range = (0,8))
    hist_dist = scipy.stats.rv_histogram(hist)

    mu  = sample.mean()
    std = sample.std()

    N_pdf = norm.pdf(x_array, loc = mu, scale = std)

    epdf_y = hist_dist.pdf(x_array)

    fig, ax = plt.subplots()

    # plot empirical PDF
    plt.step(x_array,epdf_y, color = '#0070C0')
    ax.fill_between(x_array, epdf_y, step="pre", color = '#DBEEF3')

    plt.axvline(x=mu, color = 'r', linestyle = '--')
    plt.axvline(x=mu + std, color = 'r', linestyle = '--')
    plt.axvline(x=mu - std, color = 'r', linestyle = '--')

    # plot parametric (normal) PDF
    plt.plot(x_array,N_pdf, 'r')

    plt.xlabel(feature)
    plt.ylabel('PDF, probability density')
    plt.gca().spines['right'].set_visible(False)
    plt.gca().spines['top'].set_visible(False)
    plt.gca().yaxis.set_ticks_position('left')
    plt.gca().xaxis.set_ticks_position('bottom')
    plt.xlim(0,8)
    plt.ylim(0,1)
    plt.yticks(np.linspace(0,1,5))
    plt.grid(color = [0.7,0.7,0.7])
    plt.show()
用一元高斯分布估计单一特征概率密度函数很简单;但是问题很明显,如上图鸢尾花数据集前两个特征估计效果很好,但是 后两个特征似乎用一元高斯分布进行估计不太合适。——后续将会用 核密度估计解决这一问题。

三、经验分布函数(ECDF)

经验分布函数(ECDF)是一个用来描述样本数据分布情况的统计工具,可以理解为数据的实际概率分布

  • 将数据按大小排序
  • 计算每个数据点对应的累积比例,形成类似阶梯函数的曲线
  • 横坐标为样本数据取值,纵坐标表示小于等于横坐标的数据比例(实际的)
  • 双射函数,每个输入正好有一个输出,每个输出值正好都有一个输入值
  • 与CDF分布函数(估计的、理想的)比较,以检验数据是否符合某种假设的分布。下面是鸢尾花4个特征的ECDF和CDF对比图代码和结果:
  • #%% compare CDF curves
    for feature in feature_names:
    
        sample = X_df[feature]
        mu  = sample.mean()
        std = sample.std()
    
        N_cdf = norm.cdf(x_array, loc = mu, scale = std)
        ecdf = ECDF(sample)
        ecdf_y = ecdf(x_array)
    
        fig, ax = plt.subplots()
    
        # plot empirical CDF
        plt.step(x_array,ecdf_y)
    
        # plot parametric (normal) CDF
        plt.plot(x_array,N_cdf, 'r')
    
        plt.axvline(x=mu, color = 'r', linestyle = '--')
        plt.axvline(x=mu + std, color = 'r', linestyle = '--')
        plt.axvline(x=mu - std, color = 'r', linestyle = '--')
    
        plt.xlabel(feature)
        plt.ylabel('CDF, probability')
        plt.gca().spines['right'].set_visible(False)
        plt.gca().spines['top'].set_visible(False)
        plt.gca().yaxis.set_ticks_position('left')
        plt.gca().xaxis.set_ticks_position('bottom')
        plt.xlim(0,8)
        plt.ylim(0,1)
        plt.yticks(np.linspace(0,1,5))
        plt.grid(color = [0.7,0.7,0.7])
        plt.show()
  • 据此更可以形象的看出,后两个鸢尾花特征的数据分布是不太适合用一元高斯分布进行描述的!


 三、分位-分位图(QQ图)

  • “Q”代表分位数二分位数即中位数;四分位数把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数,例如第一四分位数(Q1),等于该样本中所有数值由小到大排列后第25%的数字;第二四分位数(Q2)即中位数;
  • QQ图是散点图,横坐标为假定分布(如标准正态)的分位数,纵坐标为待检验样本的分位数——类似于理想与实际;
  • 比较相似度,若完全符合假定分布则QQ图呈现理想y=x的对角线;
  • QQ图横坐标一般是正态分布,也可是其他分布;
  • 也用于检查数据是否符合某个分布的统计图形,可以看作ECDF曲线的另一种可视化方式
#%% QQ plot
import pylab
import scipy.stats as stats

for feature in feature_names:

    sample = X_df[feature]
    mu  = sample.mean()
    std = sample.std()

    fig = plt.figure(figsize=(7, 7))
    stats.probplot(sample, dist="norm", plot=pylab)


    plt.axhline(y=mu, color = 'r', linestyle = '--')
    plt.axhline(y=mu + std, color = 'r', linestyle = '--')
    plt.axhline(y=mu - std, color = 'r', linestyle = '--')
    plt.axhline(y=mu + 2*std, color = 'r', linestyle = '--')
    plt.axhline(y=mu - 2*std, color = 'r', linestyle = '--')

    plt.axvline(x=0, color = 'r', linestyle = '--')
    plt.axvline(x=1, color = 'r', linestyle = '--')
    plt.axvline(x=-1, color = 'r', linestyle = '--')
    plt.axvline(x=2, color = 'r', linestyle = '--')
    plt.axvline(x=-2, color = 'r', linestyle = '--')

    plt.xlabel('Theoretical (standard normal) quantiles')
    plt.ylabel('Empirical quantiles')
    pylab.show()


实际应用中,高斯分布常用于建模和分析连续数据;在数据分析机器学习中,高斯分布被广泛用于分类、聚类、离群点检测等问题!

仅仅一元高斯分布还不够,后续将继续二元、多元高斯分布、条件高斯分布、协方差矩阵等!

如有兴趣欢迎订阅该专栏,和我一起领略机器学习算法的奥妙!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2094779.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

14:LDO电源模块的布局

1.器件要和边框相聚5mm的距离作为工艺边,工艺边可以布线,但不能摆放器件 LDO布局原则 ①输出靠近负载端 和DCDC布局一样

Springcloud微服务合并打包,重复路径引发的血案

你好,我是柳岸花开。 在微服务架构的世界里,各种服务之间的接口调用犹如人类的神经系统,构成了整个系统的核心。然而,正是这些看似简单的接口路径,可能会引发一场惊天血案。今天,我们就来揭开一起因“重复路…

Git高手必备:掌握这些指令,轻松玩转版本控制(一)

前言 注:本文下的除非特殊声明,否则一律不作为实际加号,仅表示连接 所有的版本控制系统,只能跟踪文本文件的改动比如txt文件,网页,所有程序的代码等,能清楚的知道改动了什么。但是类似于图片、…

嵌入式全栈开发学习笔记---Linux系统编程(文件编程)

目录 Linux文件概述 系统IO 创建文件creat() 打开文件open() 写文件write() 读文件read() 文件指针---lseek() 系统IO拷贝 标准IO 标准IO和系统IO的区别 缓冲区的分类 行缓存测试 打开文件fopen() 写文件fwrite() 读文件read() 标准IO拷贝 标准IO和系统IO的效…

实践:根据时区显示时间

背景 在数据库中存储时间,不会自动对时区进行处理,要想针对不同时区作时间显示的适配,需要在程序中做适配,本文即为解决这一问题的实践案例。 数据库存 UTC 时间 插入记录时,使用 datetime.utcnow()获取当前 utc 时…

MFCC C++实现与Python库可视化对比

MFCC C实现与Python库对比 MFCC理论基础 在音频、语音信号处理领域,我们需要将信号转换成对应的语谱图(spectrogram),将语谱图上的数据作为信号的特征。语谱图的横轴x为时间,纵轴y为频率,(x,y)对应的数值代表在时间x时频率y的幅…

动作损失 ​ 的定义

动作损失 La是在弱监督时间动作定位(Weakly-Supervised Temporal Action Localization, WSTAL)任务中用于优化模型的一种损失函数。它的主要目标是确保模型能够准确地预测视频中动作发生的时间段,并对视频级别标签进行良好的分类。下面是对动…

【Python系列】 Python 中的枚举使用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

PyTorch中,动态调整学习率(Learning Rate Scheduling),也可以根据损失函数的损失数值自动调整学习率

在PyTorch中,动态调整学习率(Learning Rate Scheduling)是一种常用的技术, 用于在训练过程中根据一定的策略调整学习率,以优化模型的训练效果和收敛速度。以下是一些常见的学习率调整策略: 1. **固定步长…

金融科技初创企业建设指南

金融科技领域正以前所未有的速度发展,重塑我们与金钱和金融服务的互动方式。随着我们迈向 2025 年,尖端技术的融合、不断变化的消费者期望以及全球对金融包容性的推动正在创造前所未有的机遇。创新者现在有独特的机会在金融科技领域留下自己的印记。 以下几个因素使得即将到…

<计算机网络>笔记1: TCP/IP五层协议

<计算机网络>笔记1: TCP/IP五层协议 文章目录 <计算机网络>笔记1: TCP/IP五层协议ref1. 概述名词因特网组成性能指标TCP/IP模型: 实际普及全球的协议 2. 物理层3. 数据链路层点对点信道3.1. 基本问题3.3.2 点对点协议PPP Point-to-Point Protocol3.3.3. 使用广播信…

力扣3272.统计好整数的数目

力扣3272.统计好整数的数目 贪心 枚举所有回文数&#xff0c;再找不重复的排列组合 因为是个回文数&#xff0c;所有只找左半边即可 最终排列组合的个数为上式 class Solution {public:long long countGoodIntegers(int n, int k) {vector<long long> fac(n1);fa…

Nuxt 项目实战 - 15:自定义unocss规则,让编写样式更高效

与UI设计师约定颜色命名规则 配置color变量 color.scss $colors: ((#ffffff,#f8f8f8,#ebebeb,#dbdbdb,#cccccc,#999999,#666666,#333333,#000000),(#daf6ef, #b4ecde, #08c193, #228f73, #43d7b2),(#f62f3b, #edc9c9, #f0e2e2, #ffecea, #f78185),(#f2f5f8, #e3e8eb, #c3cace, …

永恒之蓝漏洞复现记录

准备工作 实验环境搭建 下载并安装VMware Workstation软件查看VMware的虚拟网卡和虚拟网络设置安装Windows虚拟机镜像和Kali linux虚拟机镜像 实验目的 掌握Windows网络服务远程渗透攻击基本理论知识。掌握Windows漏洞及漏洞利用方法原理。掌握Windows网络服务远程渗透攻击…

Spring02——bean基础配置、bean实例化——构造方法/静态工厂/实例工厂与FactoryBean、bean的生命周期

IOC相关内容 通过前面两个案例&#xff0c;我们已经学习了bean如何定义配置&#xff0c;DI如何定义配置以及容器对象如何获取的内容&#xff0c;接下来主要是把这三块内容展开进行详细的讲解。 bean基础配置bean实例化——构造方法bean实例化——静态工厂bean实例化-实例工厂…

笔记整理—内核!启动!—uboot部分(3)uboot启动内核传参

uboot会以tag的方式给内核传递参数&#xff0c;tag是一个数据结构&#xff0c;在uboot中与linux_kernel中都有相同的结构。 kernel接收到的传参由若干个tag构成&#xff0c;从tag_start到tag_end之间的数据构成&#xff0c;读到start时开始传参&#xff0c;end结束传参。 CON…

算法专利复现_基于ngboost和SHAP值可解释预测方法

大家好&#xff0c;我是重庆未来之智的Toby老师&#xff0c;最近看到一篇专利&#xff0c;名称是《基于NGBoost和SHAP值的可解释地震动参数概率密度分布预测方法》。该专利申请工日是2021年3月2日。 专利复现 我看了这专利申请文案后&#xff0c;文章整体布局和文字内容结构不错…

算法基础-区间合并

1、按照区间的左端点排序 2、 左端点小于等于ed&#xff0c;只需要更新ed和右端点的最大值 左端点大于ed&#xff0c;存入res中&#xff0c;并更新st和ed&#xff0c;最后一组数据手动插入res public class Main {public static void main(String[] args) {Scanner in new S…

Pinterest账号被封?试试这几种解封方法

Pinterest作为一个充满创意与灵感的视觉社交平台&#xff0c;吸引着大量用户和企业前来展示、收藏和分享他们的作品。然而&#xff0c;如同其他社交媒体平台一样&#xff0c;Pinterest也设立了一套严格的使用规则和监测机制&#xff0c;以保障平台内容的质量和用户的良好体验。…

景联文科技提供运动数据采集服务

运动数据的重要性 运动数据的收集与分析对于提升个人健康管理和运动表现具有重要意义。 通过收集心率、步态、速度等生理和运动参数&#xff0c;不仅可以为运动员提供个性化的训练方案&#xff0c;帮助其优化表现&#xff0c;还能早期发现并预防伤病。对于普通健身者而言&…