概念
核密度估计(Kernel Density Estimation,简称 KDE)是一种非参数统计方法,用于估计随机变量的概率密度函数(Probability Density Function,PDF)。它通过在每个数据点周围放置核函数(通常是一个正态分布),然后将这些核函数叠加起来来估计概率密度函数。核密度估计常用于数据分布的可视化和平滑。
代码实现
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
from sklearn.neighbors import KernelDensity
# 生成一组模拟观测数据
np.random.seed(42)
data = np.random.normal(5, 2, 100)
# 创建一组测试点用于绘制估计的概率密度函数
x = np.linspace(min(data), max(data), 1000).reshape(-1, 1)
# 使用scikit-learn的KernelDensity进行核密度估计
kde = KernelDensity(kernel='gaussian', bandwidth=0.5).fit(data.reshape(-1, 1))
log_dens = kde.score_samples(x)
# 绘制原始数据和估计的概率密度函数
plt.hist(data, bins=20, density=True, alpha=0.5, color='blue', label='Histogram')
plt.plot(x, np.exp(log_dens), color='red', label='Kernel Density Estimation')
plt.xlabel('Value')
plt.ylabel('Density')
plt.legend()
plt.title('Kernel Density Estimation')
plt.show()