当前位置: 首页 > news >正文

机器学习5——非参数估计

非参数估计

  • 在参数估计中我们已经提到,想要估计后验概率 P ( ω i ∣ x ) = p ( x ∣ ω i ) p ( ω i ) p ( x ) P\left(\omega_i \mid x\right)=\frac{p\left(x \mid \omega_i\right) p\left(\omega_i\right)}{p(x)} P(ωix)=p(x)p(xωi)p(ωi), 就需要估计类条件概率 p ( x ∣ ω i ) p\left(x \mid \omega_i\right) p(xωi)。在参数估计中,我们假定了它的分布形式,然后使用了不同估计方法去估计这种分布的参数。但是这种方法是有缺陷的,因为事先假定了分布形式(贝叶斯估计假设了参数的分布形式,而极大似然估计没有。但它们两者都需要知晓,或者假定数据的分布形式。),当 p ( x ∣ ω i ) p(x \mid \omega_i) p(xωi) 没有特定形式时,我们需要非参数方法,核心思想是“让数据自己说话”。我们将通过两种方法来估计概率密度:Parzen窗口K近邻估计

从样本频率引入概率密度

  • 首先考虑最简单的情况,样本x是一维的,那么我们将x的取值范围分成k个等间隔的区间,统计每个区间内样本的个数,由此计算每个区间的概率密度。这就是直方图法。现在考虑复杂一点的情况,当 x x x d d d 维向量的时候,我们对每个维度的量都分成 k k k 个等间隔的区间,于是我们将整个空间分成了 k d k^d kd 个小空间,每个小空间的体积定义为: V = ∏ i = 1 d V=\prod_{i=1}^d V=i=1d value i _i i ,其中value e i e_i ei 为第 i i i 维分量的每个区间的大小。
    假设总样本数为 N N N ,每个小空间内样本数为 q i q_i qi ,那么每个小空间的概率密度(注意不是概率)也可以计算出来了,为 q i N V \frac{q_i}{N V} NVqi

    可以注意到,小区间的大小选择与估计的效果是密切相连的。如果区域选择过大,会导致最终估计出来的概率密度函数非常粗糙;如果区域的选择过小,可能会导致有些区域内根本没有样本或者样本非常少,这样会导致估计出来的概率密度函数很不连续。所以,随着样本数的增加,区域的体积应该尽可能小,同时又必须保证区域内有充分多的样本,但是每个区域的样本数有必须是总样本数的很小的一部分。

  • 我们常常希望能够估计某个样本点在特定区域内的概率密度。给定一个未知的概率密度函数 p ( x ) p(\mathbf{x}) p(x),我们想估计一个小区域 R \mathcal{R} R 中的概率:
    P ( x ∈ R ) = ∫ R p ( x ) d x P(\mathbf{x} \in \mathcal{R}) = \int_{\mathcal{R}} p(\mathbf{x}) \, d\mathbf{x} P(xR)=Rp(x)dx
    R \mathcal{R} R 足够小,密度近似为常数,有:
    P ( x ∈ R ) ≈ p ( x ) V R P(\mathbf{x} \in \mathcal{R}) \approx p(\mathbf{x}) V_{\mathcal{R}} P(xR)p(x)VR
    其中 V R V_{\mathcal{R}} VR 为该区域的体积。这一思想类似于在空间中“围住”样本点,通过样本的分布来反推其密度。

  • 给定一个含有 n n n 个样本的数据集:
    D = { x 1 , x 2 , . . . , x n } D = \{\mathbf{x}_1, \mathbf{x}_2, ..., \mathbf{x}_n\} D={x1,x2,...,xn}
    我们可以通过统计落在区域 R \mathcal{R} R 中的样本数 k R k_{\mathcal{R}} kR,来估计该区域的概率:
    P ( x ∈ R ) ≈ k R n P(\mathbf{x} \in \mathcal{R}) \approx \frac{k_{\mathcal{R}}}{n} P(xR)nkR
    代入上面的公式:
    p ( x ) ≈ k R / n V R p(\mathbf{x}) \approx \frac{k_{\mathcal{R}} / n}{V_{\mathcal{R}}} p(x)VRkR/n
    这就是一种基于频率的概率密度(注意, k R / n k_{\mathcal{R}} / n kR/n是概率,再除以体积得到的是概率密度)估计方法,是直方图法的数学基础。

  • 为了保证上式能随着样本量增加而收敛到真实密度函数 p ( x ) p(\mathbf{x}) p(x),需要满足以下 三个收敛性条件

    1. 区域体积收缩
      lim ⁡ n → ∞ V n = 0 \lim_{n \to \infty} V_n = 0 nlimVn=0

    2. 包含足够多样本
      lim ⁡ n → ∞ k n = ∞ \lim_{n \to \infty} k_n = \infty nlimkn=

    3. 比例合理收敛
      lim ⁡ n → ∞ k n n = 0 \lim_{n \to \infty} \frac{k_n}{n} = 0 nlimnkn=0

    这三个条件共同确保估计的稳定性和准确性,避免过拟合或欠拟合。

  • Parzen窗口和K近都基于公式: p n ( x ) = k n / n V n p_n(\mathbf{x})=\frac{k_n / n}{V_n} pn(x)=Vnkn/n,但控制的参数不同。

    • Parzen窗口:固定区域体积 V n V_n Vn,计算落入区域的样本数 k n k_n kn
    • K近邻:固定样本数 k n k_n kn,调整区域体积 V n V_n Vn 直到包含 k n k_n kn 个样本。

Parzen窗口

  • Parzen窗口通过固定一个区域(通常是超立方体),然后数有多少样本落在这个区域来估计密度。

  • 核心内容:

    • Parzen窗口:固定区域体积 V n V_n Vn,计算样本数 k n k_n kn

    • 超立方体:假设区域是一个 d d d 维超立方体,每条边长为 h n h_n hn,体积为: V n = h n d V_n = h_n^d Vn=hnd

    • 窗口函数:用一个函数(也叫核函数)来判断样本是否落在区域内。

    • 窗口函数举例:

      • φ ( u ) = { 1 if  ∣ u j ∣ ≤ 1 / 2 , j = 1 , 2 , … , d 0 otherwise  \varphi(\mathbf{u})= \begin{cases}1 & \text { if }\left|u_j\right| \leq 1 / 2, j=1,2, \ldots, d \\ 0 & \text { otherwise }\end{cases} φ(u)={10 if uj1/2,j=1,2,,d otherwise 

        这定义了一个以原点为中心的单位超立方体

      • φ ( x h n ) = { 1 if  ∣ x j ∣ ≤ h n / 2 0 otherwise  \varphi\left(\frac{\mathbf{x}}{h_n}\right)= \begin{cases}1 & \text { if }\left|x_j\right| \leq h_n / 2 \\ 0 & \text { otherwise }\end{cases} φ(hnx)={10 if xjhn/2 otherwise 

        这定义了一个以原点为中心,边长为hn的超立方体

      • φ ( x − x i h n ) = { 1 ∣ x − x i ∣ ≤ h n / 2 0 otherwise  \varphi\left(\frac{\mathbf{x}-\mathbf{x_i}}{h_n}\right)= \begin{cases}1 & \left|x-x_i \right| \leq h_n / 2 \\ 0 & \text { otherwise }\end{cases} φ(hnxxi)={10xxihn/2 otherwise 

        这定义了一个以 x \mathbf{x} x为中心,边长为hn的超立方体

      • φ ( u ) \varphi(\mathbf{u}) φ(u) 可以是任何满足 ∫ p ( u ) d u = 1 \int p(\mathbf{u}) d\mathbf{u} = 1 p(u)du=1 的概率密度函数,比如高斯分布。

  • 样本计数 k n = ∑ i = 1 n φ ( x − x i h n ) k_n = \sum_{i=1}^n \varphi\left(\frac{\mathbf{x} - \mathbf{x}_i}{h_n}\right) kn=i=1nφ(hnxxi)

  • 代入公式,得到Parzen窗口密度估计 p n ( x ) = k n / n V n = 1 n V n ∑ i = 1 n φ ( x − x i h n ) p_n(\mathbf{x}) = \frac{k_n / n}{V_n} = \frac{1}{n V_n} \sum_{i=1}^n \varphi\left(\frac{\mathbf{x} - \mathbf{x}_i}{h_n}\right) pn(x)=Vnkn/n=nVn1i=1nφ(hnxxi)

  • 那么这个 p n ( x ) p_n(\mathbf{x}) pn(x)是一个pdf函数吗?答案是肯定的,我们可以对其积分来验证其积分值是否为1:

    Set ( x − x i ) / h n = u \left(\boldsymbol{x}-\boldsymbol{x}_{\boldsymbol{i}}\right) / h_n=\boldsymbol{u} (xxi)/hn=u.

    ∫ 1 n ∑ i = 1 n 1 V n φ ( x − x i h n ) d x = 1 n ∑ i = 1 n ∫ 1 V n φ ( x − x i h n ) d x = 1 n ∑ i = 1 n ∫ φ ( u ) d u \int \frac{1}{n} \sum_{i=1}^n \frac{1}{V_n} \varphi\left(\frac{\mathbf{x}-\mathbf{x}_i}{h_n}\right) d \mathbf{x}=\frac{1}{n} \sum_{i=1}^n \int \frac{1}{V_n} \varphi\left(\frac{\mathbf{x}-\mathbf{x}_i}{h_n}\right) d \mathbf{x}=\frac{1}{n} \sum_{i=1}^n \int \varphi(\mathbf{u}) d \mathbf{u} n1i=1nVn1φ(hnxxi)dx=n1i=1nVn1φ(hnxxi)dx=n1i=1nφ(u)du
    注意由于u是d维向量,每一维乘上 h n h_n hn后再微分变成 h n d h_n^d hnd

  • 这个核函数也可以换成高斯核,这样样本点对于概率密度估计的影响会更加平滑。

  • **选择窗口体积:**那为什么要调整 V n V_n Vn 呢?

    因为:

    • 当样本 太少时:你不能让窗口太小,否则几乎没有样本落进去,估计的密度都是零。
    • 当样本 变多时:你需要减小窗口体积,让估计更细致、更精确(避免“过度平滑”)。

    这就引出了一个“平衡问题”:窗口体积不能太大,也不能太小,必须随样本数 n n n 适当变化。

    我们希望:

    • V n → 0 V_n \to 0 Vn0,这样估计才更精确(更细致)
    • 同时要求 n V n → ∞ n V_n \to \infty nVn,这样每个窗口中样本数量才不会趋近于 0,避免噪声太大

    一个合理的选择是:

    V n = V 1 n ⇒ h n ∝ n − 1 / ( 2 d ) V_n = \frac{V_1}{\sqrt{n}} \quad \Rightarrow \quad h_n \propto n^{-1/(2d)} Vn=n V1hnn1/(2d)

    这保证了:

    • 随着 n → ∞ n \to \infty n,窗口在收缩(更精细)
    • 但收缩得不会太快,仍有足够样本进入窗口

    V 1 V_1 V1 是一个常数,它代表了当样本数 n = 1 n=1 n=1 时的窗口体积。这个常数是窗口体积 V n V_n Vn 的初始值,随着样本数 n n n 的增加,窗口体积 V n V_n Vn 会根据公式 V n = V 1 n V_n=\frac{V_1}{\sqrt{n}} Vn=n V1 进行调整。

    这个公式确保了窗口体积 V n V_n Vn 随着样本数 n n n 的增加而减小,但减小的速度不会太快,以保证每个窗口中仍然有足够的样本数量,避免估计的噪声太大。同时,随着 n → ∞ n \rightarrow \infty n ,窗口体积 V n V_n Vn 趋近于 0 ,使得估计更加精确。

  • 对公式的本质理解:

    一、统计直觉:它在做什么?

    本质: 在你关心的点 x \mathbf{x} x 周围画一个“窗子”,看看这个窗子里有多少训练样本落进去,从而估计这里的“样本密集程度”。

    就像你用手电筒照一个区域,统计这个区域里有多少人。照的人越多,这里就越“热闹”,概率密度就越高。


    二、几何视角:滑动的小球数数器

    想象你手上有一个可以滑动的球(或超球体),你把这个球放在空间的每一个点 x \mathbf{x} x,然后数数这个球中包含了多少样本点。再把这个数除以球的体积和样本总数,就得到这点的密度。

    Parzen窗的“核函数”就是这个球的权重分布图:

    • 如果是均匀核(uniform kernel),就是“球体内=1,外面=0”;
    • 如果是高斯核(Gaussian kernel),则表示你允许更远的点也有影响,但越远影响越小。

    三、回到概率密度的定义:单位体积上的概率质量

    概率密度的经典定义是:
    p ( x ) = lim ⁡ δ → 0 P ( x 附近的概率 ) δ p(x) = \lim_{\delta \to 0} \frac{P(x \text{附近的概率})}{\delta} p(x)=δ0limδP(x附近的概率)
    而 Parzen窗方法正是用样本来“估计”这个概率,并用固定大小的窗口来近似这个极限过程:
    p n ( x ) = 估计的落在窗口内的概率质量 窗口体积 p_n(x) = \frac{\text{估计的落在窗口内的概率质量}}{\text{窗口体积}} pn(x)=窗口体积估计的落在窗口内的概率质量
    用核函数来“平滑计数”,代替硬性地“数多少个落进来”。


    四、从核方法的哲学看本质

    Parzen窗方法其实是最早的“核方法”之一。它遵循一种核心思想:

    “不去猜一个分布函数的具体形式(比如高斯、多项式),而是直接让数据告诉我们在哪儿‘密’、在哪儿‘稀’。”

    这种方法被称为 非参数估计(non-parametric estimation),因为它不假设概率密度函数的任何形式。

    在后来的核密度估计、核SVM、核回归中都可以看到它的哲学延续。

k n-Nearest Neighbor

  • k-NN 的本质是:根据目标点附近的 k 个训练样本来估计它所属的概率分布或类别。相比 Parzen 方法(固定体积 V n V_n Vn,统计落入样本数),k-NN 固定样本数 k n k_n kn,根据数据自动确定体积 V n V_n Vn,更具自适应性。

  • 如何用k-NN估计后验概率 P ( ω i ∣ x ) P(\omega_i \mid \mathbf{x}) P(ωix)

    后验概率公式 P n ( ω i ∣ x ) = P n ( x , ω i ) ∑ j = 1 c P n ( x , ω j ) = k i k n P_n(\omega_i \mid \mathbf{x}) = \frac{P_n(\mathbf{x}, \omega_i)}{\sum_{j=1}^c P_n(\mathbf{x}, \omega_j)} = \frac{k_i}{k_n} Pn(ωix)=j=1cPn(x,ωj)Pn(x,ωi)=knki

    • k i k_i ki k n k_n kn 中属于类别 ω i \omega_i ωi 的最近邻样本数。
    • k n k_n kn:总的最近邻样本数。

    核心思想就是为了判断X的类别,取出最贴近它的K个样本,根据这K个样本中该类别的比例来判断X属于该类别的概率。注意!!这是KNN估计后验概率的公式,不是估计密度函数的公式!!!

  • K值选择:
    k k k

    • 决策边界平滑,噪声的影响被抵消。
    • k k k 太大(比如 k = N k = N k=N)会导致过度简化,总是预测多数类。
      k k k
    • 决策边界精细,但容易受噪声影响

距离度量

  • 距离度量属性

    • 非负性 D ( a , b ) ≥ 0 D(\mathbf{a}, \mathbf{b}) \geq 0 D(a,b)0
    • 自反性 D ( a , b ) = 0 D(\mathbf{a}, \mathbf{b}) = 0 D(a,b)=0 当且仅当 a = b \mathbf{a} = \mathbf{b} a=b
    • 对称性 D ( a , b ) = D ( b , a ) D(\mathbf{a}, \mathbf{b}) = D(\mathbf{b}, \mathbf{a}) D(a,b)=D(b,a)
    • 三角不等式 D ( a , b ) + D ( b , c ) ≥ D ( a , c ) D(\mathbf{a}, \mathbf{b}) + D(\mathbf{b}, \mathbf{c}) \geq D(\mathbf{a}, \mathbf{c}) D(a,b)+D(b,c)D(a,c)
  • 闵可夫斯基距离
    ∥ x ∥ p = ( ∑ i = 1 d ∣ x i ∣ p ) 1 / p \|\mathbf{x}\|_p=\left(\sum_{i=1}^d\left|x_i\right|^p\right)^{1 / p} xp=(i=1dxip)1/p

    • 常见形式
      • L 1 L_1 L1 范数(曼哈顿距离) L 1 ( a , b ) = ∑ i = 1 d ∣ a i − b i ∣ L_1(\mathbf{a}, \mathbf{b}) = \sum_{i=1}^d |a_i - b_i| L1(a,b)=i=1daibi
      • L 2 L_2 L2 范数(欧几里得距离) L 2 ( a , b ) = ∑ i = 1 d ( a i − b i ) 2 L_2(\mathbf{a}, \mathbf{b}) = \sqrt{\sum_{i=1}^d (a_i - b_i)^2} L2(a,b)=i=1d(aibi)2
      • L ∞ L_\infty L 范数(棋盘距离) L ∞ ( a , b ) = max ⁡ ( ∣ a i − b i ∣ ) L_\infty(\mathbf{a}, \mathbf{b}) = \max(|a_i - b_i|) L(a,b)=max(aibi)
http://www.lqws.cn/news/551053.html

相关文章:

  • 数据库外连接详解:方式、差异与关键注意事项
  • openGL学习(基本窗口)
  • 深入学习MySQL的页分裂(Page Split)
  • 策略模式与工厂模式的黄金组合:从设计到实战
  • yaml 导致的原型污染 -- GPN CTF 2025 Secure by Default
  • 《高等数学》(同济大学·第7版)第九章 多元函数微分法及其应用第五节多元函数微分学的几何应用
  • Redis 单线程的“天花板”与集群的必要性
  • 三、java项目自动部署流水线搭建
  • oracle内存参数调整
  • 【C++】string的模拟实现
  • 关于css的height:100%
  • 助力高考,利用python获取本专科专业选考科目要求
  • 开疆智能CCLinkIE转ModbusTCP网关连接组态王配置案例
  • 开源 java android app 开发(十三)绘图定义控件、摇杆控件的制作
  • Ollama+Gemma3模型+Open WebUI,无公网IP如何内网穿透远程访问?
  • 【Linux 设备模型框架 kobject 和 kset】
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的目标轨迹预测与防范策略制定(325)
  • 【k近邻】 K-Nearest Neighbors算法原理及流程
  • 机器学习3——参数估计之极大似然估计
  • C++并发编程-4.unique_lock,共享锁和递归锁
  • 详解HashMap底层原理
  • 电脑远程控制另一台电脑无法连接怎么办
  • PostgreSQL 容器化分布式技术方案
  • 基于51单片机-蜂鸣器演奏《飞雪玉花》
  • 什么是故障注入测试
  • 强化联邦学习的车联网 DDoS 攻击检测
  • 【图像处理入门】12. 综合项目与进阶:超分辨率、医学分割与工业检测
  • FLUX.1 Kontext(Dev 版)训练lora基础教程
  • TiDB AUTO_RANDOM 超大主键前端精度丢失排查:JavaScript Number 限制与解决方案
  • 内测开启!看海量化回测系统V2.0版本更新,基于miniQMT的回测系统问世!