卡方分布和 Zipf 分布模拟及 Seaborn 可视化教程

zipf,seaborn · 浏览次数 : 6

小编点评

卡方分布简介: 卡方分布是一种连续概率分布,广泛应用于统计学中的假设检验。它描述了在独立抽样中,每个样本平方偏差之和的分布。其形状由自由度参数决定,自由度越大,分布越平缓。 生成卡方分布数据: 使用NumPy的random.chisquare()函数可生成服从卡方分布的随机数。示例中生成了10个自由度为5的卡方分布随机数。 可视化卡方分布: 使用Seaborn库的distplot()函数可直观呈现卡方分布的图形。 练习模拟: 模拟20个自由度为10的卡方分布随机数,并绘制它们的分布图。通过比较不同自由度下的分布形状变化,了解卡方分布的特性。 瑞利分布简介: 瑞利分布是一种连续概率分布,用于描述信号处理和雷达系统中的幅度分布。它基于指数分布的随机变量平方根进行建模。 生成瑞利分布数据: 使用NumPy的random.rayleigh()函数可生成服从瑞利分布的随机数。示例中生成了1000个尺度参数为1的瑞利分布随机数。 可视化瑞利分布: 使用Seaborn库的distplot()函数同样可以可视化瑞利分布图形。 练习模拟: 模拟不同尺度参数下的瑞利分布随机数,并绘制它们的分布图。通过观察分布形态变化,理解尺度参数对分布的影响。 Zipf分布简介: Zipf分布,即Zeta分布,是一种离散概率分布。它适用于描述具有幂律特征的自然语言、人口统计学和城市规模等场景中的数据。 生成Zipf分布数据: 使用NumPy的random.zipf()函数可以生成服从Zipf分布的随机数。示例中生成了10个分布参数为2的Zipf分布随机数。 可视化Zipf分布: 同样可以使用Seaborn库的distplot()函数来可视化Zipf分布。 练习模拟: 模拟不同分布参数下的Zipf分布随机数。通过计算排名前10的城市人口占比,了解Zipf分布在描述特定类型数据时的应用。 总结与展望: 本篇教程详细介绍了卡方分布、瑞利分布和Zipf分布的基本概念、生成方法和可视化步骤。通过实践练习,读者可以加深对这些分布的理解,并掌握生成数据的方法。希望这些内容能够帮助您更好地应用这些概率分布到实际问题中。

正文

卡方分布

简介

卡方分布是一种连续概率分布,常用于统计学中进行假设检验。它描述了在独立抽样中,每个样本的平方偏差之和的分布。卡方分布的形状由其自由度 (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()

练习

  1. 模拟 20 个自由度为 10 的卡方分布随机数,并绘制它们的分布图。
  2. 比较不同自由度下卡方分布形状的变化。
  3. 利用卡方分布来进行卡方检验,假设某枚硬币是公平的,即正面朝上的概率为 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()

练习

  1. 模拟不同分布参数下Zipf分布形状的变化。
  2. 利用Zipf分布来模拟一个城市的规模分布,并计算排名前10的城市人口占总人口的比例。
  3. 比较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 可视化教程相似的内容:

卡方分布和 Zipf 分布模拟及 Seaborn 可视化教程

卡方分布是统计学中的一种连续概率分布,用于假设检验,形状由自由度(df)决定。自由度越大,分布越平缓。NumPy的`random.chisquare()`可生成卡方分布随机数。Seaborn能可视化卡方分布。练习包括模拟不同自由度的卡方分布、进行卡方检验。瑞利分布描述信号处理中幅度分布,参数为尺度(...

SPSS统计教程:卡方检验

本文简要的介绍了卡方分布、卡方概率密度函数和卡方检验,并通过SPSS实现了一个卡方检验例子,不仅对结果进行了解释,而且还给出了卡方、自由度和渐近显著性的计算过程。本文用到的数据"2.2.sav"链接为: https://url39.ctfile.com/f/2501739-875711187-f3d

质效提升 | QA不做业务需求测试,你怎么看?

​因为有的小伙伴看到公司的QA不测试业务需求,只搞流程、卡点、规范、技术创新、QA平台,行业洞察,让研发自测、研发担责上线bug和风险,所以问我,你怎么看QA不做业务需求测试这件事。其实我怎么看不重要,这事还是要看公司管理层和QA负责人,我个人倒是可以作为一个业务方来聊一下这件事。 企业架构 公司组

raksmart服务器部署SSL报错:ERR_CERT_COMMON_NAME_INVALID

背景:raksmart服务器 下篇 部署项目 SSL报错:ERR_CERT_COMMON_NAME_INVALID 安装certbot sudo apt update sudo apt install certbot 安装python3-certbot-nginx插件 sudo apt instal

CentOS7部署Docker(联网)

一、参考地址 https://blog.csdn.net/m0_49762804/article/details/131398587 二、Docker安装 安装依赖环境,yum-utils ## 检查是否安装 [root@localhost ES]# docker ps [root@localhos

解决卡顿发热,超帧技术焕发中重载游戏动力

近几年,中国手游市场规模不断扩大,开发者通过在画面、玩法等方面的持续创新和打磨,推出更加精品化的产品。然而愈发精美的画质和复杂的玩法,也给硬件带来超高的负载,导致玩家在游戏过程中,频繁出现掉帧卡顿、发烫、续航差等体验降低的现象。 HarmonyOS SDK 图形加速服务(Graphics Accel

[转帖]raid缓存策略设置

RAID卡缓存策略 不同的RAID卡缓存策略对IO的性能影响较大,常见的策略有: 1、写操作策略,可设置为WriteBack或WriteThrough WriteBack:进行写操作时,将数据写入RAID卡缓存,并直接返回,RAID卡控制器将在系统负载低或者Cache满了的情况下把数据写入硬盘。该设

乌卡时代的云成本管理:从0到1了解FinOps

在上一篇文章中,我们介绍了企业云业务的成本构成以及目前面临的成本困境,以及当前企业逐步转向 FinOps 的行业趋势,这篇文章我们将详细聊聊 FinOps,包括概念、重要性以及成熟度评价指标。 随着对云服务和供应商的使用越来越多,可能会出现复杂性和管理上的挑战,导致成本超支和其他问题。曾在2018年

Pytorch:单卡多进程并行训练

在深度学习的项目中,我们进行单机多进程编程时一般不直接使用multiprocessing模块,而是使用其替代品torch.multiprocessing模块。它支持完全相同的操作,但对其进行了扩展。Python的multiprocessing模块可使用fork、spawn、forkserver三种方法来创建进程。但有一点需要注意的是,CUDA运行时不支持使用fork,我们可以使用spawn或for

2D小游戏--猜对应卡牌(unity)

博客地址:https://www.cnblogs.com/zylyehuo/ 项目名称 guess_card_game 参考源码链接: https://www.manning.com/books/unity-in-action 效果图预览 step1: 创建一个3D项目 step2: 修改2D相关设