【概率统计】如何理解概率密度函数及核密度估计

概念回顾

  1. 直方图(Histogram):直方图是最直观的一种方法,它通过把数据划分为若干个区间,并统计每个区间的数据个数,从而得到每个区间的频数。这样就形成了一个个的矩形,高度代表频数,宽度代表区间,面积代表数据量。但是直方图的缺点是对区间的选择敏感,不同的区间选择会得到不同的图形。

  2. 分布函数(Distribution function):分布函数通常是指累积分布函数,它表示随机变量小于等于某个值的概率。分布函数是非递减的,且在负无穷处值为0,在正无穷处值为1。然而,分布函数并非直观,数据的分布形状可能并不容易从中看出。

  3. 概率密度函数(Probability Density Function, PDF):概率密度函数是连续随机变量的分布函数的导数。它的值在任何单点上都可能大于1,但其在整个定义域上的积分(即面积)等于1。概率密度函数可以直观地反映出随机变量在各个取值上的可能性大小。

  4. 核密度函数(Kernel Density Function, KDF):核密度函数是核密度估计中所使用的核函数,常见的如高斯核函数、Epanechnikov核函数等。在核密度估计中,每一个数据点都会放置一个核函数,然后这些核函数会被叠加起来,得到一个平滑的概率密度估计。

  5. 核密度估计(Kernel Density Estimation, KDE):核密度估计是一种非参数的概率密度估计方法。它通过在每个观测数据点处放置一个核函数(即平滑函数),然后把这些核函数叠加起来,从而获得一个平滑的估计。相比于直方图,核密度估计可以得到更为平滑的密度曲线。

浅析概率密度函数

概率值为0?

PDF描述了一个连续随机变量在某个特定值上的可能性。但是,对于连续随机变量来说,取任何特定的一个值其概率本身都是0,**所以我们说PDF在某个点的值,实际上是表示随机变量落在这个点附近非常小的区间内的概率。**这是因为对于连续型随机变量来说,其取值范围是连续的,理论上可以取到无穷多个值。因此,任何一个具体的值被取到的概率都是无穷小的,可以视为0。

以一个简单的例子来说明,假设我们有一个从0到1均匀分布的连续随机变量,那么它可以取到任何在0到1之间的实数。那么它取到0.5的概率是多少呢?因为在0和1之间有无穷多个实数,所以取到0.5的概率就是1除以无穷大,即0。

尽管如此,我们仍然可以使用概率密度函数来描述连续随机变量在某个值附近的可能性。比如在上面的例子中,虽然取到0.5的概率为0,但是我们可以说在0.5附近(比如在0.499和0.501之间)取到值的概率是0.002。这个概率是通过PDF计算的。

PDF值大于1?

当我们说PDF的值在某个单点上可能大于1时,这个“大于1”是指的PDF的函数值,而不是概率。**对于连续随机变量的PDF,它的值并不直接代表概率,而是概率密度。**比如说,如果概率密度函数(PDF)在某点的值为2,那么这个2并不直接表示概率为2,而是表示单位长度(或者说,非常小的区间)内的概率密度为2。这个值越大,表示随机变量落在这个位置的可能性越大。但这并不意味着PDF的值就是概率,真正的概率是通过在某个区间内积分PDF得到的。

而当我们说PDF在其定义域上的积分(即面积)等于1时,这是因为所有可能的事件(也就是所有的小区间)的概率之和必须等于1。这个面积,就是把所有小区间的概率都加起来,所以必须等于1。所以,尽管PDF在某个单点上的值可能大于1,但是当你把所有的点(也就是所有的可能事件)都考虑进去后,总的概率还是1。

一个栗子

进一步,可以通过一个简单的例子来理解。假设我们有一组数据,它们服从标准正态分布(也就是均值为0,标准差为1的正态分布)。

首先,我们可以画出这个正态分布的概率密度函数。demo如下:

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

x = np.linspace(-5, 5, 100)
y = norm.pdf(x, 0, 1)

plt.plot(x, y)
plt.title('Probability Density Function of Standard Normal Distribution')
plt.xlabel('x')
plt.ylabel('PDF')
plt.grid(True)
plt.show()

运行这段代码后将会画出一个标准的正态分布曲线。可以看到,曲线在x=0的地方达到最高点,大约为0.4。但这并不意味着x=0的概率为0.4,而是表示在x=0附近的概率密度最高。

然后,我们可以计算PDF在整个定义域(这里是[-5, 5])上的积分,也就是面积:

area = np.sum(y) * (x[1] - x[0])
print(area)  # 输出:1.0

运行这段代码后计算的是所有小区间(这里是100个点之间的小区间)的概率之和,结果应该接近1(由于数值计算的精度问题,可能不会完全等于1,但应该非常接近1)。

核密度估计

核密度估计是一种非参数的统计方法,用于估计连续随机变量的概率密度函数。也就是说,它不需要对数据的分布形状做出任何假设,这使得核密度估计能够适应各种不同的数据分布,从有限的样本中估计出整体的概率密度函数。

另外,核密度估计可以被看作是直方图平滑的一种方式,它在每个数据点位置放置一个以该点为中心的"核"(通常是正态分布形状),然后将所有核加起来并进行归一化,得到一个平滑的、连续的概率密度估计。

需要注意的是:核密度估计的结果不依赖于区间的划分,而是依赖于核的形状和宽度(即带宽)。带宽过小可能会导致过拟合,即在数据点位置有过高的峰值,而在数据点之间则几乎为0;带宽过大则可能会导致估计过于平滑,无法捕捉到数据的真实分布。

如何理解核密度估计

大数定律告诉我们,随着样本数量的增加,样本的平均值会趋近于总体的期望值。中心极限定理告诉我们,大量独立随机变量的和(或者平均值)会服从正态分布。而在核密度估计中,我们就是在每个数据点位置放置一个正态分布,然后将这些正态分布加起来并进行归一化,得到的便是一个平滑的、连续的概率密度估计。

可以这么理解,假设我们有一些数据点,它们分布在一条直线上。如果我们在每个点上都放置一个小山丘(正态分布可以看成是山丘的形状),然后将这些山丘叠加起来,我们就得到了一个连续的地形。这个地形就反映了数据的分布特征。山丘越高,说明数据在这个位置的密度越高,也就是说在这个位置附近取到值的概率越高。

进一步,以下代码展示了如何使用seaborn库进行核密度估计及核函数叠加过程:

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

from scipy import stats
from scipy.stats import norm


mu = 0
sigma = 1

# 创建一个x轴上的点集
x = np.linspace(mu - 6*sigma, mu + 6*sigma, 100)
# 画出标准正态分布
plt.plot(x, stats.norm.pdf(x, mu, sigma))

data = np.array([1, 2, 2, 2, 3, 3, 4, 4, 4, 4])
# 画出直方图
plt.hist(data, bins=4, density=True, alpha=0.5)
# 画出核密度估计曲线
sns.kdeplot(data, color='b')


# 在每一个数据点的位置上放一个正态分布,然后将它们叠加
total = np.zeros(len(x))
for point in data:
    total += norm.pdf(x, point, 1)  # 这里1是正态分布的标准差

total /= len(data)
# 画出叠加后的核密度估计曲线
plt.plot(x, total, color='r')
plt.show()

在这里插入图片描述

可以看出核密度估计的步骤:

  1. 选择一个核函数,通常可以选择正态分布函数。
  2. 在每个数据点的位置放置一个以该点为中心的核。
  3. 将所有的核叠加起来,并进行归一化,使得得到的函数在全体实数上的积分为1,这样就得到了一个平滑的、连续的概率密度估计。

核密度估计的应用

  1. 数据分析:核密度估计是数据分析中非常重要的工具,它可以用于数据的平滑处理,提供数据的概率分布信息,使得数据更加平滑,更便于分析。

  2. 图像处理:在图像处理中,核密度估计可以用于图像的平滑处理,消除图像中的噪声。同时,还可以用于图像的分割和边缘检测。

  3. 机器学习:在机器学习中,核密度估计是一种重要的非参数学习方法。它可以用于分类、聚类、异常检测等任务。

  4. 信号处理:在信号处理中,核密度估计可以用于信号的平滑处理,提高信号处理的准确性。

  5. 生物信息学:在生物信息学中,核密度估计可以用于基因表达数据的分析,帮助研究者更好地理解基因的功能。

  6. 金融:在金融领域,核密度估计可以用于估计金融资产的价格分布,帮助投资者做出更好的投资决策。

  7. 地理信息系统:在地理信息系统中,核密度估计可以用于空间数据的分析,例如人口分布、犯罪率等。

  8. 医学:在医学领域,核密度估计可以用于疾病的早期检测和预后评估

总结

直方图、分布函数、概率密度函数和核密度函数都是描述数据分布特性的工具或技术,它们之间有一定的联系和区别。

  1. 直方图是一种最简单的对数据分布进行可视化的方法,但它对数据的划分方式(即箱宽)比较敏感,不同的划分方式可能会得到完全不同的图像。

  2. 分布函数(一般指累积分布函数)给出了随机变量取值小于等于某个数的概率。在连续的情况下,分布函数的导数就是概率密度函数。

  3. 概率密度函数给出了随机变量落在某个小区间内的概率。直方图可以看作是对概率密度函数的一种简单粗糙的估计。

  4. 核密度估计则是一种更为精细的对概率密度函数的估计。它通过在每个数据点处放置一个核函数(类似于一个“平滑”的直方图),然后将这些核函数叠加起来,从而得到一个平滑的估计。

所以,这四者可以看作是从不同角度、不同精度去描述数据分布特性的方法。从直方图到核密度函数,描述的越来越精细;从分布函数到概率密度函数,描述的越来越具体。

  • 22
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 高斯核函数是一种在概率密度估计中经常使用的核函数。在MATLAB中,可以使用KDE工具箱中的kde函数进行高斯核密度估计核密度估计是一种统计方法,用于估算概率密度函数的未知函数形式,通过观察样本集合上的一组密度测量来实现。 使用MATLAB中的kde函数进行高斯核密度估计,需要输入一个一维数据向量和一个可选的参数h(带宽)。由于参数h直接影响到结果的质量和精度,因此必须选择适当的带宽大小以获得最佳结果。在MATLAB中,有一个函数bwselect可用于选择最佳的带宽大小。 在进行高斯核密度估计时,kde函数将数据点视为高斯分布的中心,并将每个数据点的高斯分布加权合并为一个整体概率密度函数。最终的结果是一个连续的密度曲线,可以翻译为概率密度函数,用于估计变量的概率密度。 总之,在MATLAB中,我们可以使用高斯核函数实现核密度估计,获取概率密度函数的估计,并通过适当选择带宽大小来获得最佳结果。 ### 回答2: 在统计学和机器学习中,核密度估计是一种非参数估计方法,用于估计随机变量的概率密度函数。MATLAB作为一种强大的数学软件,内置了许多函数来处理统计学和机器学习问题,其中就包括高斯核函数做核密度估计。 高斯核函数也称为正态核函数,是核密度估计中最常用的核函数之一。对于一个样本集合,其高斯核密度估计函数可以表示为: f(x) = (1/nh^d) * Σ(1~n)exp(-||x-xi||^2/(2h^2)) 其中,x是我们要估计概率密度函数的点,xi是样本集合中的数据点,n是样本点的数量,d是数据的维度,h是带宽参数(bandwidth)。 在MATLAB中,我们可以使用kde函数来实现高斯核密度估计。例如,我们有一个样本数据集合x,其中有100个样本点,维度为1。我们可以使用以下代码估计它的概率密度函数: h = 0.5; % 设置带宽参数 [f,xi] = ksdensity(x,'Bandwidth',h); % 计算概率密度函数 plot(xi,f); % 画出概率密度函数曲线 在上面的代码中,我们首先设置了带宽参数h为0.5,然后使用ksdensity函数计算估计的概率密度函数。最后,我们使用plot函数画出概率密度函数的曲线。 当然,在实际应用中,我们可以根据需要调整带宽参数h,以得到更准确的概率密度函数。同时,也可以使用其他的核函数来实现核密度估计。但无论使用何种方法,关键是要理解核密度估计的原理和方法,才能正确应用它来解决实际问题。 ### 回答3: MATLAB是一个广泛应用于科学计算和工程学、金融学和生物学等领域的软件平台,其强大的统计分析功能被广泛应用于各类研究领域。在MATLAB中,核密度估计是一种常见的概率密度估计方法,该方法可以在数据分布未知的情况下,通过统计样本数据的分布情况,来探索其概率密度的分布情况。 核密度估计的原理是将样本数据分布看作是一些点或小块,然后通过给这些点或小块赋权重,来构建出一个连续的概率分布函数,该过程又被称为核函数平滑。而高斯核函数是核函数中最为常见的一种,其数学表达式为: K(x) = 1/(√(2π)σ) × exp(-(x-μ)² /2σ²) 其中,μ是正态分布的均值,σ是标准差,x是来自样本数据的一个元素。高斯核函数本质上是钟形的,它能够在不同尺度下通过加权平均的方式较好地描述数据的分布情况。 在MATLAB中进行高斯核密度估计,需要使用到MATLAB中的三个函数:‘ksdensity’、‘stats.gaussian_kde’和‘pdf’。其中,‘ksdensity’函数是MATLAB在R2013a版本中推出的一种能够自动调节核函数带宽的核密度估计函数,不需要给定核函数带宽参数。‘stats.gaussian_kde’函数是MATLAB在R2014b版本中推出的一种利用高斯核函数实现的核密度估计函数,需要给定核函数带宽参数。‘pdf’函数是MATLAB中的概率密度函数,用于返回高斯核密度估计结果的概率密度值。 使用高斯核函数进行核密度估计,是MATLAB进行统计分析、数据挖掘和机器学习等领域中非常常见的方法之一,可用于建模、预测、分类等方面。该方法能有效地从样本数据中提取出其分布情况,为数据分析提供了更多的思路和方法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值