核密度估计 二维 python
时间: 2023-10-31 09:06:04 浏览: 195
二维非参数核密度估计
核密度估计(Kernel Density Estimation)是一种用于估计概率密度函数的非参数方法。在二维情况下,核密度估计可以通过在每个数据点周围放置高斯核函数,并将所有核函数的值加权平均来计算密度估计。Python中有很多库可以帮助我们进行核密度估计,其中scikit-learn和SciPy都提供了相关的函数。
下面是一个使用scikit-learn库进行二维核密度估计的示例代码:
```
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KernelDensity
# 生成二维随机数据
np.random.seed(0)
mean = [0, 0]
cov = [[1, 0], [0, 1]]
x, y = np.random.multivariate_normal(mean, cov, 100).T
xy = np.vstack([x, y]).T
# 使用高斯核函数进行二维核密度估计
kde = KernelDensity(kernel='gaussian', bandwidth=0.2).fit(xy)
# 生成网格点用于绘制密度估计图
x_min, x_max = x.min() - 1, x.max() + 1
y_min, y_max = y.min() - 1, y.max() + 1
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100),
np.linspace(y_min, y_max, 100))
grid_points = np.c_[xx.ravel(), yy.ravel()]
# 计算每个网格点的密度值
densities = np.exp(kde.score_samples(grid_points))
density_map = densities.reshape(xx.shape)
# 绘制二维核密度估计图
plt.imshow(density_map, origin='lower', aspect='auto',
extent=[x_min, x_max, y_min, y_max], cmap='hot_r')
plt.scatter(x, y, c='white', s=20, edgecolor='black')
plt.colorbar(label='Density')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Kernel Density Estimation')
plt.show()
```
阅读全文