如何判断一维数据集服从何种分布

本文通过计算KL散度,对比了均匀分布模型与高斯分布模型对一组年龄数据的匹配效果,结果显示高斯分布模型更为合适。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

KL散度

KL 散度是一种衡量两个概率分布的匹配程度的指标,两个分布差异越大,KL散度越大。

定义:

其中 p(x) 是真实分布,q(x)是目标分布(建模目标分布),如果两个分布完全匹配,那么

 

 第一组:数据集为采集100个人的年龄,为以下表格所示,我们使用KL散度去研究最符合的分布类型。

age012345678910总数
count3671113181511754100

尝试1:使用均匀分布建立模型

可视化为:黄色的为建立的目标均匀分布模型,与蓝色真实分布的对比。

 

尝试2:使用高斯分布建立模型

可视化为:(红色虚线是相同\sigma\mu拟合的一条正态分布曲线,蓝色条形图为概率密度):

计算分析 :

如何判断真实分布更接近均匀分布还是高斯分布,用肉眼看是很不准确的,用KL散度来衡量真实分布去匹配目标分布所损失的信息量。所以能够将模型量化去比较从而判断出接近哪种分布。

1、计算与均匀分布的KL散度:

import numpy as np
import math
count=np.array([3,6,7,11,13,18,15,11,7,5,4])
count_rate=count/100
balance_rate=1/11
sum=0
for i in range(11):
    sum+=count_rate[i]*math.log(count_rate[i]/balance_rate)
print(sum)

计算结果为:0.12899493763053263

 

2、计算与高斯分布的KL散度:


def gaosi(x):
    mu=5.03
    sigma=2.4349743325135895
    t1=1/(sigma*math.sqrt(2*math.pi))
    t2=((x-mu)**2)/(2*sigma*sigma)
    return math.exp(-1*t2)*t1

count=np.array([3,6,7,11,13,18,15,11,7,5,4])
count_rate=count/100

sum=0
for i in range(11):
    sum+=count_rate[i]*math.log(count_rate[i]/gaosi(i))
print(sum)

计算结果为:0.03997441345364968

 

结论:

在只考虑均匀分布模型与高斯分布模型的情况下,用本身去拟合目标模型时,匹配高斯分布所损失的信息量最少,计算发现该数据集的分布更符合高斯分布。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

矩阵科学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值