如何估计密度函数并计算其峰值?

     2023-03-11     285

关键词:

【中文标题】如何估计密度函数并计算其峰值?【英文标题】:How to estimate density function and calculate its peaks? 【发布时间】:2015-09-23 18:44:24 【问题描述】:

我已经开始使用python进行分析了。我想做以下事情:

    获取数据集分布 获取此分布中的峰值

我使用 scipy.stats 中的 gaussian_kde 来估计核密度函数。 guassian_kde 是否对数据做出任何假设?我正在使用随时间变化的数据。因此,如果数据具有一种分布(例如高斯分布),它稍后可能具有另一种分布。 gaussian_kde 在这种情况下有什么缺点吗?在question 中建议尝试将数据拟合到每个分布中以获得数据分布。那么使用 gaussian_kde 和question 中提供的答案有什么区别。我使用了下面的代码,我也想知道 gaussian_kde 是估计 pdf 的好方法,如果数据会随着时间而改变?我知道 gaussian_kde 的一个优点是它可以根据经验自动计算带宽,如here。另外,我怎样才能得到它的峰值?

import pandas as pd
import numpy as np
import pylab as pl
import scipy.stats
df = pd.read_csv('D:\dataset.csv')
pdf = scipy.stats.kde.gaussian_kde(df)
x = np.linspace((df.min()-1),(df.max()+1), len(df)) 
y = pdf(x)                          

pl.plot(x, y, color = 'r') 
pl.hist(data_column, normed= True)
pl.show(block=True)       

【问题讨论】:

前几句很难理解。你可能想在那里更明确。您认为gaussian kde 以何种方式标准化您的数据?为什么这只会导致一个高峰?我也没有得到那之后的句子。 接受我的道歉,我改写了这个问题 【参考方案1】:

我认为您需要将非参数密度(scipy.stats.kde 中实现的那个)与参数密度(你提到的*** question 中的那个)区分开来。为了说明这两者之间的区别,请尝试以下代码。

import pandas as pd
import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt

np.random.seed(0)
gaussian1 = -6 + 3 * np.random.randn(1700)
gaussian2 = 4 + 1.5 * np.random.randn(300)
gaussian_mixture = np.hstack([gaussian1, gaussian2])

df = pd.DataFrame(gaussian_mixture, columns=['data'])

# non-parametric pdf
nparam_density = stats.kde.gaussian_kde(df.values.ravel())
x = np.linspace(-20, 10, 200)
nparam_density = nparam_density(x)

# parametric fit: assume normal distribution
loc_param, scale_param = stats.norm.fit(df)
param_density = stats.norm.pdf(x, loc=loc_param, scale=scale_param)

fig, ax = plt.subplots(figsize=(10, 6))
ax.hist(df.values, bins=30, normed=True)
ax.plot(x, nparam_density, 'r-', label='non-parametric density (smoothed by Gaussian kernel)')
ax.plot(x, param_density, 'k--', label='parametric density')
ax.set_ylim([0, 0.15])
ax.legend(loc='best')

从图中,我们看到非参数密度只不过是直方图的平滑版本。在直方图中,对于特定的观察x=x0,我们使用条形来表示它(将所有概率质量放在该单个点x=x0 上,其他地方为零),而在非参数密度估计中,我们使用钟形曲线(高斯核)来表示该点(分布在其附近)。结果是平滑的密度曲线。这个内部高斯核与您对基础数据x 的分布假设无关。它的唯一目的是平滑。

要获得非参数密度的众数,我们需要进行穷举搜索,因为不保证密度是单众数。如上例所示,如果你的准牛顿优化算法在 [5,10] 之间开始,它很可能以局部最优点而不是全局最优点结束。

# get mode: exhastive search
x[np.argsort(nparam_density)[-1]]

【讨论】:

或者,您可以使用x[nparam_density.argmax()]。此外,似乎normed=True 现在已弃用,但可以使用density=True

6.1.概率密度估计

文章目录概率密度估计概率密度估计方法直方图Rosenblatt法核密度估计常用核函数k-近邻估计估计的精度的评估方法参考3.概率分布函数与概率密度函数概率密度估计概率密度函数是概率论的最重要概念之一、虽然在统计学上常提... 查看详情

什么是gis核密度计算

核密度估计(kerneldensityestimation)是在概率论中用来估计未知的密度函数,属于非参数检验方法之一,由Rosenblatt(1955)和EmanuelParzen(1962)提出,又名Parzen窗(Parzenwindow)。Ruppert和Cline基于数据集密度函数聚类算法提出修订的核密度... 查看详情

哈尔滨工业大学计算机学院-模式识别-课程总结-概率密度函数的参数估计

...其中先验概率往往比较容易计算,类条件概率很难获取。如何计算类条件概率,便是本章要进行讲述的内 查看详情

非参数估计——parzen窗与k近邻估计(代码片段)

...式(即样本的分布未知),此时就需要对样本进行非参数估计,来求解其概率密度函数。????求解未知分布样本的概率密度函数的一种方法是:(n)个样本点中,在某点周围取一个区间(R_n),计算区间(R_n)的体积(V_n)以及落在(R_n)中的... 查看详情

如何在 pyspark 数据框列上拟合内核密度估计并将其用于创建具有估计的新列

】如何在pyspark数据框列上拟合内核密度估计并将其用于创建具有估计的新列【英文标题】:Howtofitakerneldensityestimateonapysparkdataframecolumnanduseitforcreatinganewcolumnwiththeestimates【发布时间】:2018-03-0811:10:58【问题描述】:我的用途如下... 查看详情

什么是核密度估计?如何感性认识

参考技术A语言与非参数统计(核密度估计)核密度估计是在概率论中用来估计未知的密度函数,属于非参数检验方法之一,由Rosenblatt()和EnuelParzen()提出,又名Parzen窗(Parzenwindow)。 查看详情

如何用matlab进行参数以及非参数概率密度估计

我有一组降水量数据,40年,想对其进行密度估计。经过直方图看着不是正态的,参数分布我不会估计,非参数分布我想用核密度方法。本人刚学习matlab,盼大侠出手相助。如果你不知道他具体是什么分布,应该首先找一个分布... 查看详情

clusteringbyfastsearchandfindofdesitypeaks(基于快速搜索与寻找密度峰值的聚类)

基于快速搜索与寻找密度峰值的聚类(AlexRodriguezandAlessandroLaio) 摘要:聚类分析目的是基于元素之间的相似度对其进行分类,应用范围从天文学到生物信息学、文献计量学到模式识别。我们提出一种方法,思想基于簇中心具... 查看详情

r语言绘制核密度图怎么计算重叠

...据分布的统计图形。它通过在数据点周围绘制一个曲线来估计数据分布的密度。重叠是指多个核密度图中,不同密度区域之间的重叠度。计算重叠最常用的方法是Kolmogorov-Smirnov检验(K-S检验)。K-S检验是一种统计检验,用于比较... 查看详情

最大似然估计法的原理

...θ的值,尽管我们知道这些采样数据来自于分布D.那么我们如何才能估计出θ一个自然的想法是从这个分布中抽出一个具有n个值的采样X1,X2,...,Xn,然后用这些采样数据来估计θ.一旦我们获得,我们就能从中找到一个关于θ的估计.最大... 查看详情

密度峰值聚类算法(dpc)(代码片段)

...步骤1.4DPC算法的优缺点二、改进的DPC算法及其论文2.1局部密度和相对距离的定义2.2截断距离的调整2.3聚类中心的获取方法2.4制定新的分配规则2.5改进距离矩阵三、聚类效果及其MATLAB代码参考文献前言Rodriguez等于2014年提出快速搜... 查看详情

r语言ggplot2可视化绘制二维的密度图:在r中建立二维散点数据的连续密度热图2d密度估计mass包中的kde2d函数实现2d密度估计geom_density2d函数可视化二维密度图

R语言ggplot2可视化绘制二维的密度图:在R中建立二维散点数据的连续密度热图、2D密度估计、MASS包中的kde2d函数实现2D密度估计、geom_density2d函数可视化二维密度图目录 查看详情

核密度估计kerneldensityestimation(kde)概述密度估计的问题

...率统计学的基本问题之一。解决这一问题的方法包括参数估计和非参数估计。参数估计又可分为参数回归分析和参数判别分析。在参数回归分析中,人们假定数据分布符合某种特定的性态,如线性、可化线性或指数性态等,然后... 查看详情

如何使用 KissFFT 计算峰值?

】如何使用KissFFT计算峰值?【英文标题】:HowcanicalculatethepeakusingkissFFT?【发布时间】:2013-06-0507:37:01【问题描述】:我想在真实的音频设备上应用FFT并从中计算峰值这是我的代码..N=8192kiss_fft_cpxout[N/2+1];intlen=fft->N/2+1;kiss_fft_scal... 查看详情

贝叶斯估计和极大似然估计到底有何区别

预热知识必知如何求类条件概率密度:我们知道贝叶斯决策中关键便在于知道后验概率,那么问题便集中在求解类条件概率密度!那么如何求呢?答案便是:将类条件概率密度进行参数化。最大似然估计和贝叶斯估计参数估计:... 查看详情

在 python 中实现 2D、基于 FFT 的核密度估计器,并将其与 SciPy 实现进行比较

】在python中实现2D、基于FFT的核密度估计器,并将其与SciPy实现进行比较【英文标题】:Implementinga2D,FFT-basedKernelDensityEstimatorinpython,andcomparingittotheSciPyimplimentation【发布时间】:2013-09-2602:47:25【问题描述】:我需要代码来执行2D核... 查看详情

核密度估计kerneldensityestimation(kde)matlab(代码片段)

 对于已经得到的样本集,核密度估计是一种可以求得样本的分布的概率密度函数的方法: 通过选取核函数和合适的带宽,可以得到样本的distributionprobability,在这里核函数选取标准正态分布函数,bandwidth通过AMISE规则选... 查看详情

如何从朴素贝叶斯分类器中的概率密度函数计算概率?

】如何从朴素贝叶斯分类器中的概率密度函数计算概率?【英文标题】:HowtocalculateprobabilityfromprobabilitydensityfunctionintheNaiveBayesClassifier?【发布时间】:2019-12-1417:15:43【问题描述】:我正在实现高斯朴素贝叶斯算法:#importingmodulesi... 查看详情