DATA ANALYSIS PROCESS

Matplotlib和Seaborn之核密度估计

2020-04-23  本文已影响0人  IntoTheVoid

核密度估计

之前在这节课,你通过使用 seaborn 的distplot 函数(在直方图上方绘制 KDE)见到了核密度估计 (KDE) 示例。

sb.distplot(df['num_var'])

image.png

核密度估计是估计变量的概率密度函数的一种方式。在 KDE 图形中,你可以将每个观测值看做一个小的块状区域。将这些块状区域都堆叠到一起可以生成最终的密度曲线。默认设置使用正态分布内核,但是能够生成 KDE 图形的大部分软件还包括其他内核函数选项。

Seaborn 的 distplot 函数会调用另一个函数 kdeplot 来生成 KDE。以下演示代码还使用了被 distplot 调用的第三个函数 rugplot。在轴须图中,数据点被描绘成数值轴上的破折号。

data = [0.0, 3.0, 4.5, 8.0]
plt.figure(figsize = [12, 5])

# left plot: showing kde lumps with the default settings
plt.subplot(1, 3, 1)
sb.distplot(data, hist = False, rug = True, rug_kws = {'color' : 'r'})

# central plot: kde with narrow bandwidth to show individual probability lumps
plt.subplot(1, 3, 2)
sb.distplot(data, hist = False, rug = True, rug_kws = {'color' : 'r'},
            kde_kws = {'bw' : 1})

# right plot: choosing a different, triangular kernel function (lump shape)
plt.subplot(1, 3, 3)
sb.distplot(data, hist = False, rug = True, rug_kws = {'color' : 'r'},
            kde_kws = {'bw' : 1.5, 'kernel' : 'tri'})

image.png

根据这种图形解释概率比标准直方图稍微复杂些。纵轴表示的是数据密度,而不是直接的概率。在 KDE 图形中,0 直线和曲线之间的总面积为 1。结果位于两个值之间的概率通过计算这两个值之间的下方面积得出。像这样不借助计算机判断面积大小很难,可能不准确。

虽然通过 KDE 做出具体的概率判断没有直方图直观,但是使用核密度估计依然存在一定的理由。如果数据点相对较少,则 KDE 可以对整体数据分布提供平滑的估计。这些信息可能无法通过直方图轻松地呈现出来,直方图中大量的不连续跳跃性可能会造成误导。

另外要注意的是,KDE 中的带宽参数会指定密度块体的宽度是多少。和直方图的分箱宽度类似,我们需要选择最能表示数据规律的带宽大小。带宽太小的话,数据看起来比实际的噪点更多,带宽太大的话,可能会消除推理数据的有用特征。这一点需要注意,以防可视化软件所选的默认带宽看起来不太合适,或者你想要进一步展开调查。

上一篇 下一篇

猜你喜欢

热点阅读