代码改变世界

Seaborn.distplot的Y轴意味着什么?(KDE plot)

2020-09-30 11:43  唐建威  阅读(10715)  评论(0编辑  收藏  举报

前天和导师开会的时候,我给导师看了我plot出的一张图,如下。导师问我,图里的Y轴是什么意思。我的回答很模糊,说这是经过KDE,kernel density estimation计算后的值,大概代表着数据密度,来表达数据分布,但是具体的值我并不清楚。

 

 KDE的原理

今天我就研究了下,KDE的计算具体是怎样。

 

 

 这里以高斯kernel为例。KDE对于数据里的每一个点,都画作一个高斯分布的波。然后对波进行叠加,于是数据密集的地方,波的高度就越高,数据越稀疏的地方,波就相对矮,数据分布的就一目了然。

 

那么,Y轴的值具体上又代表着什么呢?

我们知道在matplotlib.pyplot.hist里,y轴为数据在某一个范围里出现的频次。Seaborn.distplot却不同,有2个参数的默认值为True,分别为kde=True和norm_hist=True. 原来,distplot对数据的进行了归一化处理。我们来看看当kde与norm_hist为False时的情况,并对比下matplotlib.pyplt.hist。

 

 

 

 

 

 可以看到,当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。

 

这就是Seaborn.distplot里Y轴高度的含义了,感谢阅读。