核密度估计(Kernel Density Estimation)
定义
核密度估计是估计随机变量的概率密度函数的非参数方法,即一种针对连续数据的密度估计方法,并且其根据数据本身的相互关系得到,无需对数据分布做假设。
假设样本彼此独立并遵循相同的分布。给定带宽H,每个样本都由平滑的核函数拟合。某数据的密度值可以视为其他所有样本对该数据的平均影响。
这里以高斯kernel为例。KDE对于数据里的每一个点,都画作一个高斯分布的波。然后对波进行叠加,于是数据密集的地方,波的高度就越高,数据越稀疏的地方,波就相对矮,数据分布的就一目了然。
那么,Y轴的值具体上又代表着什么呢?
我们知道在matplotlib.pyplot.hist里,y轴为数据在某一个范围里出现的频次。Seaborn.distplot却不同,有2个参数的默认值为True,分别为kde=True和norm_hist=True. 原来,distplot对数据的进行了归一化处理。我们来看看当kde与norm_hist为False时的情况,并对比下matplotlib.pyplt.hist。
![](https://i-blog.csdnimg.cn/blog_migrate/f1134b0e97acaf7f734766fc2904085c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7f4d12ea7962a67c0cfd0d925ca8a116.png)
可以看到,当kde与norm_hist皆为Fasle时,它的plot与matplotlib.pyplot.hist是一模一样的。表现出的是频次。
Seaborn文档介绍如下:当参数为True时,直方图的高度以密度而不是频次来表示,它是kde的必要条件。
norm_hist : bool, optional
If True, the histogram height shows a density rather than a count. This is implied if a KDE or fitted density is plotted.
然而,我们现在知道了Y轴表达密度,还是无法确切的知道具体的值能用来计算什么。其实,就像其他的概率分布图,它也是用来计算概率的。
在KDE图里,我们的y轴并不直接表达概率,我们需要计算的是曲线下方的面积。这个面积在直方图里就是宽度乘以高度。比如在上图,最左边的方块宽度约为0.1,范围从1.5-1.6,高度为0.8。那么数据分布在这里的概率就是0.1*0.8 = 0.08。