Python:三维空间的概率密度函数(附代码数据集)

概率密度函数

大家肯定都有听说过正态分布,其实正态分布只是概率密度分布的一种,正态分布的概率密度函数均值为μ ,标准差σ是高斯函数的一个实例:
f ( x ; μ , σ ) = 1 σ 2 π exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) f(x ; \mu, \sigma)=\frac{1}{\sigma \sqrt{2 \pi}} \exp \left(-\frac{(x-\mu)^{2}}{2 \sigma^{2}}\right) f(x;μ,σ)=σ2π 1exp(2σ2(xμ)2)
在一维上只有x一个变量,μ 均值,σ标准差。
正态分布具有两个参数μ和σ的连续型随机变量的分布,第一
参数μ是服从正态分布的随机变量的均值,第二个参数σ^2是此随机变量的方差,所以正态分布记作N(μ,σ2)。

实际工作中,正态曲线下横轴上一定区间的面积反映该区间的例数占总例数的百分比,或变量值落在该区间的概率。

因此一维的概率密度分布即正态分布,很好的表示数据在哪个区间集中,使我们对整体数据有一个大概的把握。

本文的重点在于二维概率密度函数:
f ( x , y ) = ( 2 π σ 1 σ 2 1 − ρ 2 ) − 1 exp ⁡ [ − 1 2 ( 1 − ρ 2 ) ( ( x − μ 1 ) 2 σ 1 2 − 2 ρ ( x − μ 1 ) ( y − μ 2 ) σ 1 σ 2 + ( y − μ 2 ) 2 σ 2 2 ) ] f(x, y)=\left(2 \pi \sigma_{1} \sigma_{2} \sqrt{1-\rho^{2}}\right)^{-1} \exp \left[-\frac{1}{2\left(1-\rho^{2}\right)}\left(\frac{\left(x-\mu_{1}\right)^{2}}{\sigma_{1}^{2}}-\frac{2 \rho\left(x-\mu_{1}\right)\left(y-\mu_{2}\right)}{\sigma_{1} \sigma_{2}}+\frac{\left(y-\mu_{2}\right)^{2}}{\sigma_{2}^{2}}\right)\right] f(x,y)=(2πσ1σ21ρ2 )1exp[2(1ρ2)1(σ12(xμ1)2σ1σ22ρ(xμ1)(yμ2)+σ22(yμ2)2)]
因为生活中的很多数据都是高维度的,从简单的二维说起。二维上的数据生活中有很多:身高和体重,血压和血脂等等。如果能够像一维正态分布那样做出图像来看,就十分直观,而本文就是介绍如何作二维概率密度函数的图像。

数据集

首先贴上数据集:
链接: https://pan.baidu.com/s/1RJCwi4-8_hByY6-rCepJgQ
提取码:88ew

数据是截至4.25日的重点国家新冠肺炎感染人数,有中国、美国、法国、意大利等。
本文采取的是中国和意大利进行对比分析。

import numpy as np
import matplotlib.pyplot as plt
import math
import mpl_toolkits.mplot3d
import math
import pandas as pd

data = pd.read_csv('D:/桌面/1.csv')
print(data.head())
x = data.iloc[:,1]
y = data.iloc[:,7]
x = x.values
y = y.values

在这里插入图片描述

实战

首先根据公式我们先把2个维度的均值和方差分别计算出来,以及公式中需要的相关系数。


u1 = x.mean()
u2 = y.mean()
o1 = x.std()
o2 = y.std()
from scipy.stats import pearsonr
p = pearsonr(x, y)[0]
print(u1, u2, o1, o2, p)
 
# 输出:(r, p)
# r:相关系数[-1,1]之间
# p:相关系数显著性

相关系数也就是皮尔逊系数,把2个维度数据给入后,会输出相关系数和相关系数显著性。
相关系数取值范围是(-1,1),越接近1则说明越相关。不过我们也不能说中国感染人数和西班牙感染人数相关,这里更确切地解释应该是感染人数的趋势比较。

X, Y = np.meshgrid(x, y)
z = (1/(2*math.pi*o1*o2*pow(1-pow(p,2),0.5)))*np.exp(-1/(2*(1-p*p))*(((X-u1)*(X-u1))/(o1*o1)-2*p*(X-u1)*(Y-u2)/(o1*o2)+(Y-u2)*(Y-u2)/(o2*o2)))

这里X,Y是对原始数据进行网格化,其实就相当于最后成果图的横纵坐标,只是转换一下得以输入作图。
z就是上文的二维密度函数用python来表达了。比较麻烦,注意里面有上面算出的2个维度的均值,方差和皮尔逊系数。

plt.rcParams['font.sans-serif'] = ['KaiTi']  # 用来正常显示中文字符
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10,10), dpi=300)
ax = plt.subplot(111, projection='3d')
ax.plot_surface(X, Y, z,
                cmap='rainbow', alpha=0.9)
ax.set_xlabel('中国感染人数')
ax.set_ylabel('西班牙感染人数')
ax.set_zlabel('频率')
ax.set_title("二维高斯分布")
plt.savefig('D:/桌面/1.png', bbox_inches='tight', pad_inches=0.0)

这就是很基础的一些画图设置了,相似的就不再赘述,重点 谈谈plot_surface。
plot_surface中的X,Y,z其实上文以及解释过了,就是相应的坐标和函数,那么cmap是什么呢,camp是颜色盘,值定位rainbow就是彩虹色,从下图就可以看出,数据越集中的地方,颜色就越深。这里还有一个颜色盘是coolwarm,不过个人感觉没rainbow好看,不妨小伙伴们试一试。
在这里插入图片描述
到此我们就大概的画出了中国感染人数和西班牙感染人数在4.25之前的密度函数。
这个图我们看出,中国感染人数大概在4-5万就开始达到高峰,之后开始下降,而西班牙到了12万左右才开始下降。整个国家感染人数的增幅一目了然,对于整体数据的把握也有较好的认知。但这样似乎不太好看,而且到底高峰是不是在我说的那个数值呢,根据肉眼都不好判断。所以我们接下来进行优化。

优化

坐标轴与图像优化

plt.rcParams['font.sans-serif'] = ['KaiTi']  # 用来正常显示中文字符
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10,10), dpi=300)
ax = plt.subplot(111, projection='3d')
ax.plot_surface(X, Y, z, rstride=1, cstride=1,
                cmap='rainbow', alpha=0.9)
ax.set_xlabel('中国感染人数', fontsize=15)
ax.set_ylabel('西班牙感染人数', fontsize=15)
ax.set_zlabel('频率', fontsize=15)
ax.set_title("二维高斯分布", fontsize=25, y=1.02)

ax.set_xticks(np.arange(0,100000,20000))
ax.set_yticks(np.arange(0,200000,40000))
plt.savefig('D:/桌面/3.png', bbox_inches='tight', pad_inches=0.0)

可能一眼还没看出来。我来讲解一下。博主在plot_surface里面加了 rstride=1, cstride=1,这两个参数有什么作用?相当于步长。这么理解吧,这个颜色实际上是由无数个点组成的,但是实际上就像房子顶上的瓦片一样,如果瓦片比较大,那么房顶面积一定,瓦片就用的少,就像上图一样显得一块一块的,非常大,不过不平滑。而下图呢,加入 rstride=1, cstride=1就相当于定制了瓦片长宽,瓦片比较小那么看起来就舒服,颜色过渡得比上面那个自然多。
把标题和坐标轴都修改一下,title的x,y参数是调位置的,如何使用的话小伙伴们多试几个值就明白了。
plt.savefig里面的bbox_inches=‘tight’, pad_inches=0.0在这里看起里效果似乎不明显。这个作用是减小图片旁边的白色区域。如果感兴趣的小伙伴可以试一下不加和加了这些参数保存出来是什么样的。
在这里插入图片描述

图像再次优化

plt.rcParams['font.sans-serif'] = ['KaiTi']  # 用来正常显示中文字符
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10,10), dpi=300)
ax = plt.subplot(111, projection='3d')
ax.plot_surface(X, Y, z, rstride=1, cstride=1,
                cmap='rainbow', alpha=0.9)
ax.set_xlabel('中国感染人数', fontsize=15)
ax.set_ylabel('西班牙感染人数', fontsize=15)
ax.set_zlabel('频率', fontsize=15)
ax.set_title("二维高斯分布", fontsize=25, y=1.02)

ax.set_xticks(np.arange(0,100000,20000))
ax.set_yticks(np.arange(0,200000,40000))
ax.contour(X, Y, z, 15, zdir = 'z', offset = 0, cmap = plt.get_cmap('rainbow'))
ax.w_xaxis.set_pane_color((135/255, 206/255, 250/255, 0.3))
ax.w_yaxis.set_pane_color((135/255, 206/255, 250/255, 0.3))
ax.w_zaxis.set_pane_color((135/255, 206/255, 250/255, 0.3))

plt.savefig('D:/桌面/4.png', bbox_inches='tight', pad_inches=0.0)

作图一方面为了好看,一方面是对数据整体把握更加直观,这里加了ax.w_xaxis.set_pane_color这个方法是对x平面进行上色,个人感觉更好看吧。里面的参数是rgba。
细心的小伙伴已经发现了,这个图比上面的多了好多等高线。这些等高线是这个密度函数在xoy平面的投影,能够更直观的看出到底数据的高峰是在哪。我们直观看出,中国感染人数到达高峰是在6w人左右,而西班牙也是在6w人左右,这和我们前面目测估计的有一点误差。所以ax.contour这个方法将密度函数投影到平面来,更细致的观察数据的分布。其中ax.contour中
15代表是有多少条等高线,zdir=z表示投影到z=?这个平面,而?的数值就是由offset表示,这里显然投影到z=0平面,camp也是和上文意思差不多是颜色盘,彩虹色的。
在这里插入图片描述
效果还是很直观的。

ABin_203
关注 关注
  • 9
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
matlab画正态分布图简单算法
miao_9的博客
12-07 8万+
matlab中的常用概率分布函数。 用matlab画正态分布图的代码: clear all; x=-4:0.1:4; y=normpdf(x,0,1); figure; plot(x,y);grid; legend('标准正态分布'); 结果如下 算出正态分布的alpha分位点。 用inv函数来实现:
概率论- 3多维随机变量及其分布
m0_54989484的博客
06-25 948
多维随机变量及其分布 1 一、二维随机变量的联合分布与边缘分布函数 1.1 二维随机变量的联合分布函数 1.2 二维随机变量的边缘分布函数 2 二维离散型随机变量 2.1 联合概率分布及其性质 列表求和 2.2 边缘分布和条件分布 2.2.1 边缘分布 2.2.2 条件分布 3 二维连续型随机变量 3.1 概念性质-求二重积分 3.2 边缘概率密度 & 条件概率密度 3.2.1 边缘概率密度 3.2.2 条件概率密度 基于条件密度函数,可以推导出密度乘法公式 4 二维随机变量的
Python三维空间概率密度函数
12-20
二维高斯分布概率密度函数数据集实战优化坐标轴与图像优化图像再次优化 概率密度函数 大家肯定都有听说过正态分布,其实正态分布只是概率密度分布的一种,正态分布概率密度函数均值为μ ,标准差σ是高斯函数的一个实例: f(x;μ,σ)=1σ2πexp⁡(−(x−μ)22σ2) f(x ; \mu, \sigma)=\frac{1}{\sigma \sqrt{2 \pi}} \exp \left(-\frac{(x-\mu)^{2}}{2 \sigma^{2}}\right) f(x;μ,σ)=σ2π​1​exp(−2σ2(x−μ)2​) 在一维上只有x一个变量,μ 均值,σ标准差。 正态分布具有两个
python 3维正态分布图_三维正态分布
weixin_39942992的博客
12-19 2089
听起来你要找的是一个Multivariate Normal Distribution。这在scipy中实现为scipy.stats.multivariate_normal。重要的是要记住,你要传递一个协方差矩阵给函数。所以为了简单起见,将非对角元素保留为零:[X variance , 0 ][ 0 ,Y Variance]下面是一个使用此函数并生成结果分布的三维绘图的...
python正态分布代码_Python:两个正态分布之间的体积(3d)
weixin_28857713的博客
01-11 417
我想计算三维中两个正态分布(高斯)之间的体积。我得到了两种不同的正态分布:1)一种高斯分布,适用于x,y,z数据(红色),2)一种模拟高斯分布(蓝色)。我可以绘制两个函数,但我不知道如何计算它们之间的差异。所以我想要的是红色和蓝色的音量差。这有一个物理背景:卷对应于电源,我想知道电源的区别。我考虑过整合,但我对此并不熟悉。谢谢您。from matplotlib import pyplot;from...
使用python绘制3维正态分布
ChainingBlocks
11-10 1万+
今天使用python画了几个好玩的3D展示图,现在分享给大家。先贴上图片使用的python工具包为:from matplotlib import pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D在贴代码之前,有必要从整体上了解这些图是如何画出来的。可以把上面每一个3D图片理解成一个长方体。输入数据是三维
三维正态分布下的一般决策面形式
2302_77583465的博客
04-22 101
Matlab基础08.三维
胖虎卖汤圆的博客
10-29 197
一.三维线性图plot(X, Y, Z) 二维正态分布: 二.三维表面图surf 三.简易表面图ezsurf
多维高斯分布
weixin_43850162的博客
02-24 2102
文章目录高斯函数的基础一维高斯函数多维高斯分布的由来二维高斯分布三维图像_python二维高斯分布三维图像_matlab参考博客 高斯函数的基础 一维高斯函数 高斯函数,Gaussian Function, 也简称为Gaussian,一维形式如下: f(x)=ae−(x−b)22c2f(x)=ae^{-\frac{(x-b)^2}{2c^2}}f(x)=ae−2c2(x−b)2​ 对于任意的实数a...
三维空间常用函数(一) c++ Qt
sk_main_void的博客
08-01 1432
记录一下在三维空间计算中常用的点、线、面的计算函数。基于c++与Qt的类
三维空间划线函数
09-08
在MATLAB中实现三维空间的画线,程序输入接口是n*6的矩阵,代表画n条线,每条线的两个端点共6个参数写在同一列。程序输出是figure
python高斯分布概率密度函数的使用详解
01-20
如下所示: import matplotlib.pyplot as plt import numpy as np from scipy import stats from matplotlib import style style.use('fivethirtyeight') mu_params = [-1, 0, 1] sd_params = [0.5, 1, 1.5] ...
python 计算概率密度、累计分布、逆函数的例子
12-20
pdf:连续随机分布的概率密度函数 pmf:离散随机分布的概率密度函数 cdf:累计分布函数 百分位函数(累计分布函数的逆函数) 生存函数的逆函数(1 – cdf 的逆函数) 函数里面不仅能跟一个数据,还能跟一个数组。...
概率论笔记(六)一维正态分布/二维正态分布/多维正态分布
qq_37534947的博客
11-10 1万+
文章目录一:一维正态分布二:二维正态分布/多维正态分布三:各向同性正态分布 一:一维正态分布 二:二维正态分布/多维正态分布 三:各向同性正态分布 各向同性的高斯分布(球形高斯分布)指的是各个方向方差都一样的多维高斯分布,协方差为正实数与identity matrix(单位矩阵)相乘。 注:即方差都是一样的,均值不一样,方差的值可以单独用标量表示。 参考链接: https://www.cnblogs.com/jiangkejie/p/12939776.html https://blog.cs
简单理解正态分布概率密度函数)和68-95-99.7法则
热门推荐
kaede0v0的博客
02-11 5万+
正太分布和概率密度函数,期望值,方差 正态分布(Normal distribution),又名高斯分布(Gaussian distribution)是一个非常常见的连续概率分布。正态分布在统计学上十分重要,经常用在自然和社会科学来代表一个不明的随机变量1。 正态分布的形状由平均值 μ\muμ和方差σ2\sigma^2σ2所决定。 一个 服从 随机变量XXX的正态分布可以写成 X~Normal(μ,σ2);orX~N(μ,σ2) X~Normal(\mu, \sigma^2); or X~N(\mu, \
python 3维正态分布图_使用python绘制3维正态分布图的方法
weixin_42515045的博客
02-09 1733
今天使用python画了几个好玩的3D展示图,现在分享给大家。先贴上图片使用的python工具包为:from matplotlib import pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3D在贴代码之前,有必要从整体上了解这些图是如何画出来的。可以把上面每一个3D图片理解成一个长方体。输入数据是三维的,...
概率密度函数,概率分布函数,正态分布
weixin_40493805的博客
05-11 3263
1、用到的时候总结一下,回过来可以复习复习。 2、概率统计:统计是根据数据(一组数据),根据分布模型(比如正态分布),可以得到一个带参数的分布模型(比如mu和theda),然后根据这个分布模型,去求解发生某个时间的概率,需要查询分布函数图。这就需要知道相关的概念。 3、概率密度函数(probability density function)和概率分布函数(Cumulative Distribution Function,累积密度函数)。通过讲解正态分布去理解。 可以参考一下资料:https://zhuanl
智能数据分析(2)Lecture 9-11
最新发布
weixin_45603120的博客
06-08 921
定义:特征选择指的是从原始特征集中选择一个子集,以减少特征的数量并提升模型的性能。选择的特征子集应当能最好地表示原始数据,从而提高分类器或回归模型的效果。目标:特征选择算法主要可以分为三类:过滤法(Filter Method)、包裹法(Wrapper Method)和嵌入法(Embedded Method)。概述:过滤法不依赖于后续的模型训练和验证过程,而是根据特征自身的统计特性来进行选择。这种方法通常简单快速,适用于处理大规模数据。方法:概述:包裹法直接利用后续模型的性能作为特征选择的评价标准。它通过不断
python写一个概率密度函数代码
07-10
当然可以!下面是一个示例代码,用Python编写一个概率密度函数的函数: ```python import math def probability_density(x, mean, std_dev): coefficient = 1 / (std_dev * math.sqrt(2 * math.pi)) exponent = -((x - mean) ** 2) / (2 * std_dev ** 2) return coefficient * math.exp(exponent) ``` 这个函数接受三个参数:x是要计算概率密度的变量值,mean是概率分布的均值,std_dev是概率分布的标准差。它使用正态分布概率密度函数公式来计算概率密度。 你可以根据需要调用这个函数,并传入合适的参数来计算概率密度。例如: ```python result = probability_density(1.5, 0, 1) print(result) ``` 这将计算在均值为0,标准差为1的正态分布中,变量值为1.5的概率密度。 希望这个代码对你有帮助!如果你有其他问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 基于LSTM的股票时间序列预测(附数据集和代码) 60886
  • 决策树可视化:鸢尾花数据集分类(附代码数据集) 18612
  • 基于keras+VGG-16的小数据集多分类图像识别(附代码数据集) 9332
  • Python:三维空间的概率密度函数(附代码数据集) 8622
  • 最强降维模型t-SNE vs 最常用降维模型PCA(上) 5008

分类专栏

  • 笔记 1篇

最新评论

  • 决策树可视化:鸢尾花数据集分类(附代码数据集)

    PtP_Po_laris: 博主好像没有分训练集和测试集?

  • 基于LSTM的股票时间序列预测(附数据集和代码)

    boli_ustb: 哈哈哈,为了得到数据而篡改数据

  • 决策树可视化:鸢尾花数据集分类(附代码数据集)

    Thomas720: 至少用博主的代码我能作出来,呜呜呜

  • 基于LSTM的股票时间序列预测(附数据集和代码)

    WhomUknow: 数据集选用的volume,可视化y轴是close,博主藏了些好东西噢表情包

  • 基于LSTM的股票时间序列预测(附数据集和代码)

    DMUerxiao: 非常好的教程,就是现在新版本某些语法或参数不适用,需要稍加修改了

大家在看

  • Mysql的索引
  • Python机器学习实战:智能聊天机器人的构建与优化
  • 【LangChain编程:从入门到实践】LangChain中的RAG组件

最新文章

  • 超越ImageBind? 腾讯LanguageBind已开源!
  • dlib安装与imglab制作数据集
  • dlib训练自己的数据集
2023年1篇
2020年18篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源科技类公司起名暗黑破坏神2udietoo火烧岛电影酒店起名取名湖南经视在线直播小南海水电站使命召唤1下载男孩有意义的起名刷钱人生中国最冷小镇迎来今秋首场大雪姓孙男小孩起名金砖国家什么意思栩起名名字男孩三国从忽悠刘备开始电视背景墙装修效果图2021新款八画什么字起名黯然失色的意思豪字起名男敢达决战欧宝丽门业姓傅起名大全好字取名起名大全属狗人公司起名用楚辞给男宝宝起名武清起名有翡电视剧在线观看全集网上咋样起名穿成男配他前妻[穿书]宝宝起名那家公司比较好71eee淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化