用python绘制kde模型

以下是使用 Python 绘制核密度估计(Kernel Density Estimation, KDE)模型的完整示例代码和说明:


方法 1: 使用 Seaborn 快速绘制

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 生成示例数据(混合高斯分布)
data = np.concatenate([
    np.random.normal(0, 1, 500),
    np.random.normal(5, 1.5, 500)
])

# 绘制 KDE 曲线
plt.figure(figsize=(10, 6))
sns.kdeplot(data, 
            bw_method=0.5,  # 带宽参数
            fill=True, 
            color='skyblue',
            linewidth=2)

# 添加直方图叠加
plt.hist(data, bins=30, density=True, alpha=0.5, color='steelblue')

# 美化图形
plt.title('Kernel Density Estimation (1D)', fontsize=14)
plt.xlabel('Value', fontsize=12)
plt.ylabel('Density', fontsize=12)
plt.grid(alpha=0.3)
plt.show()

方法 2: 使用 Scipy 自定义绘制

from scipy.stats import gaussian_kde

# 生成示例数据
data = np.random.normal(size=1000)

# 计算 KDE
kde = gaussian_kde(data, bw_method=0.2)  # 带宽参数
x_grid = np.linspace(min(data)-1, max(data)+1, 1000)

# 绘制结果
plt.figure(figsize=(10, 6))
plt.plot(x_grid, kde.evaluate(x_grid), 
         color='darkred', 
         lw=2,
         label='KDE')

# 添加原始数据点
plt.scatter(data, np.zeros_like(data), 
            alpha=0.1, 
            color='red',
            marker='|',
            label='Data Points')

plt.title('Custom KDE with Scipy', fontsize=14)
plt.xlabel('Value', fontsize=12)
plt.ylabel('Density', fontsize=12)
plt.legend()
plt.grid(alpha=0.3)
plt.show()

二维 KDE 可视化

# 生成二维数据
x = np.random.normal(size=1000)
y = x * 0.5 + np.random.normal(scale=0.3, size=1000)

# 绘制二维 KDE
plt.figure(figsize=(10, 8))
sns.kdeplot(x=x, y=y,
            cmap='viridis',
            fill=True,
            thresh=0.05,  # 显示密度阈值
            levels=20)    # 等高线数量

# 添加数据点
plt.scatter(x, y, alpha=0.3, color='white', edgecolor='black', s=20)

plt.title('2D Kernel Density Estimation', fontsize=14)
plt.xlabel('X', fontsize=12)
plt.ylabel('Y', fontsize=12)
plt.grid(alpha=0.3)
plt.show()

关键参数说明

  1. 带宽参数 (bw_method)

    • 控制密度估计的平滑程度
    • 值越大曲线越平滑(可能欠拟合)
    • 值越小细节越多(可能过拟合)
    • 可设置为数值或 'scott'/'silverman' 自动选择
  2. 常用可视化选项

    • fill=True:填充密度曲线下方区域
    • levels:指定等高线数量(2D KDE)
    • cmap:设置颜色映射(2D KDE)
    • alpha:控制透明度

运行环境要求

pip install numpy matplotlib seaborn scipy

不同方法的适用场景

方法 优点 缺点
Seaborn 快速简单,适合EDA 自定义选项有限
Scipy 完全控制计算过程 需要手动处理可视化
Statsmodels 提供更多统计功能 需要额外安装库

通过调整带宽参数和可视化选项,可以创建不同风格的密度估计图。建议先用 Seaborn 快速探索数据分布,再根据需要使用 Scipy 进行更精细的定制化分析。

你可能感兴趣的:(python,开发语言)