核方法(kernel method)(一)-Basic idea
在阅读迁移学习论文的时候,感觉自己kernel method方面不是很清楚,所以观看了李振轩老师的《kernel method》视频课程B站链接。用python实现了课程中提到的各种算法。代码的github仓库 。个人水平有限,难免贻笑于大方之家。望大家多批评指正。
1 基本想法
利用某个函数 ϕ \phi ϕ,将不可线性分割的feature向量映射到可以线性分割的高维空间中。
例如下面的例子,本来需要椭圆曲线分开的二维平面的点,经过 ϕ \phi ϕ映射到三维中,就可以用一个平面分割了。
ϕ : R 2 → R 3 ( x 1 , x 2 ) → ( z 1 , z 2 , z 3 ) = ( x 1 2 , 2 x 1 x 2 , x 2 2 ) \phi : R^2 \rightarrow R^3 \\ (x_1,x_2) \rightarrow (z_1,z_2,z_3) = (x_1^2,\sqrt{2}x_1x_2,x_2^2) ϕ:R2→R3(x1,x2)→(z1,z2,z3)=(x12,2x1x2,x22)
对于这一个 ϕ \phi ϕ,可以证明映射后的内积等于映射前的内积的平方。
< ϕ ( x ) , ϕ ( x ′ ) > = ( < x , x ′ > ) 2 <\phi(x),\phi(x')> = (<x,x'>)^2 <ϕ(x),ϕ(x′)>=(<x,x′>)2
我们将映射后的两个特征的内积叫做核函数K
K ( x , x ′ ) = < ϕ ( x ) , ϕ ( x ′ ) > K(x,x') = <\phi(x),\phi(x')> K(x,x′)=<ϕ(x),ϕ(x′)>
为什么需要这一个核函数K, 因为有了这一个核函数K,我们并不需要真正的求出一个映射 ϕ \phi ϕ,然后将数据映射。只需要计算数据之间的内积就行。这是由于,空间的几何性质,例如距离和角度,都能用内积来获得。
使用内积来表示距离
∥ ϕ ( x ) − ϕ ( x ′ ) ∥ 2 = ( ϕ ( x ) − ϕ ( x ′ ) ) 2 ( ϕ ( x ) − ϕ ( x ′ ) ) = ϕ ( x ) 2 ϕ ( x ) − 2 ϕ ( x ) 2 ϕ ( x ′ ) + ϕ ( x ′ ) 2 ϕ ( x ′ ) = < ϕ ( x ) , ϕ ( x ) > − 2 < ϕ ( x ) , ϕ ( x ′ ) > + < ϕ ( x ′ ) , ϕ ( x ′ ) > = κ ( x , x ) − 2 κ ( x , x ′ ) + κ ( x ′ , x ′ ) \begin{array}{l} \left\|\phi(x)-\phi\left(x^{\prime}\right)\right\|^{2}=\left(\phi(x)-\phi\left(x^{\prime}\right)\right)^{2}\left(\phi(x)-\phi\left(x^{\prime}\right)\right) \\ =\phi(x)^{2} \phi(x)-2 \phi(x)^{2} \phi\left(x^{\prime}\right)+\phi\left(x^{\prime}\right)^{2} \phi\left(x^{\prime}\right) \\ =<\phi(x), \phi(x)>-2<\phi(x), \phi\left(x^{\prime}\right)>+<\phi\left(x^{\prime}\right), \phi\left(x^{\prime}\right)> \\ =\kappa(x, x)-2 \kappa\left(x, x^{\prime}\right)+\kappa\left(x^{\prime}, x^{\prime}\right) \end{array} ∥ϕ(x)−ϕ(x′)∥2=(ϕ(x)−ϕ(x′))2(ϕ(x)−ϕ(x′))=ϕ(x)2ϕ(x)−2ϕ(x)2ϕ(x′)+ϕ(x′)2ϕ(x′)=<ϕ(x),ϕ(x)>−2<ϕ(x),ϕ(x′)>+<ϕ(x′),ϕ(x′)>=κ(x,x)−2κ(x,x′)+κ(x′,x′)
使用内积来表示角度
< ϕ ( x ) , ϕ ( x ′ ) > = ∣ ∣ ϕ ( x ) ∣ ⋅ ∥ ϕ ( x ′ ) ∣ cos θ ⇒ cos θ = < ϕ ( x ) , ϕ ( x ′ ) > ∥ ϕ ( x ) ∥ ⋅ ∥ ϕ ( x ′ ) ∥ = < ϕ ( x ) , ϕ ( x ′ ) > < ϕ