【574】KDE与正态分布

参考:scipy.stats.norm函数

参考:核密度估计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)

  效果: 

原文地址:https://www.cnblogs.com/alex-bn-lee/p/14890023.html