卡方分布和 Zipf 分布模拟及 Seaborn 可视化教程
卡方分布
简介
卡方分布是一种连续概率分布,常用于统计学中进行假设检验。它描述了在独立抽样中,每个样本的平方偏差之和的分布。卡方分布的形状由其自由度 (df) 参数决定,自由度越大,分布越平缓。
参数
卡方分布用两个参数来定义:
df:自由度,表示卡方分布的形状。自由度必须为正整数。
size:输出数组的形状。
公式
卡方分布的概率密度函数 (PDF) 为:
f(x) = (x^(df/2 - 1) * np.exp(-x/2)) / (2^(df/2) * Gamma(df/2)) for x >= 0
其中:
f(x):表示在 x 点的概率密度。
x:非负实数。
df:自由度。
np.exp(-x/2):指数函数。
Gamma(df/2):伽马函数。
生成卡方分布数据
NumPy 提供了 random.chisquare() 函数来生成服从卡方分布的随机数。该函数接受以下参数:
df:自由度。
size:输出数组的形状。
示例:生成 10 个自由度为 5 的卡方分布随机数:
import numpy as np
data = np.random.chisquare(df=5, size=10)
print(data)
可视化卡方分布
Seaborn 库提供了便捷的函数来可视化分布,包括卡方分布。
示例:绘制 1000 个自由度为 5 的卡方分布随机数的分布图:
import seaborn as sns
import numpy as np
data = np.random.chisquare(df=5, size=1000)
sns.distplot(data)
plt.show()
练习
- 模拟 20 个自由度为 10 的卡方分布随机数,并绘制它们的分布图。
- 比较不同自由度下卡方分布形状的变化。
- 利用卡方分布来进行卡方检验,假设某枚硬币是公平的,即正面朝上的概率为 0.5。抛掷硬币 100 次,并计算正面朝上的次数是否服从二项分布。
解决方案
import seaborn as sns
import numpy as np
from scipy import stats
# 1. 模拟随机数并绘制分布图
data = np.random.chisquare(df=10, size=20)
sns.distplot(data)
plt.show()
# 2. 比较不同自由度下分布形状的变化
df_values = [2, 5, 10, 20]
for df in df_values:
data = np.random.chisquare(df=df, size=1000)
sns.distplot(data, label=f"df={df}")
plt.legend()
plt.show()
# 3. 进行卡方检验
heads = np.random.binomial(n=100, p=0.5)
chi2_stat, p_value = stats.chisquare(heads, f_exp=50)
print("卡方统计量:", chi2_stat)
print("p 值:", p_value)
# 由于 p 值大于 0.05,无法拒绝原假设,即可以认为硬币是公平的。
瑞利分布
简介
瑞利分布是一种连续概率分布,常用于描述信号处理和雷达系统中的幅度分布。它表示在一个随机变量的平方根服从指数分布时,该随机变量的分布。
参数
瑞利分布用一个参数来定义:
scale:尺度参数,控制分布的平坦程度。较大的尺度参数使分布更加平坦,两侧尾部更加分散。默认为 1。
公式
瑞利分布的概率密度函数 (PDF) 为:
f(x) = (x scale) / (scale^2 np.exp(-x^2 / (2 scale^2))) for x >= 0
其中:
f(x):表示在 x 点的概率密度。
x:非负实数。
scale:尺
Zipf分布
简介
Zipf分布,又称为Zeta分布,是一种离散概率分布,常用于描述自然语言、人口统计学、城市规模等领域中具有幂律特征的数据分布。它体现了“少数服从多数”的现象,即排名越靠前的元素出现的频率越高。
参数
Zipf分布用一个参数来定义:
a:分布参数,控制分布的形状。a越小,分布越偏向于少数元素,越接近幂律分布。默认为 2。
公式
Zipf分布的概率质量函数 (PMF) 为:
P(k) = 1 / (k ^ a) for k >= 1
其中:
P(k):表示第 k 个元素出现的概率。
k:元素的排名,从 1 开始。
a:分布参数。
生成Zipf分布数据
NumPy提供了random.zipf()函数来生成服从Zipf分布的随机数。该函数接受以下参数:
a:分布参数。
size:输出数组的形状。
示例:生成10个服从Zipf分布的随机数,分布参数为2:
import numpy as np
data = np.random.zipf(a=2, size=10)
print(data)
可视化Zipf分布
Seaborn库提供了便捷的函数来可视化分布,包括Zipf分布。
示例:绘制1000个服从Zipf分布的随机数的分布图,分布参数为2:
import seaborn as sns
import numpy as np
data = np.random.zipf(a=2, size=1000)
sns.distplot(data)
plt.show()
练习
- 模拟不同分布参数下Zipf分布形状的变化。
- 利用Zipf分布来模拟一个城市的规模分布,并计算排名前10的城市人口占总人口的比例。
- 比较Zipf分布与幂律分布的异同。
解决方案
import seaborn as sns
import numpy as np
# 1. 模拟不同分布参数下Zipf分布形状的变化
a_values = [1.5, 2, 2.5, 3]
for a in a_values:
data = np.random.zipf(a=a, size=1000)
sns.distplot(data, label=f"a={a}")
plt.legend()
plt.show()
2. 模拟城市规模分布并计算人口比例
population = np.random.zipf(a=2, size=100)
top10_population = population[:10].sum()
total_population = population.sum()
print("排名前10的城市人口:", top10_population)
print("排名前10的城市人口比例:", top10_population / total_population)
3. Zipf分布与幂律分布的比较
Zipf分布和幂律分布都描述了“少数服从多数”的现象,即排名越靠前的元素出现的频率越高。
但是,Zipf分布的参数化程度更高,可以更精确地描述不同领域的幂律现象。幂律分布则更通用,但缺乏Zipf分布对参数的控制能力。
具体来说,Zipf分布的PMF为:
P(k) = 1 / (k ^ a)
幂律分布的PMF为:
P(k) = C / k ^ alpha
其中,C为归一化常数。
可见,Zipf分布的参数a控制了分布的倾斜程度,而幂律分布的参数alpha则控制了分布的整体形状。
此外,Zipf分布通常用于描述离散数据,而幂律分布则可以用于描述离散和连续数据。
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎点赞、收藏、关注
卡方分布和 Zipf 分布模拟及 Seaborn 可视化教程的更多相关文章
- Python - Seaborn可视化:图形个性化设置的几个小技巧
1 概述 在可视化过程中,经常会对默认的制图效果不满意,希望能个性化进行各种设置. 本文通过一个简单的示例,来介绍seaborn可视化过程中的个性化设置.包括常用的设置,如: 设置图表显示颜色 设置图 ...
- 国外大神制作的一个很棒的matplotlib 可视化教程
国外大神制作的一个很棒的matplotlib 可视化教程 参考:https://www.machinelearningplus.com/plots/top-50-matplotlib-visualiz ...
- PJ可能会考的模拟与枚举-自学教程
PJ可能会考的模拟与枚举-自学教程 文/Pleiades_Antares 之前学校里看一个小可爱复习的时候偷偷听来着XD 简单记了一下重点吧,希望能对看官您有所帮助XD 以下⬇️是几个复习时讲过的题, ...
- Darknet卷基层浅层特征可视化教程
目录 Darknet浅层可视化教程 说明 处理步骤 使用python可视化txt文件 Darknet浅层可视化教程 说明 针对YOLO官方提供的c语言版的darknet进行了修改,添加了一些函数,进行 ...
- Java生成-zipf分布的数据集(自定义倾斜度,用作spark data skew测试)
1.代码 import java.io.Serializable; import java.util.NavigableMap; import java.util.Random; import jav ...
- 用 IQ分布模拟图来测试浏览器的性能
今天天气太凉快,跟这个日历上属于夏天的那一页显得格格不入!就连我我床下那台废弃的ThinkPad,居然也十分透凉气,那外壳连我的体温高都没有,于是,我就开始想一个方法,让我那个废弃的电脑发热,顺便用它 ...
- seaborn可视化特征的相关性
import seaborn as sn sn.heatmap(trainX.corr(),vmax=1,square=True)
- seaborn可视化
文章来自https://blog.csdn.net/qq_33120943/article/details/76569756 详细教程可以查看官方额示例:http://seaborn.pydata.o ...
- Levenberg-Marquardt优化和zipf分布
最近审论文和看报告中遇到LM优化和齐普夫分布,于是查了一下. LM方法是高斯牛顿迭代方法的改进,下面分别是高斯牛顿.齐普夫方法的公式: Δ=−(JfTJf)−1JfTf,Δ=−(JfTJf+λI)−1 ...
- T分布、卡方分布、F分布
请参考: https://www.cnblogs.com/think-and-do/p/6509239.html
随机推荐
- Spring 源码阅读(二)IoC 容器初始化以及 BeanFactory 创建和 BeanDefinition 加载过程
相关代码提交记录:https://github.com/linweiwang/spring-framework-5.3.33 IoC 容器三种启动方式 XML JavaSE: ApplicationC ...
- 阿里云EMAS移动测试,帮您快速掌握移动端兼容性测试技巧
简介: 兼容性测试用于验证应用在不同设备上进行安装/启动/登录/不同版本覆盖安装/卸载等操作时,是否存在兼容性问题:如界面适配问题.应用性能等,现阿里云EMAS套餐免费试用,帮您快速掌握移动端兼容性测 ...
- 混合云K8s容器化应用弹性伸缩实战
简介: 混合云K8s容器化应用弹性伸缩实战 1. 前提条件 本最佳实践的软件环境要求如下:应用环境:①容器服务ACK基于专有云V3.10.0版本.②公共云云企业网服务CEN.③公共云弹性伸缩组服务ES ...
- 重磅 | 数据库自治服务DAS论文入选全球顶会SIGMOD,领航“数据库自动驾驶”新时代
简介: 近日,智能数据库和DAS团队研发的智能调参ResTune系统论文被SIGMOD 2021录用,SIGMOD是数据库三大顶会之首,是三大顶会中唯一一个Double Blind Review的,其 ...
- [Go] golang-migrate/migrate 快速使用指南
1. CLI 用途的安装 [文档] [确保] CLI 工具使用 go 命令安装时,不应该在 go.mod 所在的目录中执行命令,也就是先进入到其它非项目目录内. $ go get -tags 'pos ...
- PHP vs Golang ? 想什么呢 ! What Are You Thinking !
在使用 PHP 多年之后,我对 PHP 的优势和劣势已经非常清楚,与后起之秀 Golang 相比,两者已经不在一个重量级. PHP 更像是 70 kg 级别的选手,脚本语言,极速开发,部署方便,性能可 ...
- Spring Boot应用中如何动态指定数据库,实现不同用户不同数据库的场景
当在 Spring Boot 应用程序中使用Spring Data JPA 进行数据库操作时,配置Schema名称是一种常见的做法.然而,在某些情况下,模式名称需要是动态的,可能会在应用程序运行时发生 ...
- arduino uno+LCD12864(ST7735S)+蓝牙模块实现贪吃蛇
1.前言: 1.1本实验实现的贪吃蛇能穿越边界,结束游戏的唯一条件是贪吃蛇到达指定长度 1.2本实验所用LCD可能不是LCD12864,LCD12864所用库为u8glib,笔者在词库中并没有找到型号 ...
- rubymineIDE配置启动
debug启动 debug启动 安装插件 报错: 网络问题 下载 ruby-debug-ide-2.3.1 解压到 /home/haima/.rvm/gems/ruby-2.3.8/gems/
- win系统执行脚本报错策略更改无法加载文件 C:\Users\xx\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本
Start-Process powershell -Verb runAs Get-ExecutionPolicy Get-ExecutionPolicy -List set-ExecutionPoli ...