核密度函数学习笔记

什么是核密度函数

核密度函数(Kernel Density Estimation)是一种非参数估计方法,用于对数据的概率密度函数进行估计。其基本思想是在每个数据点处放置一个核函数,然后将所有核函数叠加起来,得到一个平滑曲线,即概率密度函数的估计结果。

核函数

核函数是作用在每个数据点上的基础函数。它需要满足以下两个条件:

  1. 是一个概率密度函数,即满足概率密度函数的所有性质;
  2. 在原点处的积分为1,即∫−∞+∞k(x)dx=1\int_{-\infty}^{+\infty}k(x)dx=1+k(x)dx=1

常用的核函数有以下几种:

  • 正态核函数(Gaussian Kernel):k(x)=12πe−x22k(x)=\frac{1}{\sqrt{2\pi}}e^{-\frac{x^2}{2}}k(x)=2π 1e2x2
  • Epanechnikov核函数:k(x)={34(1−x2),∣x∣<10,∣x∣≥1k(x)=\begin{cases}\frac{3}{4}(1-x^2),& |x|<1\\0, & |x|\ge1\end{cases}k(x)={43(1x2),0,x<1x1
  • 矩形核函数(Rectangular Kernel):k(x)={12,∣x∣<10,∣x∣≥1k(x)=\begin{cases}\frac{1}{2},& |x|<1\\0, & |x|\ge1\end{cases}k(x)={21,0,x<1x1
  • 三角核函数(Triangular Kernel):k(x)={1−∣x∣,∣x∣<10,∣x∣≥1k(x)=\begin{cases}1-|x|,& |x|<1\\0, & |x|\ge1\end{cases}k(x)={1x,0,x<1x1

其中,正态核函数是最常用的一种。

带宽宽度参数的核密度函数

在使用核密度函数进行估计时,需要确定一个带宽参数hhh。它的值越大,估计出来的曲线越平滑;值越小,估计出来的曲线越尖锐。通常,可以使用交叉验证等方法来选择合适的hhh值。

带宽参数为hhh的核密度函数定义为:f^(x)=1n∑i=1nK(x−xih)\hat{f}(x)=\frac{1}{n}\sum_{i=1}^{n}K(\frac{x-x_i}{h})f^(x)=n1i=1nK(hxxi)

其中,K(x)K(x)K(x)为核函数,xix_ixi为数据点,nnn为样本数量。

动手实践

在Python中,可以使用scipy库中的gaussian_kde函数来进行核密度函数的估计。下面是一个简单的例子。

import numpy as np
from scipy.stats import gaussian_kde
import matplotlib.pyplot as plt

# 生成随机数据
np.random.seed(0)
data = np.concatenate((np.random.randn(100), 10 + np.random.randn(300)))

# 使用gaussian_kde函数进行估计
kde = gaussian_kde(data)

# 绘制估计结果
x_grid = np.linspace(-5, 15, 1000)
plt.plot(x_grid, kde(x_grid))
plt.show()

总结

核密度函数是一种非参数估计方法,用于对数据的概率密度函数进行估计。其基本思想是在每个数据点处放置一个核函数,然后将所有核函数叠加起来,得到一个平滑曲线,即概率密度函数的估计结果。常用的核函数有正态核函数、Epanechnikov核函数等。在使用时,需要确定一个带宽参数hhh。在Python中,可以使用scipy库中的gaussian_kde函数进行估计。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐