卡方分布和 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
随机推荐
- javascript现代编程系列教程之三——数值表示方式
在64位浮点数的表示中,我们使用了一个叫做"偏移二进制"的技术来存储指数.这是因为我们需要在有限的位数(在这种情况下是11位)内表示正数和负数. 让我们更详细地解释一下: 符号位: ...
- 【笔记】Oracle列转行unpivot&行转列 PIVOT
unpivot 说明:将表中多个列缩减为一个聚合列(多列转多行) 语法:unpivot(新列名 for 聚合列名 in (对应的列名1-列名n )) 写到了一个力扣的题,发现这个unpivot函数还没 ...
- Dubbo-go 优雅上下线设计与实践
简介:在分布式场景下,微服务进程都是以容器的形式存在,在容器调度系统例如 k8s 的支持下运行,容器组 Pod 是 K8S 的最小资源单位.随着服务的迭代和更新,当新版本上线后,需要针对线上正在运行 ...
- 新型DDoS来袭 | 基于STUN协议的DDoS反射攻击分析
简介: 作为新型反射类型,目前仍存绕过防御可能性. 阿里云安全近期发现利用STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)服务发起的DDoS反 ...
- 京东:Flink SQL 优化实战
简介: 本文着重从 shuffle.join 方式的选择.对象重用.UDF 重用等方面介绍了京东在 Flink SQL 任务方面做的优化措施. 本文作者为京东算法服务部的张颖和段学浩,并由 Apach ...
- dotnet 6 在 win7 系统 AES CFB 抛出不支持异常
本文记录在 win7 系统上调用 AES 加密时,采用 CFB 模式,可能抛出 CryptographicException 异常 可以看到抛出的异常提示是 System.Security.Crypt ...
- Django之ajax简介
1.MTV与MVC 框架类型:MVC: M:models V:views C:controller Django用的框架就是MTV MTV: M:models T:templates V:views ...
- VGA显示文字
VGA显示文字 VGA字符显示的原理 把要显示的字符转换成字符点阵,然后编码存储,着色的部分为1,其它为0.然后在VGA上输出显示. 字符点阵生成软件: https://www.zhetao.com/ ...
- Oracle、达梦:数据库大小写不敏感,但是又要区分大小写敏感(默认敏感)
一. 艹,这个需求就很操蛋. 实现 SELECT * FROM T1 WHERE REGEXP_LIKE(field, '.*value.*', 'c'); 在 Oracle 数据库中使用 REGEX ...
- 书生浦语大模型全链路开源体系-书生浦语大模型实战营学习笔记1&大语言模型2
大语言模型-2.书生浦语大模型全链路开源体系 书生浦语大模型实战营学习笔记-1.认识书生浦语大模型全链路开源体系 本系列随笔学习搬运第二期书生浦语大模型实战营的相关内容,通过使用InternLM的一套 ...