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

这类博客针对算法学习时可能遇到的数学知识补充,但不会太多废话,主要是公式结合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 scipyiris = 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 PDFplt.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) PDFplt.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 PDFplt.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) PDFplt.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 CDFplt.step(x_array,ecdf_y)# plot parametric (normal) CDFplt.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 statsfor 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.xdnf.cn/news/1522901.html

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

相关文章

【Webpack】基本使用方法

参考视频: 30 分钟掌握 Webpack_哔哩哔哩_bilibili 什么是webpack 简单来说就是一个 打包工具, 可以将互相依赖的html、css、js以及图片字体等资源文件,经过处理打包成一个可执行的项目文件 🌰看例子 环境初始化 在需要使用…

C语言 09 流程控制

if 如果需要判断某个条件&#xff0c;当满足此条件时&#xff0c;才执行某些代码&#xff0c;那这个时候该怎么办呢&#xff1f;可以使用if语句来实现&#xff1a; #include <stdio.h>int main() {int i 0;// 只希望i大于10的时候才执行下面的打印语句if (i > 10) …

YUM配置文件开启缓存

可设置一台服务器或者云主机作为外网YUM源&#xff0c;并且开启yum在线下载缓存&#xff0c;之后可将服务器所有安装包缓存同步到内网本地。 # vim /etc/yum.conf 将 “keepcache0” 改为 “keepcache1” 缓存目录为 /var/cache/yum/xxx/xxx/xxx 日后可下载到本地然后上传到…

024集—— 正则表达式、replace、DateTime日期的用法——C#学习笔记

DateTime 是一个struct结构体。 代码如下&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp1 {internal class Program{static void Main(string[] args){args new s…

HNU OS实验六

本内容针对湖南大学特色os实验前言 — os2024 lab 文档

ubuntu驱动掉了,重装nvidia驱动

跑深度学习&#xff0c;忽然发现显卡驱动掉了 主要根据这篇文章&#xff1a;[超级详细系列]ubuntu22.04配置深度学习环境(显卡驱动CUDAcuDNNPytorch)--[1]安装显卡驱动_ubuntu22 cuda cudnn pytorch-CSDN博客 用里面的在线安装方法不行&#xff0c;换成用2.2 离线安装方法。从…

动态路由和路由导航守卫及其案例分析

为什么需要动态路由&#xff1f; 动态路由其实用的不多&#xff0c;在实际开发中&#xff0c;如果遇到权限分配问题&#xff0c;比如对于一个公司人员的后台管理系统&#xff0c;那对不同成员的权限肯定不同&#xff0c;对于人事部&#xff0c;他们有权限进入成员表对人员的流…

云计算实训41——部署project_exam_system项目(续)

# 创建脚本&#xff0c;可以在java环境中运行任何的jar包或者war包#!/bin/bash/usr/local/jdk/bin/java -jar /java/src/*.?ar一、思路分析 &#xff08;1&#xff09;nginx 1、下载镜像&#xff0c;将本地的dist项目的目录挂载在容器的/usr/share/nginx/html/ 2、启动容器 …

性能工具之 JMeter ajax 简单登录案例实战

文章目录 一、前言二、前置工作三、登陆密码分析四、JMeter脚本开发四、登陆性能分析五、小结 一、前言 想起论语中的 “学而时习之不亦说乎” &#xff0c;也想找个开源项目实战一把&#xff0c;下面用一个开源ERP系统中的登陆做今天的实战。 二、前置工作 开源ERP项目地址…

getLocation:fail, the permission value is offline verifying

getLocation:fail, the permission value is offline verifying 后端会根据appid和secret生成 签名&#xff0c;前端wx配置时一定用appid来验证签名的正确 本次错误为配置初始化失败&#xff1a;前端与后端的appId不一致&#xff0c;我的失误也

IP 协议详解

一、认识 IP 地址与网络层的职责 网络层是OSI七层模型中的第三层&#xff0c;也是TCP/IP四层模型中的网络接入层。在这一层&#xff0c;数据包被封装并加上IP层的头部信息&#xff0c;以便在网络之间传输。网络层的主要功能包括路由选择、分段与重组、拥塞控制以及IP地址管理等…

stm32的内部时钟源 | RC震荡电路

文章目录 前言学习了解 前言 了解到 内部高速RC振荡器&#xff08;HSI&#xff09;就是RC震荡器实现的&#xff0c;故想对RC震荡做些了解与分析。 学习了解 【不需要晶振&#xff0c;也可产生时钟脉冲&#xff01;RC振荡器的工作原理&#xff0c;维恩电桥振荡器&#xff01;…

Mental-LLM——通过在线文本数据利用大型语言模型进行心理健康预测

概述 源码地址&#xff1a;https://github.com/neuhai/Mental-LLM.git 论文地址&#xff1a;https://arxiv.org/abs/2307.14385 在一项关于哪些法律硕士适合精神健康护理的研究中&#xff0c;对以下五种法律硕士进行了比较 羊驼-7b。羊驼-LoRA。FLAN-T5-XXLGPT-3.5GPT-4. 作…

AT+MQTT指令连接华为云实现数据上传

1 准备工作 硬件设备模块&#xff1a;ESP-01-S 固件烧录工具&#xff1a;ESP8266下载器 串口调试工具&#xff1a;VOFA参考文章&#xff1a;stm32AT指令ESP8266接入华为云物联网平台并完成属性上报与下发的命令处理 2 固件更新 2.1 为什么要重新安装固件 由于ESP-01-S模块出…

快速入门Go:Go + gin + MongoDB

Go 进阶:Go + gin + MongDB 极速搭建EcommerceSys电商系统 前言 本章节适合有一定基础的 Golang 初学者,通过简单的项目实践来加深对 Golang 的基本语法和 Web 开发的理解。 本文章持续更新中,请关注… 项目结构 项目流程图 技术栈(待补充)项目结构项目路由 (待补充) …

带你0到1之QT编程:三、打地基QMap的高效用法

此为QT编程的第三谈&#xff01;关注我&#xff0c;带你快速学习QT编程的学习路线&#xff01; 每一篇的技术点都是很很重要&#xff01;很重要&#xff01;很重要&#xff01;但不冗余&#xff01; 我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点&#xff01; 码…

KEYSIGHT U2020 X系列 USB峰值和均值功率传感器

​ _是德(KEYSIGHT) _ U2020 X系列 USB峰值和均值功率传感器 苏州新利通仪器仪表 U2020 X 系列功率传感器得到 Keysight BenchVue 软件的支持。使用 BenchVue 软件&#xff0c;您无需编程便可轻松控制功率计记录数据&#xff0c;并以各种形式显示测量结果。 只需将传感器…

计算机岗位(面试)

计算机岗位&#xff08;面试&#xff09; 计算机主要有哪几部分构成&#xff1f;计算机组成原理的内容&#xff1f; 计算机主要由‌硬件和软件‌两大部分构成。‌硬件部分包括五大基本组件&#xff1a;‌‌运算器、‌控制器、‌存储器、‌输入设备和输出设备‌‌。‌具体来说&a…

仿华为车机UI--图标从Workspace拖动到Hotseat同时保留图标在原来位置

基于Android13 Launcher3,原生系统如果把图标从Workspace拖动到Hotseat里则Workspace就没有了&#xff0c;需求是执行拖拽动作后&#xff0c;图标同时保留在原位置。 实现效果如下&#xff1a; 实现思路&#xff1a; 1.如果在workspace中拖动&#xff0c;则保留原来“改变图标…

【开源免费】基于SpringBoot+Vue.JS高校校园招聘服务系统(JAVA毕业设计)

本文项目编号 T 010 &#xff0c;文末自助获取源码 \color{red}{T010&#xff0c;文末自助获取源码} T010&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…