一維核密度估計的應(yīng)用一:推斷總體服從的分布
#此代碼是我手動搭建的
#此代碼未使用核密度估計的專用工具包(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]
#計算最優(yōu)帶寬
h=np.std(X,ddof=1)*(4/(3*len(X)))**0.2
#計算數(shù)學(xué)期望
print('E(X)='+str('%.2f'%np.mean(X)))
#定義高斯核函數(shù)
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))))
'''
#定義余弦核函數(shù)
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))))
#定義均勻核函數(shù)
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))))
'''
#定義高斯核密度估計函數(shù)
def f(x):return sum(K(x,xi) for xi in X)/(len(X)*h)
#計算樣本屬于區(qū)間[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)))
#繪制高斯核密度估計函數(shù)的圖像
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('核密度估計函數(shù)f(x)')
plt.show()