核方法, Kernel
核(Kernel)
有时候,直接得到的自变量x用线性的方法直接预测不太好,比如y=x2,要提取出一些别的特征,我们还是希望使用线性的方法,可以把x映射到ϕ(x),在ϕ(x)上用前面的线性的方法。ϕ(x)称为特征。
但是注意,乱加特征很容易过拟合。
线性回归,就相应改成了
hθ=θTϕ(x)θ:=θ+α(y(i)−θTϕ(x(i)))ϕ(x(i))
但是如果特征太多,进行梯度下降就很慢了。
核技巧
用来加速梯度下降。
先证明θ可以被ϕ(x(i))线性表示。
考虑归纳,设一开始θ=0=∑i=1n0ϕ(x(i)),成立。
若迭代k次成立,设
θ=i=1∑nβiϕ(x(i))
进行第k+1次迭代时
θ′=θ+αi=1∑n(y(i)−θTϕ(x(i)))ϕ(x(i))=i=1∑n(βi+αy(i)−αθTϕ(x(i)))ϕ(x(i))βi′=βi+α(y(i)−θTϕ(x(i)))=βi+α(y(i)−j=1∑nβjϕ(x(j))ϕ(x(i))T)=βi+α(y(i)−j=1∑nβj⟨ϕ(x(j)),ϕ(x(i))⟩)
如果能预处理出来全部ϕ(x(i))的内积,也就是一个gram矩阵,对整个训练集梯度下降一次是O(n2),d是特征的维数。
但是朴素做法一次复杂度是O(nd),如果涉及到很高维的特征就会变快。还有一个用核技巧的重要原因是朴素做法不能处理映射到无穷维的情况。
我们称这个内积的函数为核函数
K(x,y)=⟨ϕ(x),ϕ(y)⟩Ki,j=⟨ϕ(x(i)),ϕ(x(j))⟩
核函数的性质
vTKv=i=1∑nj=1∑nvivj⟨ϕ(x(i)),ϕ(x(j))⟩=i=1∑nj=1∑n⟨viϕ(x(i)),vjϕ(x(j))⟩
考虑到内积的运算是双线性的(这里都是实数),有
=⟨i=1∑nviϕ(x(i)),i=1∑nviϕ(x(i))⟩≥0
K(x,z)=K1(x,z)+K2(x,z)
考虑vTKv=vT(K1+K2)v=vTK1v+vTK2v≥0即可。
值得注意的是,相减不一定能得到核函数(内积要求范数非负)
K(x,z)=K1(x,z)K2(x,z)
首先要拓展一下之前讨论半正定的数域
vTKv≥0,v∈Rn
则希望证明
vHKv≥0,v∈Cn
设
v=x+iy,x,y∈Rn
直接代入得
vHKv=(xT−iyT)K(x+iy)=xTKx+ixTKy−iyTKx+yTKy=xTKx+yTKy≥0
还是从矩阵的视角来看核函数
Ki,j=[K1]i,j[K2]i,j
知道K1实对称,一定可以正交相似对角化
K1=CTDC
D是特征值组成的对角矩阵。
在复数域中对对角阵D开方,得
K1=UHU
直接考虑半正定的定义式
vTKv=vHKv=i=1∑nj=1∑nvivj[K1]i,j[K2]i,j=i=1∑nj=1∑nvivj[K2]i,jk=1∑nuk,iuk,j=k=1∑ni=1∑nj=1∑n[K2]i,juk,iviuk,jvj=k=1∑ni=1∑nj=1∑n[K2]i,jwi(k)wj(k)=k=1∑n(w(k))TK2w(k)≥0
在数学上这种对矩阵的操作被称为哈达玛积,记为
K=K1⊙K2