核密度估计KDE概率密度以及累计概率计算

​ 最近在用python复现fluxrank(根因定位)论文,其中用到了核密度估计KDE来计算KPI的变化程度,需要计算累计概率值,网上教程还是挺少的,对于核密度估计算法的原理和实现方式网上教程很多,这里引用一篇,通俗易懂,从零开始实现核密度估计,也有python中sklearn和scipy中自带的API可以直接使用,这里主要记录下怎么实现累积概率函数,分别从sklearn、scipy以及自己实现的方式来讨论下这三种方式实现累积概率

  1. 自己实现的方式
def get_kde(x, data_array, bandwidth=0.1):
    def gauss(x):
        import math
        return (1 / math.sqrt(2 * math.pi)) * math.exp(-0.5 * (x ** 2))

    N = len(data_array)
    res = 0
    if len(data_array) == 0:
        return 0
    for i in range(len(data_array)):
        res += gauss((x - data_array[i]) / bandwidth)
    res /= (N * bandwidth)
    return res

​ get_kde是简单版本的概率密度函数,可以输入x,得到对应的概率密度,累计概率是对概率密度的积分,所以要计算一个区间[a,b]的累计概率,以一个较小的值离散化得到一个序列,并将这个值乘以概率值,然后求和,就是一个近似求积分的过程,得到累计概率。

∫ a b f ( x ) = 1 n h ∑ i = 1 n [ ∫ a b K ( x − x i h ) d x ] \int_{a}^{b}f(x) = \frac{1}{nh}\sum_{i=1}^{n}[\int_{a}^{b}K(\frac{x-x_i}{h})dx] abf(x)=nh1i=1n[abK(hxxi)dx]

  1. sklearn的api

    ​ sklearn中提供sklearn.neighbors.KernelDensity类,可以传入对应的核函数,而且提供score_samples函数计算概率密度,但是很奇怪的是没有提供计算累计概率的API,如果需要实现可以按照1中来实现

  2. scipy的api

    scipy中的stats.gaussian_kde可以计算高斯核函数的密度函数,而且提供了直接计算区间的累计密度函数,integrate_box_1d(low=-np.Inf, high=x)

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: 高斯核密度估计(Kernel Density Estimation,KDE)是一种用于估计概率密度函数的非参数方法。它通过将每个数据点周围的高斯核函数叠加起来来估计数据集的概率密度KDE的值是指在给定某一数据点处的概率密度估计值。计算KDE的值通常需要确定核函数的带宽(bandwidth)参数,它决定了核函数的宽度,即对数据点周围的影响范围。 在给定一组数据点和带宽参数后,KDE的值可以通过以下的计算过程获得: 1. 对于每个数据点,计算与该数据点距离在带宽范围内的所有其他数据点的核函数值。 2. 将所有核函数值求和并除以数据点数量,得到该数据点处的概率密度估计值。 基于高斯核函数的KDE通常具有较好的光滑性和连续性,适用于连续型数据的概率密度估计。通过调整带宽参数,可以控制估计值的平滑程度和准确性。 KDE的值可以用于多个应用场景,如异常检测、模式识别、分类等。在异常检测中,较低的KDE值可能表明该数据点具有较低的概率出现,从而可能被视为异常值。在模式识别中,可以利用KDE的值来区分不同的数据模式。在分类问题中,可以利用KDE的值来评估新数据点属于各个类别的概率,从而进行分类决策。 总之,高斯核密度估计KDE)提供了一种非参数方法来估计概率密度函数,通过将每个数据点周围的高斯核函数叠加起来来获得数据集的概率密度估计值。KDE的值可以用于多种应用场景,具有广泛的实际意义。 ### 回答2: 高斯核密度估计KDE)是一种用于估计随机变量分布的非参数方法。它的基本思想是将每个观测样本点视为一个高斯函数的中心,并根据每个样本点周围的邻域来估计密度函数的值。 KDE计算过程如下: 1. 首先选择一个核函数,通常选择高斯函数作为核函数。 2. 对每个观测样本点,以该点为中心构建一个高斯函数。 3. 对每个高斯函数,计算该函数在各个自变量上的值。 4. 将所有高斯函数的值加权求和,得到估计密度函数的值。 在计算KDE的过程中,需要考虑两个重要的参数:核函数的带宽和观测样本点的数量。核函数的带宽决定了高斯函数对密度函数的贡献程度,较小的带宽会导致估计过于敏感,较大的带宽会导致估计过于平滑。观测样本点的数量影响到对密度函数的完整覆盖程度,较少的样本点可能会导致估计不准确。 KDE在实际应用中具有广泛的应用,例如在统计分析、数据挖掘和机器学习中。它可以用于分析数据的分布特征、寻找异常点、生成合成数据以及进行分类和聚类等任务。 总结来说,KDE是一种通过将每个观测样本点视为高斯函数的中心,根据每个样本点周围的邻域来估计密度函数的非参数方法。它能够通过调整核函数的带宽和观测样本点的数量来灵活地对不同的数据分布进行建模和估计。 ### 回答3: 高斯核密度估计KDE)是一种非参数的概率密度估计方法。它基于观测数据的分布情况,通过在每个数据点周围创建一个高斯核函数的方式来估计整体的概率密度函数。 KDE的值表示某个特定点的概率密度估计。具体来说,对于给定的输入点,KDE计算该点周围邻近点的贡献,并将它们的高斯核函数叠加在一起得到该点的概率密度估计值。 在计算过程中,KDE使用一个带宽参数来控制高斯核函数的宽度,带宽越小则高斯核函数的影响范围越小,估计的概率密度函数越细致;带宽越大则高斯核函数的影响范围越大,估计的概率密度函数越平滑。 KDE的值可以用来表示某个数据点在数据集中的相对重要性或罕见性。具体来说,KDE值较高的点表示该点周围有较多的数据点,因此被认为是数据集中的常见点;而KDE值较低的点表示该点周围较少的邻近点,因此被认为是数据集中的罕见点。 总结起来,高斯核密度估计KDE)的值代表了在给定数据点周围创建高斯核函数并叠加后得到的概率密度估计值。它可以用来衡量数据点的重要性或罕见性,并且随着带宽参数的不同而产生不同的估计结果。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值