【分布族谱】Zipf分布及其Python可视化

news/2024/12/5 11:43:07/

文章目录

    • zipf分布简介
    • zipfian和zipf对象
    • zipf分布到zeta分布的变化情况
    • 分布族谱图

zipf分布简介

zipf
zeta
离散均匀分布

美国学者Zipf在研究词频的时候发现,如果将一篇较长文章中的词频按照高低依次排列,将频次最高者的词记为1、次高者记为2,依次类推,最后使用频率最低的词为N。若用f表示频次,r表示等级序号,则fr是常数,此即Zipf定律。

相应地,Zipf分布的概率密度函数为

Zipf ⁡ ( k ; α , n ) = 1 k α ∑ i n ( 1 i ) α \operatorname{Zipf}(k;\alpha, n)=\frac{1}{k^\alpha\sum_i^n(\frac{1}{i})^\alpha} Zipf(k;α,n)=kαin(i1)α1

(简洁起见,求和号中 i i i若未加说明,默认从1开始)

则当 n → ∞ n\to\infty n时,可定义黎曼函数

ζ ( α ) = ∑ 1 ∞ ( 1 i ) α \zeta(\alpha)=\sum_1^\infty(\frac{1}{i})^\alpha ζ(α)=1(i1)α

从而

lim ⁡ n → ∞ 1 k α ∑ i n ( 1 i ) α = 1 k α ζ ( α ) \lim_{n\to\infty}\frac{1}{k^\alpha\sum_i^n(\frac{1}{i})^\alpha}=\frac{1}{k^\alpha\zeta(\alpha)} nlimkαin(i1)α1=kαζ(α)1

此即Zeta分布

Zeta ⁡ ( k ; α ) = 1 k α ζ ( α ) \operatorname{Zeta}(k;\alpha)=\frac{1}{k^\alpha\zeta(\alpha)} Zeta(k;α)=kαζ(α)1

在Zipf分布中,若令 α = 0 \alpha=0 α=0,则 Zipf ⁡ ( k ; 0 , n ) = 1 n \operatorname{Zipf}(k;0,n)=\frac{1}{n} Zipf(k;0,n)=n1,这显然是均匀分布的形式,由于 k k k是离散的,所以是离散均匀分布。

zipfian和zipf对象

scipy.stats中,提供了zipfianzipf类,虽然名字都是Zipf,但前者是Zipf分布,后者是Zeta分布。

现随便设一组参数,查看一下zipf分布的大致形状。

import numpy as np
from scipy.stats import zipfian
import matplotlib.pyplot as plt
a, n = 1.25, 10
x = np.arange(1, 11)
y = zipfian.pmf(x, a, n)
plt.stem(x, y)
plt.title('zipfian pmf')
plt.show()

效果如下

在这里插入图片描述

若令a=0,则效果为

a, n = 0, 10
x = np.arange(1, 11)
y = zipfian.pmf(x, a, n)
plt.stem(x, y)
plt.title('uniform pmf')
plt.show()

效果如下,的确是变均匀了

在这里插入图片描述

zipf分布到zeta分布的变化情况

最后,如果让a不断变大,可以看下分布的变化情况

import matplotlib.animation as animation
from scipy.stats import zipfx = np.arange(1,9)
yZeta = zipf.pmf(x, 10)fig = plt.figure(figsize=(6,4))
ax = fig.add_subplot(xlim=(1,8))
plt.yscale('log')
plt.grid()
plt.tight_layout()
k_text = ax.text(0.05,0.85,'',transform=ax.transAxes)sZeta, = ax.plot(x, yZeta)
sZipf = ax.plot(x, zipfian.pmf(x, 0, 10))[0]def animate(a):y = zipfian.pmf(x, a, 10)sZipf.set_data(x, y)k_text.set_text(f"a={a}")return [sZipf]ani = animation.FuncAnimation(fig, animate, range(10), interval=250)plt.show()

效果如下

在这里插入图片描述

分布族谱图

zipf分布在下面这张分布族谱图的左上角

在这里插入图片描述


http://www.ppmy.cn/news/64410.html

相关文章

一文带你搞清 ChatGPT 与 Azure OpenAI 的区别

这两周是我从2017年开始全职涉入 NLP 领域后最忙的两周,无数的同事和客户都在向我提出一个询问:ChatGPT 可以帮到我们什么? 特别是在2023年3月31日我做了一场微软 Azure OpenAI [布局助力企业]拥抱新智能时代的演讲之后,这几天我…

【大数据之Hadoop】二十七、生产调优-HDFS多目录

1 NameNode多目录配置 NameNode本地目录可以配置多个&#xff0c;每个目录存放内容相同&#xff0c;增加可靠性。 在hdfs-site.xml中添加&#xff0c;每台服务器节点的磁盘不同&#xff0c;可以选择不分发。 <property><name>dfs.namenode.name.dir</name>…

AssetBundle加载与卸载时的内存变化

AssetBundle.LoadFromFile加载一个80MB的assetbundle会分配1MB左右的pss内存 adb分析&#xff1a;private-otherUnityProfiler分析&#xff1a;有3块 1.Other/AssetBundle/LoadingCache 2.Other/SerializedFile/archive:/CAB-e42axxxxxxx 3.NotSaved/AssetBundle/xxxxxx.ab …

QT设置widget属性为FramelessWindowHint导致界面刷新的问题

一.问题描述 当使用继承自QWidget的QT对象时&#xff0c;如果设置了窗口风格&#xff08;FramelessWindowHint&#xff09;为无边框&#xff0c;则在使用 包括 窗口最大化、windows系统&#xff08;winD&#xff09;&#xff0c;图标来回点击显示等操作时&#xff0c;导致界面…

2023年,网络安全方面 5 大值得学习的编程语言

Python 到目前为止&#xff0c;Python 在网络安全领域一直处于领先地位。这是一种通用的服务器端脚本语言&#xff08;无需编译&#xff09;&#xff0c;已经被应用到成千上万的安全项目中。你会发现绝大多数安全工具和 PoCs 都是用 Python 编写的&#xff0c;这样做是有充分理…

【Hackthebox Stocker】打靶记录

Hackthebox Stocker nmap 扫描一把 得到tcp端口22 80 nmap -sC -sV 10.10.11.196 Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-10 05:51 EDT Nmap scan report for 10.10.11.196 Host is up (0.25s latency). Not shown: 998 closed tcp ports (reset) PORT STAT…

从零开始学习Linux运维,成为IT领域翘楚(十)

文章目录 &#x1f525;Linux网络防火墙&#x1f525;Linux内核机制 &#x1f525;Linux网络防火墙 防火墙管理工具 firewalld概述 Centos 系统中集成了多款防火墙管理工具&#xff0c;其中 firewalld服务是默认的防火墙配置管理工具&#xff0c;它拥有基于 CLI&#xff08;…

选股公式1000问--76

76.问: 请把次公式改为条件选股公式&#xff08;条件是“低点”&#xff09;。 var1:LLV(LOW,21); var2:HHV(HIGH,21); 快一: EMA((CLOSE-var1)/(var2-var1)100,5),colorcyan; 快:EMA((CLOSE-var1)/(var2-var1)50,13); D: EMA(0.667REF(快一,1)0.333快一,2); var3:LLV(LOW,55);…