在得到一些数据后,你想看这些数据的分布情况,一般会画直方图(Histogram),但如果你想知道这个数据的分布密度情况呢?我们就需要对数据的分布进行密度估计。
一、密度估计的问题
由给定样本集合求解随机变量的分布密度函数问题是概率统计学的基本问题之一。解决这一问题的方法包括参数估计和非参数估计。
1. 参数估计
参数估计又可分为参数回归分析和参数判别分析。在参数回归分析中,人们假定数据分布符合某种特定的性态,如线性、可化线性或指数性态等,然后在目标函数族中寻找特定的解,即确定回归模型中的未知参数。在参数判别分析中,人们需要假定作为判别依据的、随机取值的数据样本在各个可能的类别中都服从特定的分布。经验和理论说明,参数模型的这种基本假定与实际的物理模型之间常常存在较大的差距,这些方法并非总能取得令人满意的结果。
例如:最大似然估计(MLE),线性回归模型;
2. 非参数估计方法
由于上述缺陷,Rosenblatt和Parzen提出了非参数估计方法,即核密度估计方法。
核密度估计(英语:Kernel Density Estimation (KDE))是在概率论中用来估计未知的密度函数,属于非参数检验方法之一,由Rosenblatt (1955)和Emanuel Parzen(1962)提出,又名Parzen窗(Parzen window)。由于核密度估计方法不利用有关数据分布的先验知识,对数据分布不附加任何假定,是一种从数据样本本身出发研究数据分布特征的方法,因而,在统计学理论和应用领域均受到高度的重视。
二、什么是“核”
我们先说说这个核 (kernel) 是什么。
首先,“核”在不同的语境下的含义是不同的,例如在模式识别里,它的含义就和这里不同。在“非参数估计”的语境下,“核”是一个函数,用来提供权重。例如高斯函数 (Gaussian) 就是一个常用的核函数。
让我们举个例子,假设我们现在想买房,钱不够要找亲戚朋友借,我们用一个数组来表示
5
个亲戚的财产状况: [8, 2, 5, 6, 4]
。我们是中间这个数 5
。“核”可以类比成朋友圈,但不同的亲戚朋友亲疏有别,在借钱的时候,关系好的朋友出力多,关系不好的朋友出力少,于是我们可以用权重来表示。总共能借到的钱是: 8*0.1 + 2*0.4 + 5 + 6*0.3 + 4*0.2 = 9.2
。
那么“核”的作用就是用来决定权重,例如高斯函数(即正态分布):
如果还套用上面的例子的话,可以认为在 3 代血亲之外的亲戚就基本不会借钱给你了。
最后呢,一般要求核函数有下面两个性质:
- 归一化:
- 对称性:对所有
要求
最后: 一些常用的核
三、核密度估计
理解了“核”,核密度估计就容易理解了。
如果我们画直方图,其实目的是画出“概率密度函数”,而直方图本质上是认为频率等于概率。但这种假设不是必然的。核密度函数就是一种“平滑(smooth)”的手段。相当于是“我说我很牛逼你可能不信,但你可以听听我的朋友们是怎么评价我的,加权平均下就能更好地了解我了”。于是乎:
设
上面式子中 [-1, 1]
之间。下图是直方图和核密度估计的一个对比:
四、选择合适的带宽
选择不同的带宽(bandwidth),核密度估计的结果也大不相同,因此人们研究了一些算法来选择带宽。这方面对理解 KDE 本身没有什么太重要的意义,并且常见的算法在 scipy 里也已经都实现了,这里就不细说了,有兴趣的看看 wiki。
以示例数据:example_data = [-1.95, -1.5, -0.7, -0.65, -0.62, 0.1, 0.9]
为例,将标准正态分布作为核函数,选取不同的宽度
带宽的选择原则:
设核函数已知,且满足上述的三个条件。那么宽度
具体推导公式见该博客:核密度估计:带宽宽度选择——原理阐述
带宽宽度的选择,会极大的影响到核密度估计的准确性。待选择的带宽宽度为最佳宽度的情况下,核函数的形式对 IMSE 的影响甚小,因此在选择核函数上,我们需要更加注重于核函数的数学性质,比如其求解的难度和导数的阶数
参考:
核密度估计(kernel density estimation)