参考:核密度估计Kernel Density Estimation(KDE)概述 密度估计的问题
按照自己的理解说明下大致的思路,就是已知一些点信息,然后计算周围所有的点与已知点之间的一个函数,通过这个函数可以得到一个结果,就是最终核密度估计的结果,这个函数就是一个核函数,我们可以通过高斯核函数来进行测验。首先定义一个高斯分布的函数:
$$f(x)=frac{1}{sqrt{2pi}sigma} ext{exp}left(-frac{(x-mu)^2}{2sigma^2} ight)$$
然后给定三个数 5、10、15,之后计算 3.5 到 16.5 之间数字的值
代码
import math def norm_alex(x, loc=0, scale=1): return np.e**(-1*(x-loc)**2/2/scale**2)/math.sqrt(2*np.pi)/scale nums = [5, 10, 15] def kde(x, loc=0, scale=1): s = 0 for num in nums: s += norm_alex(x-num, loc, scale) return s/3 def kde_np(XX, loc=0, scale=1): yy = np.zeros_like(XX) for i in range(len(yy)): yy[i] = kde(XX[i], loc, scale) return yy XX = np.linspace(3.5, 16.5, num=800) yy = kde_np(XX, loc=0, scale=0.4) plt.plot(XX, yy)
效果:
通过 scipy.stats.norm 来计算正态分布,看如下的例子
代码:
from scipy import stats import numpy as np import matplotlib.pyplot as plt gauss = stats.norm(loc=0, scale=0.5) X = np.linspace(-5,5,num=400) y = gauss.pdf(X) plt.plot(X, y)
效果: