欢迎光临散文网 会员登陆 & 注册

一维核密度估计的应用一:推断总体服从的分布

2023-08-04 20:17 作者:耿大哥讲算法  | 我要投稿

#此代码是我手动搭建的

#此代码未使用核密度估计的专用工具包(KernelDensity)

#如需将此代码放在自己个人社交平台,请给个引用"B站 耿大哥讲算法" 

import numpy as np
from sklearn.metrics import auc
import matplotlib.pyplot as plt
import matplotlib;matplotlib.rc("font",family='Microsoft YaHei')
#样本
X=[93,75,83,93,91,85,84,82,77,76,77,95,94,89,91,88,84,83,96,81,
  79,97,78,75,67,69,68,84,83,81,75,66,85,70,94,84,83,82,80,78,
  74,73,76,70,86,76,89,90,71,66,86,73,80,94,79,78,77,63,53,55]
#计算最优带宽
h=np.std(X,ddof=1)*(4/(3*len(X)))**0.2
#计算数学期望
print('E(X)='+str('%.2f'%np.mean(X)))
#定义高斯核函数
def K(x,xi):return 1/(2*np.pi)**0.5*np.exp(-((x-xi)/h)**2/2)
#计算方差
print('D(X)='+str('%.2f'%(h**2+np.var(X,ddof=0))))
'''
#定义余弦核函数
def k(x,xi):
   if b-h<=a<=b+h:return np.pi/4*np.cos(np.pi/2*((x-xi)/h))
   else:return 0
#计算方差
print('D(X)='+str('%.2f'%((1-8/np.pi**2)*h**2+np.var(X,ddof=0))))
#定义均匀核函数
def k(x,xi):
   if xi-h<=x<=xi+h:return 0.5
   else:return 0
#计算方差
print('D(X)='+str('%.2f'%(h**2/3+np.var(X,ddof=0))))
'''

#定义高斯核密度估计函数
def f(x):return sum(K(x,xi) for xi in X)/(len(X)*h)
#计算样本属于区间[a,b]概率
def P(a,b):
  x=np.arange(a,b,0.01)
  y=[f(i) for i in x]
  return auc(x,y)
print('P(80≤X≤100)='+str('%.3f'%P(80,100)))
#绘制高斯核密度估计函数的图像
x=np.arange(40,120,0.1)
y=[f(i) for i in x]
plt.title('h='+str('%.3f'%h))
plt.fill(x,y,facecolor='green',alpha=0.5)
plt.plot(x,y,'r-')
plt.xlabel('x')
plt.ylabel('核密度估计函数f(x)')
plt.show()

一维核密度估计的应用一:推断总体服从的分布的评论 (共 条)

分享到微博请遵守国家法律