什么是密度图或核密度估计(KDE)图的目的?
密度图(Density Plot)是一种展示数据分布的图表,用于显示连续变量的概率密度函数,可以很好地替代直方图和箱线图等常见的数据分布图。而核密度估计(Kernel Density Estimation,简称KDE)则是生成密度图的一种方法,通过对每个数据点施加一个核函数,可以模拟出实际分布函数的形状和位置。
阅读更多:Python 教程
密度图的作用
密度图主要用于分析数据的概率分布情况,它比直方图和箱线图更为直观,可以更准确地描述连续变量的分布情况,能够反映出数据的分布的峰态、偏态以及尾部情况。
例如,我们有一个速度数据集,其中每个数据点是一辆汽车的速度,我们可以使用seaborn库生成一个直方图来观察数据的分布情况:
import seaborn as sns
import matplotlib.pyplot as plt
speeds = [78, 76, 73, 69, 77, 72, 70, 74, 76, 76, 71, 71, 75, 70, 79, 79, 72, 75, 80, 72]
sns.histplot(speeds, kde=False)
plt.show()
这个数据集的分布大致呈现双峰状态,但具体的分布情况还不是很清晰。此时,我们可以通过使用seaborn库中的kdeplot函数生成一个密度图来更准确地观察该数据的分布情况:
sns.kdeplot(speeds)
plt.show()
该数据集的两个峰值分别大约为70和77,且两个峰值之间存在一段空隙。这个数据集的分布情况,通过密度图可以更直观、准确地呈现出来。
KDE的作用
密度图是通过KDE计算出来的,KDE本身也可以用于生成概率密度估计,在机器学习和数据科学领域中广泛应用。KDE算法将每个数据点附近的区域内赋以一定的权值,进而通过多个点的权值叠加形成更加平滑的分布曲线。
KDE通过估计数据集背后的密度函数,从而可以估计出随机变量在每个点的概率密度,这在基于概率的分类算法中尤为有用。KDE的基本思路是通过一组核函数,对概率分布进行近似计算,最终生成概率密度估计的结果。
例如,我们有一个生物学数据集,其中包含25个数据点,每个数据点表示一种细胞的大小,我们可以使用scikit-learn库自带的KernelDensity类进行KDE计算:
from sklearn.neighbors import KernelDensity
import numpy as np
cell_sizes = np.array([10.5, 12.3, 11.1, 12.5, 9.9, 10.1, 14.7, 15.2, 11.0, 12.8, 13.0, 11.9, 14.1, 13.6, 9.8, 11.3, 11.5, 12.1, 12.9, 12.2, 13.5, 11.7, 10.8, 12.7])
# 将数据转化为行向量
cell_sizes = cell_sizes[:, np.newaxis]
# 创建Kernel Density对象
kde = KernelDensity(bandwidth=0.2, kernel='gaussian')
# 训练模型
kde.fit(cell_sizes)
# 定义横坐标
x = np.linspace(9, 16, 100).reshape(-1, 1)
# 计算概率密度
log_density = kde.score_samples(x)
# 绘制KDE图
plt.plot(x[:, 0], np.exp(log_density))
plt.fill_between(x[:, 0], np.exp(log_density), alpha=0.5)
plt.show()
该数据集的大小在11-13之间的概率较大,而在13-15之间的概率相对较小。这样的分布信息对于细胞学研究等领域非常有价值。
结论
密度图或核密度估计图可以有效地展示数据集的概率分布情况,其比直方图和箱线图更具直观性和准确性。KDE作为生成密度图的一种方法,也可以用于在机器学习和数据科学领域中进行概率密度估计,有助于理解和分析复杂数据集的分布规律。