1. 给定 6 个样本,试用 parzen 窗方法估计它们的概率密度 x1 = np.array([-2.1, -1.3, -0.4, 1.9, 5.1, 6.2]) x2 = np.array([3.2, 3.6, 3, 6, 2.5, 1.1]) 2. 生成10000个均值为0,方差为1的一维正态分布样本。在样本集中随机选择1、16、256 个样本,使用Parzen窗估计概率密度。比较窗宽h1取不同值时的估计结果。
时间: 2024-04-08 08:34:51 浏览: 16
对于第一个问题,我们可以使用 parzen 窗方法来估计给定样本的概率密度。parzen 窗方法是一种非参数概率密度估计方法,它基于窗函数在样本点上的加权平均来估计概率密度。
首先,我们需要定义一个窗函数。在这里,我们选择使用高斯窗函数。
```python
import numpy as np
from scipy.stats import norm
def parzen_density_estimate(x, data, h):
n_samples = len(data)
d = x.shape[0]
window = norm(loc=0, scale=h)
density = 0
for i in range(n_samples):
density += window.pdf((x - data[i]) / h)
density /= n_samples * h**d
return density
```
现在,我们可以使用该函数来估计给定样本的概率密度。
```python
x1 = np.array([-2.1, -1.3, -0.4, 1.9, 5.1, 6.2])
x2 = np.array([3.2, 3.6, 3, 6, 2.5, 1.1])
h = 1 # 窗宽
for i in range(len(x1)):
density = parzen_density_estimate(x1[i], x1, h)
print(f"The density estimate for x1[{i}] is: {density}")
for i in range(len(x2)):
density = parzen_density_estimate(x2[i], x2, h)
print(f"The density estimate for x2[{i}] is: {density}")
```
对于第二个问题,我们需要生成一维正态分布样本,然后使用 parzen 窗方法来估计概率密度。
```python
import matplotlib.pyplot as plt
# 生成一维正态分布样本
np.random.seed(0)
samples = np.random.normal(loc=0, scale=1, size=10000)
# 随机选择样本
n_samples = [1, 16, 256]
h_values = [0.1, 0.5, 1, 2] # 不同的窗宽
for n in n_samples:
selected_samples = np.random.choice(samples, size=n, replace=False)
for h in h_values:
densities = [parzen_density_estimate(x, selected_samples, h) for x in samples]
plt.plot(samples, densities, label=f"h={h}")
plt.title(f"Parzen density estimation for {n} samples")
plt.legend()
plt.show()
```
这段代码会生成三个子图,每个子图都显示了不同窗宽下的概率密度估计结果。