机器学习笔记之核函数再回首——Nadaraya-Watson核回归手写示例
引言
本节从代码角度,介绍基于高维特征向量使用 Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归的示例。
回顾: Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归
在注意力机制基本介绍中,我们提到过这种基于注意力机制权重的懒惰学习方法。该方法与注意力机制关联的核心操作有如下步骤:
通过核函数描述样本之间的关联关系
我们想要主观获取某陌生样本 x ∈ R p x \in \mathbb R^p x∈Rp与数据集内各样本 x ( i ) ∈ D = { x ( i ) , y ( i ) } i = 1 N , x ( i ) ∈ R p x^{(i)} \in \mathcal D = \{x^{(i)},y^{(i)}\}_{i=1}^N,x^{(i)} \in \mathbb R^p x(i)∈D={
x(i),y(i)}i=1N,x(i)∈Rp之间的关联关系。而这种描述关联关系的操作,我们首先会想到内积:
x ⋅ x ( i ) = x T [ x ( i ) ] x \cdot x^{(i)} = x^T [x^{(i)}] x⋅x(i)=xT[x(i)]
如果涉及到一个非线性问题——或者说仅仅使用内积对关联关系的表达不够丰富,可以通过高维特征转换将非线性问题转化为高维线性问题:
{ x ⇒ ϕ ( x ) x ( i ) = ϕ ( x ( i ) ) ( i = 1 , 2 , ⋯ , N ) x T [ x ( i ) ] ⇒ [ ϕ ( x ) ] T ϕ ( x ( i ) ) \begin{cases} x \Rightarrow \phi(x) \\x^{(i)} = \phi(x^{(i)})(i=1,2,\cdots,N) \\ x^T[x^{(i)}] \Rightarrow [\phi(x)]^T \phi(x^{(i)}) \end{cases} ⎩
⎨
⎧x⇒ϕ(x)x(i)=ϕ(x(i))(i=1,2,⋯,N)xT[x(i)]⇒[ϕ(x)]Tϕ(x(i))
将低维特征转化为高维特征同样存在弊端。在核方法思想与核函数中介绍过:映射后的特征结果 ϕ ( x ) , \phi(x), ϕ(x),其特征维数远远超过原始特征维数 p p p,甚至是无限维。在这种情况下去计算 [ ϕ ( x ) ] T ϕ ( x ( i ) ) [\phi(x)]^T \phi(x^{(i)}) [ϕ(x)]Tϕ(x(i)),其计算代价是无法估量的。而核技巧提供了一种简化运算的方式。关于核函数 κ ( ⋅ ) \kappa(\cdot) κ(⋅)的定义表示如下:
κ [ x , x ( i ) ] = ⟨ ϕ ( x ) , ϕ ( x ( i ) ) ⟩ = [ ϕ ( x ) ] T ϕ ( x ( i ) ) \kappa \left[x,x^{(i)}\right] = \left\langle\phi(x),\phi(x^{(i)})\right\rangle= [\phi(x)]^T \phi(x^{(i)}) κ[x,x(i)]=⟨ϕ(x),ϕ(x(i))⟩=[ϕ(x)]Tϕ(x(i))
可以看出:核函数 κ ( ⋅ ) \kappa(\cdot) κ(⋅)的自变量是未经过高维转换的原始特征;而对应函数是高维转换后的内积结果。因而该函数的作用可以简化运算。最终我们可以通过核函数描述 x x x与数据集内所有样本 x ( i ) ( i = 1 , 2 , ⋯ , N ) x^{(i)}(i=1,2,\cdots,N) x(i)(i=1,2,⋯,N)之间的关联关系:
κ [ x , x ( i ) ] i = 1 , 2 , ⋯ , N \kappa \left[x,x^{(i)}\right] \quad i=1,2,\cdots,N κ[x,x(i)]i=1,2,⋯,N
使用 Softmax \text{Softmax} Softmax函数对权重进行划分
此时已经得到 x x x与所有样本 x ( i ) x^{(i)} x(i)的核函数结果,这 N N N个结果有大有小,数值大的意味着样本之间的关联程度高。从而可以将该关联关系描述成 x x x与样本 x ( i ) x^{(i)} x(i)对应标签结果 y ( i ) y^{(i)} y(i)的权重 G ( x , x ( i ) ) \mathcal G(x,x^{(i)}) G(x,x(i)):
G ( x , x ( i ) ) = κ ( x , x ( i ) ) ∑ j = 1 N κ ( x , x ( j ) ) \mathcal G(x,x^{(i)}) = \frac{\kappa(x,x^{(i)})}{\sum_{j=1}^{N}\kappa(x,x^{(j)})} G(x,x(i))=∑