使用核密度进行密度估计

Beginner

This tutorial is from open-source community. Access the source code

简介

在本实验中,我们将探索密度估计,这是一种用于估计随机变量概率密度函数的技术。具体来说,我们将重点关注核密度估计,这是一种用于估计密度的非参数方法。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入必要的库

首先,我们需要导入将用于密度估计的库。我们将使用 sklearn.neighbors 模块中的 KernelDensity 估计器,以及用于数据处理的 numpy 库。

from sklearn.neighbors import KernelDensity
import numpy as np

生成一些示例数据

接下来,我们将生成一些示例数据,以便对其进行密度估计。出于本实验的目的,让我们生成一个包含 100 个点的一维数据集。我们将使用正态分布来生成数据。

np.random.seed(0)
X = np.random.normal(0, 1, 100).reshape(-1, 1)

拟合核密度估计器

现在,我们将创建一个 KernelDensity 估计器的实例,并将其拟合到我们的数据上。我们可以为估计器选择核的类型和带宽。例如,我们可以使用高斯核,并将带宽设置为 0.2。

kde = KernelDensity(kernel='gaussian', bandwidth=0.2).fit(X)

对样本进行评分

在拟合估计器之后,我们可以使用 score_samples 方法来计算样本在估计的密度函数下的对数似然。这将为我们提供一个衡量每个样本根据密度估计的可能性大小的指标。

scores = kde.score_samples(X)

可视化密度估计

最后,我们可以使用直方图和估计的密度函数来可视化密度估计。我们可以绘制原始数据的直方图以及估计的密度函数。

import matplotlib.pyplot as plt

bins = np.linspace(-5, 5, 50)
plt.hist(X, bins=bins, density=True, alpha=0.5, label='Histogram')
plt.plot(X, np.exp(scores), color='red', label='Kernel Density Estimate')
plt.legend()
plt.show()

总结

在本实验中,我们学习了如何使用 scikit-learn 中的 KernelDensity 估计器来执行核密度估计。核密度估计是一种用于估计随机变量概率密度函数的强大技术。通过将核密度估计器拟合到数据集,我们可以估计潜在的密度,并使用直方图和估计的密度函数对其进行可视化。这使我们能够深入了解数据的分布并进行概率预测。