核密度估计(Kernel Density Estimation, KDE)是一种非参数统计方法

一、核密度估计

核密度估计(Kernel Density Estimation, KDE)是一种非参数统计方法,用于估计随机变量的概率密度函数。它通过将每个数据点周围的核函数叠加,生成平滑的密度曲线。以下是其核心要点:

1. 基本概念

  • 非参数方法:无需假设数据分布的具体形式。
  • 核函数:常用的有高斯核、均匀核等,决定每个数据点对密度估计的影响。
  • 带宽(Bandwidth):控制核函数的宽度,影响估计的平滑度。

2. 数学表达

给定样本 X 1 , X 2 , … , X n X_1, X_2, \ldots, X_n X1,X2,,Xn,核密度估计公式为:

f ^ ( x ) = 1 n h ∑ i = 1 n K ( x − X i h ) \hat{f}(x) = \frac{1}{n h} \sum_{i=1}^{n} K\left(\frac{x - X_i}{h}\right) f^(x)=nh1i=1nK(hxXi)

其中:
- f ^ ( x ) \hat{f}(x) f^(x)是在点 x x x处的密度估计。
- K ( ⋅ ) K(\cdot) K()是核函数。
- h h h是带宽参数。
- n n n是样本数量。

3. 核函数选择

常见的核函数包括:

  • 高斯核 K ( u ) = 1 2 π e − 1 2 u 2 K(u) = \frac{1}{\sqrt{2\pi}} e^{-\frac{1}{2}u^2} K(u)=2π 1e21u2
  • 均匀核 K ( u ) = 1 2 I ( ∣ u ∣ ≤ 1 ) K(u) = \frac{1}{2} \mathbb{I}(|u| \leq 1) K(u)=21I(u1)
  • Epanechnikov核 K ( u ) = 3 4 ( 1 − u 2 ) I ( ∣ u ∣ ≤ 1 ) K(u) = \frac{3}{4}(1 - u^2) \mathbb{I}(|u| \leq 1) K(u)=43(1u2)I(u1)

4. 带宽选择

带宽 h h h的选择至关重要,常见方法有:

  • 规则选择:如Silverman规则。
  • 交叉验证:通过最小化均方误差选择最优带宽。

5. 应用场景

  • 数据可视化:生成平滑的密度曲线。
  • 异常检测:识别低密度区域的异常点。
  • 模式识别:发现数据中的多峰分布。

6. 优缺点

  • 优点
    • 无需假设数据分布。
    • 能生成平滑的密度估计。
  • 缺点
    • 计算复杂度较高。
    • 带宽选择对结果影响大。

7. 实现工具

  • Pythonscipy.stats.gaussian_kdeseaborn.kdeplot
  • Rdensity() 函数

示例代码(Python)

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde

# 生成样本数据
data = np.random.normal(0, 1, 1000)

# 核密度估计
kde = gaussian_kde(data)
x = np.linspace(-5, 5, 1000)
y = kde(x)

# 绘制结果
plt.plot(x, y, label='KDE')
plt.hist(data, bins=30, density=True, alpha=0.5, label='Histogram')
plt.legend()
plt.show()

核密度估计是一种灵活且强大的工具,适用于多种数据分析和可视化任务。合理选择核函数和带宽是获得准确估计的关键。

二、常见核函数及选择方法

选择合适的核函数是核密度估计(KDE)中的重要步骤,虽然核函数的选择对结果的影响通常不如带宽选择显著,但在某些情况下,核函数的选择仍然会影响估计的平滑度和准确性。以下是选择适当核函数的一些指导原则和方法:

1. 常见核函数及其特性

不同的核函数具有不同的形状和特性,常见核函数包括:

  • 高斯核(Gaussian Kernel)
    • 公式: K ( u ) = 1 2 π e − 1 2 u 2 K(u) = \frac{1}{\sqrt{2\pi}} e^{-\frac{1}{2}u^2} K(u)=2π 1e21u2
    • 特点:无限支撑,平滑性好,适用于大多数情况。
  • 均匀核(Uniform Kernel)
    • 公式: K ( u ) = 1 2 I ( ∣ u ∣ ≤ 1 ) K(u) = \frac{1}{2} \mathbb{I}(|u| \leq 1) K(u)=21I(u1)
    • 特点:简单,但不连续,适用于离散数据。
  • Epanechnikov核
    • 公式: K ( u ) = 3 4 ( 1 − u 2 ) I ( ∣ u ∣ ≤ 1 ) K(u) = \frac{3}{4}(1 - u^2) \mathbb{I}(|u| \leq 1) K(u)=43(1u2)I(u1)
    • 特点:有限支撑,计算效率高,平滑性较好。
  • 三角核(Triangular Kernel)
    • 公式: K ( u ) = ( 1 − ∣ u ∣ ) I ( ∣ u ∣ ≤ 1 ) K(u) = (1 - |u|) \mathbb{I}(|u| \leq 1) K(u)=(1u)I(u1)
    • 特点:有限支撑,平滑性介于均匀核和高斯核之间。

2. 选择核函数的原则

  • 平滑性需求:如果需要高度平滑的密度估计,高斯核是一个不错的选择。如果对平滑性要求不高,可以选择Epanechnikov核或三角核。
  • 计算效率:有限支撑的核函数(如Epanechnikov核、均匀核)在计算上通常比无限支撑的核函数(如高斯核)更高效。
  • 数据特性:根据数据的分布特性选择核函数。例如,对于具有明显边界的数据,有限支撑的核函数可能更合适。

3. 实际选择方法

  • 默认选择:在许多情况下,高斯核是默认选择,因为它具有良好的平滑性和数学性质。
  • 交叉验证:可以通过交叉验证的方法来选择核函数。具体步骤如下:
    1. 将数据分为训练集和验证集。
    2. 对每个候选核函数,使用训练集进行密度估计。
    3. 在验证集上评估密度估计的准确性(例如,使用对数似然或均方误差)。
    4. 选择在验证集上表现最好的核函数。
  • 经验法则:根据经验或领域知识选择核函数。例如,在金融领域,高斯核常用于估计资产回报率的密度。

4. 示例代码(Python)

以下代码展示了如何使用交叉验证选择核函数:

import numpy as np
from scipy.stats import gaussian_kde
from sklearn.model_selection import KFold
from sklearn.metrics import log_loss

# 生成样本数据
data = np.random.normal(0, 1, 1000)

# 定义候选核函数
kernels = {
    'Gaussian': lambda x: gaussian_kde(x, bw_method='scott'),
    'Epanechnikov': lambda x: gaussian_kde(x, bw_method='scott')  # 此处仅作示例,实际需实现Epanechnikov核
}

# 交叉验证
kf = KFold(n_splits=5)
results = {}

for name, kernel in kernels.items():
    log_likelihoods = []
    for train_index, test_index in kf.split(data):
        train_data = data[train_index]
        test_data = data[test_index]
        kde = kernel(train_data)
        log_likelihoods.append(-kde.logpdf(test_data).mean())
    results[name] = np.mean(log_likelihoods)

# 选择最佳核函数
best_kernel = min(results, key=results.get)
print(f'Best kernel: {best_kernel} with log likelihood: {results[best_kernel]}')

选择适当的核函数需要综合考虑数据的特性、平滑性需求和计算效率。高斯核通常是默认选择,但在特定情况下,其他核函数可能更合适。通过交叉验证和经验法则,可以更科学地选择核函数。

三、无限支撑与有限支撑核函数

在核密度估计(KDE)中,“无限支撑”(Infinite Support)和“有限支撑”(Finite Support)是用来描述核函数定义域的概念。具体来说:

1. 无限支撑(Infinite Support)

  • 定义:一个核函数如果在整个实数轴(即从负无穷到正无穷)上都有定义且非零,则称该核函数具有无限支撑。

  • 例子:高斯核(Gaussian Kernel)是一个典型的无限支撑核函数,其公式为:
    K ( u ) = 1 2 π e − 1 2 u 2 K(u) = \frac{1}{\sqrt{2\pi}} e^{-\frac{1}{2}u^2} K(u)=2π 1e21u2
    高斯核在所有实数 u u u上都有定义且非零。

  • 特点

    • 平滑性好:无限支撑的核函数通常能生成非常平滑的密度估计。
    • 计算复杂度高:由于核函数在整个实数轴上都有定义,计算时需要考虑所有数据点的影响,计算量较大。

2. 有限支撑(Finite Support)

  • 定义:一个核函数如果只在有限的区间内定义且非零,而在该区间外为零,则称该核函数具有有限支撑。

  • 例子:Epanechnikov核和均匀核都是有限支撑核函数。Epanechnikov核的公式为:
    K ( u ) = 3 4 ( 1 − u 2 ) I ( ∣ u ∣ ≤ 1 ) K(u) = \frac{3}{4}(1 - u^2) \mathbb{I}(|u| \leq 1) K(u)=43(1u2)I(u1)
    其中 I ( ∣ u ∣ ≤ 1 ) \mathbb{I}(|u| \leq 1) I(u1)是指示函数,当 ∣ u ∣ ≤ 1 |u| \leq 1 u1时为1,否则为0。因此,Epanechnikov核只在区间 [ − 1 , 1 ] [-1, 1] [1,1]内有定义且非零。

  • 特点

    • 计算效率高:由于核函数只在有限区间内非零,计算时只需考虑该区间内的数据点,计算量较小。
    • 平滑性较差:有限支撑的核函数生成的密度估计可能不如无限支撑核函数平滑。

3. 选择无限支撑还是有限支撑核函数

  • 无限支撑核函数(如高斯核)适用于需要高度平滑密度估计的场景,尤其是在数据分布较为复杂或需要精细分析时。
  • 有限支撑核函数(如Epanechnikov核)适用于计算资源有限或数据量较大的场景,因为它们计算效率更高。

4. 示例代码(Python)

以下代码展示了无限支撑(高斯核)和有限支撑(Epanechnikov核)的核密度估计:

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde

# 生成样本数据
data = np.random.normal(0, 1, 1000)

# 高斯核(无限支撑)
kde_gaussian = gaussian_kde(data)
x = np.linspace(-5, 5, 1000)
y_gaussian = kde_gaussian(x)

# Epanechnikov核(有限支撑,此处使用自定义实现)
def epanechnikov_kernel(u):
    return np.where(np.abs(u) <= 1, 0.75 * (1 - u**2), 0)

def kde_epanechnikov(data, x, h):
    n = len(data)
    y = np.zeros_like(x)
    for xi in x:
        y += epanechnikov_kernel((xi - data) / h)
    return y / (n * h)

h = 0.5  # 带宽
y_epanechnikov = kde_epanechnikov(data, x, h)

# 绘制结果
plt.plot(x, y_gaussian, label='Gaussian KDE')
plt.plot(x, y_epanechnikov, label='Epanechnikov KDE')
plt.hist(data, bins=30, density=True, alpha=0.5, label='Histogram')
plt.legend()
plt.show()

“无限支撑”和“有限支撑”描述了核函数的定义域范围。无限支撑核函数(如高斯核)在整个实数轴上都有定义,适合需要高度平滑的密度估计;有限支撑核函数(如Epanechnikov核)只在有限区间内定义,计算效率更高。根据具体需求选择合适的核函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/954963.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker安装PostGreSQL docker安装PostGreSQL 完整详细教程

Docker安装PostGreSQL docker安装PostGreSQL 完整详细教程 Docker常用命令大全Docker 运行命令生成Docker 上安装 PostGreSQL 14.15 的步骤&#xff1a;1、拉取 PostGreSQL 14.15 镜像2、创建并运行容器3、测试连接4、设置所有IP都可以运行连接进入容器内 修改配置文件关闭容器…

Elasticsearch:Jira 连接器教程第一部分

作者&#xff1a;来自 Elastic Gustavo Llermaly 将我们的 Jira 内容索引到 Elaasticsearch 中以创建统一的数据源并使用文档级别安全性进行搜索。 在本文中&#xff0c;我们将回顾 Elastic Jira 原生连接器的一个用例。我们将使用一个模拟项目&#xff0c;其中一家银行正在开发…

Spring 6 第1章——概述

一.Spring是什么 Spring是一款主流的Java EE轻量级&#xff08;体积小、不需要依赖其它组件&#xff09;开源框架Spring的目的是用于简化Java企业级应用的开发难度和开发周期Spring的用途不仅限于服务端的开发&#xff0c;从简单性、可测试性和松耦合的角度而言&#xff0c;任…

git管理源码之git安装和使用

git是什么&#xff1f; git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理&#xff0c;也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。git与常用的版本控制工具SVN等不同&#xff0c;它采用…

大疆最新款无人机发布,可照亮百米之外目标

近日&#xff0c;DJI 大疆发布全新小型智能多光旗舰 DJI Matrice 4 系列&#xff0c;包含 Matrice 4T 和 Matrice 4E 两款机型。DJI Matrice 4E 价格为27888 元起&#xff0c;DJI Matrice 4T价格为38888元起。 图片来源&#xff1a;大疆官网 DJI Matrice 4E DJI Matrice 4T D…

基于Java的语音陪聊软件——支持聊天私聊-礼物系统-直播系统-缘分匹配-游戏陪玩

丰富的经验、成熟的技术&#xff0c;打造适合当下市场发展的语音交友软件源码。Java 语言凭借其独特的优势&#xff0c;为这款语音陪聊软件的稳健运行和持续发展奠定了坚实基础。它不仅融合了聊天私聊、礼物系统和直播系统等实用且有趣的功能&#xff0c;还创新性地引入了缘分匹…

npm发布工具包+使用

1.初始化package包 npm init -y {"name": "common-cjs-tools","version": "1.0.0","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" &&…

WXML模版语法-事件绑定

知识点1&#xff1a;什么是事件 事件是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为&#xff0c;反馈到逻辑层进行业务的处理。 知识点2&#xff1a;小程序中常用的事件 类型绑定方式事件描述tapbindtap或bind:tap手指触摸后马上离开&#xff0c;类似于…

Uniapp-运行到手机安卓基座报错

1、运行报错 2、解决adb冲突,显示设备列表&#xff0c;说明手机与电脑连接成功 3、重新运行&#xff0c;还是找不到&#xff0c;就多刷新几下即可。

ESP8266固件烧录

一、烧录原理 1、引脚布局 2、引脚定义 3、尺寸封装 4、环境要求 5、接线方式 ESP8266系列模块集成了高速GPI0和外围接口&#xff0c;这可能会导致严重的开关噪声。如果某些应用需要高功率和EMI特性&#xff0c;建议在数字I/0线上串联10到100欧姆。这可以在切换电源时抑制过冲…

紫光无人机AI飞控平台介绍

随着无人机技术的迅猛发展&#xff0c;无人机飞控平台的智能化需求不断提升。紫光无人机AI飞控平台作为一款创新型产品&#xff0c;为用户提供了从飞行控制到任务管理的一站式解决方案&#xff0c;尤其在AI实时识别和事件分析方面具有显著优势。本文将介绍平台的核心功能、技术…

【SpringBoot】Spring 一站式解决方案:融合统一返回结果、异常处理与适配器模式

前言 &#x1f31f;&#x1f31f;本期讲解关于统一功能处理的详细介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话…

回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测

回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测 目录 回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 RVM-Adaboost相关向量机集成学习多输入单输出回归预测是一种先进的机器学习方法&#xff0c;用于处理…

【C语言】内存函数详解与模拟实现

文章目录 拓展&#xff1a;Ⅰ. memcpy -- 内存拷贝1、函数介绍与使用2、模拟实现 Ⅱ. memmove -- 内存拷贝1、函数介绍与使用&#xff08;与memcpy函数的区别&#xff09;2、模拟实现 Ⅲ. memcmp -- 内存比较1、函数介绍与使用2、模拟实现 Ⅳ. memset -- 内存设置1、函数介绍与…

解析OVN架构及其在OpenStack中的集成

引言 随着云计算技术的发展&#xff0c;虚拟化网络成为云平台不可或缺的一部分。为了更好地管理和控制虚拟网络&#xff0c;Open Virtual Network (OVN) 应运而生。作为Open vSwitch (OVS) 的扩展&#xff0c;OVN 提供了对虚拟网络抽象的支持&#xff0c;使得大规模部署和管理…

解密AIGC三大核心算法:GAN、Transformer、Diffusion Models原理与应用

在当今数字化时代&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;技术正以前所未有的速度改变着我们的生活和工作方式。从创意无限的文本生成&#xff0c;到栩栩如生的图像创作&#xff0c;再到动听的音乐旋律&#xff0c;AIGC的魔力无处不在。而这一切的背后&#…

艾体宝干货丨网络故障排除基本指南

一、确保网络可视性以有效排除故障 有效的网络故障排除要求对穿越网络的数据具有完全的可见性&#xff0c;以便迅速识别和解决潜在问题。本指南深入探讨了一种结构化的网络分析方法&#xff0c;旨在提高故障排除的效率。首先&#xff0c;提出正确的问题至关重要&#xff0c;它…

汽车免拆诊断案例 | 2007 款法拉利 599 GTB 车发动机故障灯异常点亮

故障现象  一辆2007款法拉利599 GTB车&#xff0c;搭载6.0 L V12自然吸气发动机&#xff08;图1&#xff09;&#xff0c;累计行驶里程约为6万km。该车因发动机故障灯异常点亮进厂检修。 图1 发动机的布置 故障诊断 接车后试车&#xff0c;发动机怠速轻微抖动&#xff0c;…

浪潮海岳 UploadListFile文件上传致RCE漏洞

一、漏洞简介 浪潮云财务系统的/cwbase/EP/ListContent/UploadListFile.ashx接口存在任意文件上传漏洞&#xff0c;未经身份验证的攻击者可以通过该漏洞上传恶意脚本文件&#xff0c;从而控制目标服务器。 二、漏洞影响 三、网络测绘&#xff1a; fofa: body"/cwbase/w…

高等数学学习笔记 ☞ 不定积分的积分法

1. 第一换元积分法 1. 基础概念&#xff1a;形如的过程&#xff0c;称为第一换元积分法。 2. 核心思想&#xff1a;通过对被积函数的观察(把被积函数的形式与积分表的积分公式进行比较)&#xff0c;把外部的部分项拿到的内部(求原函数)&#xff0c; 然后进行拼凑&#xff0c;…