ML(4)-核函数与再生核希尔伯特空间

2023-12-30 03:18

本文主要是介绍ML(4)-核函数与再生核希尔伯特空间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

核函数与再生核希尔伯特空间

  • 1.支持向量积-核函数
  • 2.一个函数为核函数的条件
  • 3.核函数与希尔伯特空间
    • 3.1希尔伯特空间-Hilbert空间

1.支持向量积-核函数

核(kernel)的概念由Aizenman et al.于1964年引入模式识别领域,原文介绍的是势函数的方法。在那之后,核函数在模式识别领域沉积了很久。1992年Boser 等人的在解决支持向量机算法时,重新将的概念引入机器学习领域;从此引发了核函数研究应用的热潮。一个最简单的应用就是:利用核方法扩展经典算法,将算法中的内积替换成核函数。

在支持向量机中,核函数是 将 原线性不可分的特征空间中的特征向量 x x x,映射到 线性可分的高维特征空间的特征向量 ϕ ( x ) \phi(x) ϕ(x),然后,特征向量 ϕ ( x ) \phi(x) ϕ(x)之间求内积的一个表达式。(核函数就是一个表达式)
k ( x n , x m ) = ϕ ( x n ) T ϕ ( x m ) k(x_n,x_m)=\phi(x_n)^T\phi(x_m) k(xn,xm)=ϕ(xn)Tϕ(xm)

核函数的巧妙之处:高维空间中特征向量的内积表达式,可以直接用低维特征向量的各个维度的坐标表示。所以,只需将低维度特征 x , x ′ x,x' x,x带入核函数 k ( x , x ′ ) k(x,x') k(x,x)求函数值,就等价于 x − > ϕ ( x ) , x ′ − > ϕ ( x ′ ) = > 求内积 < ϕ ( x ) , ϕ ( x ′ ) > x->\phi(x) ,x'->\phi(x')=>求内积<\phi(x),\phi(x')> x>ϕ(x),x>ϕ(x)=>求内积<ϕ(x),ϕ(x)>的过程,当高维空间维很高时,内积求解十分缓慢,所以核函数是一个十分便利的工具。

基本概念: 核函数 k ( x , x ′ ) k(x,x') k(x,x),样本(特征向量) { x i n } \{x_i^n\} {xin},gram矩阵 K = { K i , j } K=\{ K_{i,j} \} K={Ki,j}, K i , j = k ( x i , x j ) K_{i,j}=k(x_i,x_j) Ki,j=k(xi,xj)
[ k ( x 1 , x 1 ) k ( x 1 , x 2 ) . . . k ( x 1 , x n ) k ( x 2 , x 1 ) k ( x 2 , x 2 ) . . . k ( x 2 , x n ) . . . . . . . . . . . . k ( x n , x 1 ) k ( x n , x 2 ) . . . k ( x n , x n ) ] \left[ \begin{matrix} k(x_1,x_1) & k(x_1,x_2) & ... & k(x_1,x_n)\\ k(x_2,x_1) & k(x_2,x_2) & ... & k(x_2,x_n)\\ ... & ...& ... & ... & \\ k(x_n,x_1) & k(x_n,x_2) & ... & k(x_n,x_n) \end{matrix} \right] k(x1,x1)k(x2,x1)...k(xn,x1)k(x1,x2)k(x2,x2)...k(xn,x2)............k(x1,xn)k(x2,xn)...k(xn,xn)

详细SVM与核函数参见(对偶问题的求解巴拉巴拉):https://cuijiahua.com/blog/2017/11/ml_9_svm_2.html



2.一个函数为核函数的条件

可以通过多种方式构造核函数,(1)原始的映射构造法、(2)核函数性质+简单核函数构造法[RBF核函数就可以从此构造出来]、(3)概率生成式模型开始构造。

高维特征向量的内积 实际是 低维特征向量 各个分量的函数=》高维内积 是一个函数。但是,并非每一个函数都对应着一个高维内积。只有当一个函数满足mercer定理时,它才能作为一个核函数。所以可以通过mercer定义判断一个函数是否可以作为一个核函数。


Mercer定理: 对称半正定的函数可以作为一个核函数。

(离散化)简单理解:“半正定”三个字常见于矩阵分析中。此处,可通过判定对称函数Gram 矩阵的半正定性,进而判断源函数的半正定性质。一个n × n的实对称矩阵A是正定的当且仅当对于所有的非零实系数向量z,都有 z T A z > 0 z^TAz > 0 zTAz>0

具体做法:将样本 { x i = 1 i = n } \{x_{i=1}^{i=n}\} {xi=1i=n}带入函数 k ( x , x ′ ) k(x,x') k(x,x),计算gram矩阵 K = { K i , j } K=\{ K_{i,j} \} K={Ki,j}, K i , j = k ( x i , x j ) K_{i,j}=k(x_i,x_j) Ki,j=k(xi,xj),判定gram矩阵的半正定性。

(连续化)定义:一个对称函数 k ( x , x ′ ) k(x,x') k(x,x)是半正定的,当且仅当对于任意的函数g下式成立:
∫ X g ( x ) k ( x , x ′ ) g ( x ′ ) d x d x ′ ≥ 0 \int_\mathcal{X}g(x)k(x,x')g(x')dxdx'\ge0 Xg(x)k(x,x)g(x)dxdx0


通过Gram矩阵特征值分解(谱分解),可以将 k ( x i , x j ) k(x_i,x_j) k(xi,xj)表示成gram矩阵特征值与特征向量分量组合的形式:
Q T K Q = d i a g ( λ 1 , λ 2 , . . . , λ n ) = Λ Q^TKQ=diag(\lambda_1,\lambda_2,...,\lambda_n)=\Lambda QTKQ=diag(λ1,λ2,...,λn)=Λ

K = Q Λ Q T K=Q\Lambda Q^T K=QΛQT

Q Q Q为特征向量矩阵, v i v_i vi为n维向量,其第二个下标表示该向量分量:
Q = [ v 1 , v 2 , . . . , v n ] Q=[v_1,v_2,...,v_n] Q=[v1,v2,...,vn]

K = Q Λ Q T = [ λ 1 v 1 , λ 2 v 2 , . . . , λ n v n ] [ v 1 , v 2 , . . . , v n ] T K=Q\Lambda Q^T=[\lambda_1v_1,\lambda_2v_2,...,\lambda_nv_n][v_1,v_2,...,v_n]^T K=QΛQT=[λ1v1,λ2v2,...,λnvn][v1,v2,...,vn]T
= [ λ 1 v 11 λ 2 v 21 . . . λ n v n 1 λ 1 v 12 λ 2 v 22 . . . λ n v n 2 . . . . . . . . . . . . λ 1 v 1 n λ 2 v 2 n . . . λ n v n n ] [ v 11 v 12 . . . v 1 n v 21 v 22 . . . v 2 n . . . . . . . . . . . . v n 1 v n 2 . . . v n n ] =\left[ \begin{matrix} \lambda_1v_{11}&\lambda_2v_{21}&...&\lambda_nv_{n1}\\ \lambda_1v_{12}&\lambda_2v_{22}&...&\lambda_nv_{n2}\\ ... & ...& ... & ... & \\ \lambda_1v_{1n}&\lambda_2v_{2n}&...&\lambda_nv_{nn} \end{matrix} \right] \left[ \begin{matrix} v_{11}&v_{12}&...&v_{1n}\\ v_{21}&v_{22}&...&v_{2n}\\ ... & ...& ... & ... & \\ v_{n1}&v_{n2}&...&v_{nn} \end{matrix} \right] = λ1v11λ1v12...λ1v1nλ2v21λ2v22...λ2v2n............λnvn1λnvn2...λnvnn v11v21...vn1v12v22...vn2............v1nv2n...vnn

k ( x i , x j ) = ∑ k = 1 n λ k v k i v k j k(x_i,x_j)=\sum_{k=1}^n\lambda_kv_{ki}v_{kj} k(xi,xj)=k=1nλkvkivkj

注意: v k i v_{ki} vki第一个下标表示:这是第 k k k个特征向量,第二个下标表示:这是第 k k k个特征向量的第 i i i个分量。
当特征 n → ∞ n\rightarrow \infty n时,离散-》连续。 v k i v_{ki} vki可以看做第k个特征函数的第i个函数值,即 ψ k ( x i ) \psi_k(x_i) ψk(xi)。此时,核函数可以写为:
k ( x , x ′ ) = ∑ j λ j ψ j ( x ) ψ j ( x ′ ) k(x,x')=\sum_{j}\lambda_j\psi _j(x)\psi _j(x') k(x,x)=jλjψj(x)ψj(x)


用到的工具:

Mercer定理的一点证明: https://blog.csdn.net/sinat_22510827/article/details/79116612
矩阵特征值分解:https://blog.csdn.net/weixin_42018112/article/details/80250206:
矩阵A的特征向量特征值: A x = λ x Ax=\lambda x Ax=λx,矩阵A作用于(每一矩阵都对应一个变换)特征向量 x x x,其效果等价与对向量 x x x做尺度变换。(所以 x x x真是一个很神奇的方向呢!!)

每一个矩阵A都相似于一个上三角矩阵:通初等变换可以将一个矩阵转换成一个上三角阵,将这些初等变换乘在一起,就构成了一个变换矩阵。

每次的初等变换选择 特征值变换,且,矩阵A是一个对称矩阵,那矩阵A可以进行特征值分解:
Q T A Q = d i a g ( λ 1 , λ 2 , . . . , λ n ) Q^TAQ=diag(\lambda_1,\lambda_2,...,\lambda_n) QTAQ=diag(λ1,λ2,...,λn)

Q Q Q的列向量组成 A A A的一个完备标准正交向量系。



3.核函数与希尔伯特空间

原来线性映射 ϕ ( x ) \phi(x) ϕ(x) ,它将原始特征空间中的数据点映射到另一个高维空间中。其实这个高维空间在这里有一个华丽的名字——“再生核希尔伯特空间 (Reproducing Kernel Hilbert Space, RKHS)”[1]

所以:每一个核函数都对应着自己的一个再生核希尔伯特空间。

下面先介绍希尔波特空间,再介绍再生核希尔伯特空间。

3.1希尔伯特空间-Hilbert空间

从 泛函 说 希尔伯特空间[2]
希尔伯特空间 是 希尔伯特 在解决 无穷维线性方程组 时提出的概念,原来的线性代数理论都是基于有限维欧几里得空间的,无法适用,这迫使希尔伯特去思考无穷维欧几里得空间,也就是无穷序列空间的性质。

l 2 l^2 l2空间:所有2范数 ∑ x n 2 \sum x_n^2 xn2(n为向量的下标)为有限的 无穷维向量 x x x 组成的空间。这是最早的Hilbert space。

L 2 L^2 L2空间:单位闭区间上所有平方可积的实函数(就是说 f(x)的平方在[0,1]上的积分存在且有限)按照函数的加法和数乘成为一个线性空间。
∫ f 2 ( x ) d x \int f^2(x)dx f2(x)dx

L 2 L^2 L2希尔伯特空间是一个函数空间,其中定义内积如下:
< f , g > = ∫ ∣ f ∗ g ∣ d x <f,g>= \int|f*g|dx <fg>=fgdx

范数:
‖ f ‖ = < f , f > = ∫ f 2 ( x ) d x ‖f‖=\sqrt{<f,f>}=\sqrt{\int f ^2(x)dx} f=<ff> =f2(x)dx

泛函:就是自变量为函数,因变量为实数的映射。一个简单的例子,某一个泛函的定义域在 L 2 L^2 L2Hilbert space上。


从 定义 说 希尔伯特空间
向量空间:空间中的点具有加法和数乘的操作
内积空间:向量空间上定义一个内积操作
赋范空间:根据内积可以定义一个范数
度量空间:范数可以用于定义一个度量
Hilbert Space:如果一个空间在其定义的度量下是完备的,那么这个空间叫做 Hilbert Space。[1]
完备性:一个空间上的任意柯西序列必收敛于空间中的某一点——相当于闭集的定义

对于常见的 R n \mathbb{R}^n Rn,满足内积运算,能够推导出 l 2 l_2 l2范数,且是完备的,所以是希尔伯特空间。欧几里德空间 是 希尔伯特空间的一个重要特例,一个抽象的希尔伯特空间中的元素往往被称为向量。在实际应用中,它可能代表了一列复数或是一个函数。


核函数的再生性
对于任意的 f ∈ H f\in \mathcal{H} fH,都有:
f ( x ) = < f ( . ) , k ( . , x ) > f(x)=<f(.),k(.,x)> f(x)=<f(.),k(.,x)>

k(.,.)被称为希尔伯特空间 H \mathcal{H} H的再生核。
由核的再生性还可以推到出:
k ( x , x ′ ) = < k ( x , . ) , k ( . , x ′ ) > k(x,x')=<k(x,.),k(.,x')> k(x,x)=<k(x,.),k(.,x)>


再生核希尔伯特空间: 由具有再生性的核 张成的希尔伯特空间
定义:对于一个紧致的 X ∈ R d \mathcal{X}\in \mathbb{R}^d XRd;和希尔伯特空间 H \mathcal{H} H,其中元素为 f : X → R f:\mathcal{X}\rightarrow \mathbb{R} f:XR,如果存在 k : X → R k:\mathcal{X}\rightarrow \mathbb{R} k:XR,满足如下条件,就叫 H \mathcal{H} H为再生核希尔伯特空间。
1. k k k有再生性: f ( x ) = < f ( . ) , k ( . , x ) > f(x)=<f(.),k(.,x)> f(x)=<f(.),k(.,x)>
2. k k k张成 H \mathcal{H} H H = s p a n { k ( . , x ) : x ∈ X } ‾ \mathcal{H}=\overline{span\{k(.,x):x\in \mathcal{X}\}} H=span{k(.,x):xX}

所以说具有再生性的核都可以张成自己的一个再生核希尔伯特空间。

参考资料:
[1]https://blog.csdn.net/hggjgff/article/details/83828394
[2]再生核希尔伯特空间:https://wenku.baidu.com/view/09df5b7a11a6f524ccbff121dd36a32d7375c7c6.html
[3]希尔伯特空间,数学空间的神秘之地 :http://www.sohu.com/a/315344647_348129介绍了一个大概,从定义出发去验证希尔伯特空间


这篇关于ML(4)-核函数与再生核希尔伯特空间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/551525

相关文章

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

Unity3D 运动之Move函数和translate

CharacterController.Move 移动 function Move (motion : Vector3) : CollisionFlags Description描述 A more complex move function taking absolute movement deltas. 一个更加复杂的运动函数,每次都绝对运动。 Attempts to

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^

JavaSE(十三)——函数式编程(Lambda表达式、方法引用、Stream流)

函数式编程 函数式编程 是 Java 8 引入的一个重要特性,它允许开发者以函数作为一等公民(first-class citizens)的方式编程,即函数可以作为参数传递给其他函数,也可以作为返回值。 这极大地提高了代码的可读性、可维护性和复用性。函数式编程的核心概念包括高阶函数、Lambda 表达式、函数式接口、流(Streams)和 Optional 类等。 函数式编程的核心是Lambda

PHP APC缓存函数使用教程

APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”。它为我们提供了缓存和优化PHP的中间代码的框架。 APC的缓存分两部分:系统缓存和用户数据缓存。(Linux APC扩展安装) 系统缓存 它是指APC把PHP文件源码的编译结果缓存起来,然后在每次调用时先对比时间标记。如果未过期,则使用缓存的中间代码运行。默认缓存 3600s(一小时)。但是这样仍会浪费大量C

PHP7扩展开发之函数方式使用lib库

前言 首先说下什么是lib库。lib库就是一个提供特定功能的一个文件。可以把它看成是PHP的一个文件,这个文件提供一些函数方法。只是这个lib库是用c或者c++写的。 使用lib库的场景。一些软件已经提供了lib库,我们就没必要再重复实现一次。如,原先的mysql扩展,就是使用mysql官方的lib库进行的封装。 在本文,我们将建立一个简单的lib库,并在扩展中进行封装调用。 代码 基础