Kernal Method
文章目录
1. 问题引入
我们这个部分要研究的是信号分类问题。
有这样的一组数据
( x 1 , y 1 ) , . . . , ( x n , y n ) x k ∈ R n , y k ∈ { − 1 , 1 } (x_1,y_1),...,(x_n,y_n) \\ x_k \in R^n, y_k \in \{-1,1 \} \\ (x1,y1),...,(xn,yn)xk∈Rn,yk∈{−1,1}
x是实数,而y只有1和-1两种情况。实际上这些数据可以看做是训练集。我们希望通过这些数据,找到x和y的依赖关系。从而判断,x是什么情况的时候y=1。以及x是什么情况的时候y=-1
( x , y ) , y = f ( x ) m i n ∑ k = 1 n ( y k − f ( x k ) ) 2 ⇒ m i n ∑ k = 1 n ( y k − ω T x k ) 2 (x,y), y= f(x) \\ min \sum_{k=1}^n(y_k - f(x_k))^2 \Rightarrow min \sum_{k=1}^n(y_k - \omega^Tx_k)^2 (x,y),y=f(x)mink=1∑n(yk−f(xk))2⇒mink=1∑n(yk−ωTxk)2
然后,当来了一个新的x的时候,我们要预测他对应的y是什么。这与前面的预测问题是一样的。也就是,我们希望找到x和y之间的最小关系,使得我们的估计误差最小。
如果我们限定这个问题是线性的关系,那么这就是个最小二乘问题。
但是,如果我们使用最小二乘的方法来拟合模型,是非常不合适的。因为y只有两个值。因此,下面我们介绍一些求解的思路
2. 分类问题求解思路
我们假设问题是这样的,有一些红色的点,和一些黄色的点,红色的点对应y=-1,而白色的点对应于y=1,然后我们需要判断新来的一个数据点是属于哪一类。
2.1 朴素求解方法
我们最简单的思路是在两类数据中间画一条线,然后把信号分开,我们怎么画这条线呢?
我们有个非常朴素的方法,就是在红色的点中找一个非常有代表性的点,叫做X+,而黄色的点中找到一个非常有代表性的点叫做X-。我们把这个两个点进行连接,会得到一个矢量,我们找到这个连线的中点Xm。假设新的数据点是x,那我们只要计算向量XmX与X+X-的内积,如果内积的符号是+1,那么说明新来的x对应的y是1,如果内积的符号是-1,对应的y就是-1。
X + , X − ⇒ X + − X − ⇒ 1 2 ( X + − X − ) = X m ⇒ X − X m X_+,X_- \Rightarrow X_+ -X_- \Rightarrow \frac{1}{2}(X_+ -X_-) = X_m \Rightarrow X- X_m X+,X−⇒X+−X−⇒21(X+−X−)=Xm⇒X−Xm
s g n < X − X m , X + − X − > = { 1 y=1 − 1 y=-1 sgn<X-X_m,X_+-X_-> = \begin{cases} 1 &\text{y=1 } \\ -1 &\text{y=-1 } \end{cases} sgn<X−Xm,X+−X−>={1−1y=1 y=-1
我们要选择的这群数据的平均位置作为代表性的点
X + = 1 m + ∑ y k = 1 X k X − = 1 m − ∑ y k = − 1 X k X_+ = \frac{1}{m_+}\sum_{y_k=1}X_k \\ X_- = \frac{1}{m_-}\sum_{y_k=-1}X_k X+=m+1yk=1∑XkX−=m−1yk=−1∑Xk
我们计算一下这个内积
< X − X m , X + − X − > = < X − 1 2 ( X + + X − ) , X + − X − > = < X , X + − X − > − 1 2 < X + − X − , X + − X − > = ∑ k = 1 n α k < X , X k > − 1 2 ( ∣ ∣ X + ∣ ∣ 2 − ∣ ∣ X − ∣ ∣ 2 ) <X - X_m,X_+ - X_-> = <X - \frac{1}{2}(X_+ + X_-),X_+ - X_-> \\ =<X,X_+ - X_->- \frac{1}{2} <X_+ - X_-,X_+ - X_-> \\ = \sum_{k=1}^n \alpha_k<X,X_k> - \frac{1}{2}(||X_+||^2 - ||X_-||^2) <X−Xm,X+−X−>=<X−21(X++X−),X+−X−>=<X,X+−X−>−21<X+−X−,X+−X−>=k=1∑nαk<X,Xk>−21(∣∣X+∣∣2−∣∣X−∣∣2)
α k = { 1 m + y=1 − 1 m − y=-1 \alpha_k = \begin{cases} \frac{1}{m_+}&\text{y=1 } \\ -\frac{1}{m_-} &\text{y=-1 } \end{cases} αk={m+1−m−1y=1 y=-1
后面就是一个常数,我们更应该关注前面的部分
< X − X m , X + − X − > = ∑ k = 1 n α k X k T X + b <X - X_m,X_+ - X_-> = \sum_{k=1}^n \alpha_k X_k^TX +b <X−Xm,X+−X−>=k=1∑nαkXkTX+b
我们发现得到的东西是一个超平面,如果把x看做自变量的话。如果这个值是0,就在平面上,大于0在平面的一侧,小于0,在平面的另外一侧。
对于高维空间,要画的不是线,而是要做超平面。但是必须要有一个前提,就是这个分类问题是个线性可分的问题。
2.2 支持向量机 SVM
2.2.1 朴素法存在的问题
其实我们对这个问题并不满意,关键在于,我们代表点选取的方法有问题,因为代表点是在数据堆里面的,而不是在边缘上。实际上,做数据分类,更加需要关注的是边缘点,我们应该做一个平面,让两堆点靠平面最近的点,到平面的距离最远。
因为在数据分类的时候,我们需要保留一定的裕度,也就是偏离数据集比较远的点也能正常分类。
比如上面两个分割平面,第二个图明显分类是错误的。因此平面划分的错误,会产生过拟合的问题。我们希望我们的分割平面margin足够大,overfit足够小。
下面我们来做这个平面。我们需要针对点到平面的距离进行优化。
2.2.2 计算点到平面的距离
我们首先解决点到平面的距离怎么计算的问题。超平面定义如下
ω T x + b = 0 ⇔ ∑ k = 1 n ω k x k + b = 0 \omega^T x + b = 0 \Leftrightarrow \sum_{k=1}^n \omega_k x_k +b = 0 ωTx+b=0⇔k=1∑nωkxk+b=0
其中ω是平面的法向量
我们假设要计算x0到平面的距离,就要在平面上找一个投影点x1,x0与x1之间的距离就是点到平面的距离。
x
0
,
x
1
⇒
x
1
=
P
r
o
j
ω
T
x
+
b
=
0
x
0
x_0,x_1 \Rightarrow x_1 = Proj_{\omega^Tx+b=0}x_0 \\
x0,x1⇒x1=ProjωTx+b=0x0
把这个矢量表示出来,并求这个矢量的长度
x
0
x
1
=
x
0
−
x
1
x_0x_1 = x_0 - x_1
x0x1=x0−x1
构造一下
∣ ω T ( x 0 − x 1 ) ∣ = ∣ ω T x 0 − ω T x 1 ∣ = ∣ b + ω T x 1 ∣ |\omega^T(x_0 - x_1)| = |\omega^T x_0 - \omega^T x_1| = |b+\omega^T x_1| ∣ωT(x0−x1)∣=∣ωTx0−ωTx1∣=∣b+ωTx1∣
另外,法向量一定是与x0x1这个向量平行的,因此他们的乘积可以表示为
∣ ω T ( x 0 − x 1 ) ∣ = ∣ ∣ ω ∣ ∣ ∗ ∣ ∣ x 0 − x 1 ∣ ∣ |\omega^T(x_0 - x_1)| = ||\omega|| * ||x_0 - x_1|| ∣ωT(x0−x1)∣=∣∣ω∣∣∗∣∣x0−x1∣∣
两个式子相等
∣ ∣ ω ∣ ∣ ∗ ∣ ∣ x 0 − x 1 ∣ ∣ = ∣ b + ω T x 1 ∣ ∣ ∣ x 0 − x 1 ∣ ∣ = ∣ b + ω T x 1 ∣ ∣ ∣ ω ∣ ∣ ||\omega|| * ||x_0 - x_1|| = |b+\omega^T x_1| \\ ||x_0 - x_1|| = \frac{|b+\omega^T x_1|}{||\omega|| } ∣∣ω∣∣∗∣∣x0−x1∣∣=∣b+ωTx1∣∣∣x0−x1∣∣=∣∣ω∣∣∣b+ωTx1∣
2.2.3 超平面优化
现在知道了如何求点到平面的距离之后,我们就可以进行平面优化了
优化目标
m
a
x
∣
ω
T
x
0
+
b
∣
∣
∣
ω
∣
∣
max \frac{|\omega^Tx_0+b|}{||\omega||}
max∣∣ω∣∣∣ωTx0+b∣
分子部分其实很麻烦,我们想做优化,希望上面能够进行放缩,我们假设我们的数据点有这样的特征
{ ω T x k + b ≤ − 1 y k = − 1 ω T x k + b ≥ 1 y k = 1 \begin{cases} \omega^Tx_k+b \leq -1 & y_k = -1 \\ \omega^Tx_k+b \geq 1 & y_k=1 \end{cases} {ωTxk+b≤−1ωTxk+b≥1yk=−1yk=1
这样的话,其实这个数据的边缘点到超平面的距离就是1和-1
这样的话,分子就是1,优化条件变成了
m a x 1 ∣ ∣ ω ∣ ∣ max \frac{1}{||\omega||} max∣∣ω∣∣1
有这样的约束条件成立
y k ∗ ( ω T x k + b ) ≥ 1 1 − y k ∗ ( ω T x k + b ) ≤ 0 y_k*(\omega^Tx_k+b) \geq 1 \\ 1- y_k*(\omega^Tx_k+b) \leq 0 yk∗(ωTxk+b)≥11−yk∗(ωTxk+b)≤0
解释一下,后面小于1的时候,y是-1,后面大于1的时候,y是+1,所以这个条件恒大于1,是个约束条件。
我们可以把优化目标进行变形
m a x 1 ∣ ∣ ω ∣ ∣ ⇔ m i n ∣ ∣ ω ∣ ∣ ⇔ 1 2 ∣ ∣ ω ∣ ∣ 2 max \frac{1}{||\omega||} \Leftrightarrow min ||\omega|| \Leftrightarrow \frac{1}{2} ||\omega||^2 max∣∣ω∣∣1⇔min∣∣ω∣∣⇔21∣∣ω∣∣2
约束条件
1
−
y
k
∗
(
ω
T
x
k
+
b
)
≤
0
1- y_k*(\omega^Tx_k+b) \leq 0
1−yk∗(ωTxk+b)≤0
条件极值问题就用拉格朗日数乘法
L ( ω , α , b ) = 1 2 ω T ω + ∑ k = 1 n α k ( 1 − y k ∗ ( ω T x k + b ) ) L(\omega,\alpha,b) = \frac{1}{2} \omega^T\omega + \sum_{k=1}^n \alpha_k(1- y_k*(\omega^Tx_k+b)) L(ω,α,b)=21ωTω+k=1∑nαk(1−yk∗(ωTxk+b))
这个条件极值就是有名的支持向量机
Support Vector Machine(SVM) \text{Support Vector Machine(SVM)} Support Vector Machine(SVM)
求梯度,这个目标函数是α,ω和b的函数,就相当于有三个约束条件
∇
ω
L
(
ω
,
α
,
b
)
=
ω
−
∑
k
=
1
n
α
k
y
k
x
k
=
0
ω
=
∑
k
=
1
n
α
k
y
k
x
k
(
i
)
\nabla_\omega L(\omega,\alpha,b) = \omega - \sum_{k=1}^n \alpha_k y_k x_k = 0 \\ \omega = \sum_{k=1}^n \alpha_k y_k x_k \quad\quad(i)
∇ωL(ω,α,b)=ω−k=1∑nαkykxk=0ω=k=1∑nαkykxk(i)
∇
α
L
(
ω
,
α
,
b
)
=
1
−
y
k
∗
(
ω
T
x
k
+
b
)
=
0
(
i
i
)
\nabla_\alpha L(\omega,\alpha,b) = 1- y_k*(\omega^Tx_k+b) = 0 \quad\quad(ii)\\
∇αL(ω,α,b)=1−yk∗(ωTxk+b)=0(ii)
∇
b
L
(
ω
,
α
,
b
)
=
∑
k
=
1
n
α
k
y
k
=
0
(
i
i
i
)
\nabla_b L(\omega,\alpha,b) = \sum_{k=1}^n\alpha_k y_k = 0 \quad\quad(iii)\\
∇bL(ω,α,b)=k=1∑nαkyk=0(iii)
求极值
1 2 ω T ω = 1 2 ( ∑ i = 1 n α i y i x i ) T ( ∑ j = 1 n α j y j x j ) = 1 2 ∑ i ∑ j α i α j y i y j x i T x j ( i v ) \frac{1}{2}\omega^T\omega = \frac{1}{2}(\sum_{i=1}^n \alpha_i y_i x_i)^T(\sum_{j=1}^n \alpha_j y_j x_j) \\ = \frac{1}{2} \sum_i \sum_j \alpha_i \alpha_j y_i y_j x_i^T x_j \quad\quad(iv) 21ωTω=21(i=1∑nαiyixi)T(j=1∑nαjyjxj)=21i∑j∑αiαjyiyjxiTxj(iv)
假设使用量各种解法求出了最优解
ω o p t = ∑ k = 1 n α { o p t , k } y k x k \omega_{opt} = \sum_{k=1}^n \alpha_{\{opt,k\}} y_k x_k ωopt=k=1∑nα{opt,k}ykxk
s g n ( ω o p t T x + b ) = s g n ( ∑ k = 1 n α { o p t , k } y k x k T x + b ) sgn(\omega_{opt}^Tx +b) = sgn( \sum_{k=1}^n \alpha_{\{opt,k\}} y_k x_k^Tx+b) sgn(ωoptTx+b)=sgn(k=1∑nα{opt,k}ykxkTx+b)
3. Kernal
3.1 非线性分类问题
在刚才我们提到的两种分类方法中,我们都有一个使用前提,就是数据必须是线性可分的。那就意味了,我们一定可以找到一条直线,或者找到一个超平面将数据分割开。但是现实中问题往往没有这么简单,我们可以看一个例子。
假设我们有如图所示的数据,我们希望对黄色数据和红色数据进行分类,我们是无法通过画线或者画超平面的方法将他们分开的。我们只能通过球或者圆的方式进行数据分类。这里面都有非线性的因素。
我们假定数据是二维的,我们可以建立这样的方程
(
x
1
,
x
2
)
∈
R
2
→
x
1
2
+
x
2
2
≤
r
(x_1,x_2) \in R^2 \rightarrow x_1^2 + x_2^2 \leq r
(x1,x2)∈R2→x12+x22≤r`
圆内的就是黄色数据,圆外的就是红色数据。这是个非线性分类问题。我们有没有什么方法,能够把这个问题看做是线性的呢?事实上,我们可以把x1和x2看做是一个整体,而不是平方。
(
x
1
,
x
2
)
∈
R
2
⇒
(
y
1
,
y
2
)
∈
R
2
y
1
=
x
1
2
,
y
2
=
x
2
2
y
1
+
y
2
≤
r
(x_1,x_2) \in R^2 \Rightarrow (y_1,y_2) \in R^2 \\ y_1 = x_1^2,\quad y_2 = x_2^2 \\ y_1 +y_2 \leq r
(x1,x2)∈R2⇒(y1,y2)∈R2y1=x12,y2=x22y1+y2≤r
经过这样的变换之后,我们又变成了研究线性问题。
我们把问题变得稍微复杂一些,我们假设我们是以椭圆方程来进行数据分类的
( x − 2 2 y ) 2 + y 2 2 ≤ r x 2 − 2 x y + y 2 ≤ r (x-\frac{\sqrt2}{2}y)^2 + \frac{y^2}{2} \leq r \\ x^2 - \sqrt2xy + y^2 \leq r (x−22y)2+2y2≤rx2−2xy+y2≤r
我们如何把这个问题看做是个线性问题呢?
我们依旧可以把非线性元素看做是一个整体
x 2 − 2 x y + y 2 ≤ r ( x 1 , x 2 ) ⇒ ( y 1 , y 2 , y 3 ) = ( x 1 2 , 2 x 1 x 2 , x 2 2 ) ∈ R 3 x^2 - \sqrt2xy + y^2 \leq r \\ (x_1,x_2) \Rightarrow (y_1,y_2,y_3) = (x_1^2,\sqrt2 x_1x_2,x_2^2) \in R^3 x2−2xy+y2≤r(x1,x2)⇒(y1,y2,y3)=(x12,2x1x2,x22)∈R3
这其实是一套完整的方法论。也就是我们本来有一个数据空间,然后,我们试图在现有的数据空间的基础上做一个提升,让数据进入一个新的空间,这个新的空间叫做特征空间,新空间能够吸收旧空间的特性,然后新空间是一个维度更高的空间,在这个空间里面,就没有非线性的因素存在了。
M e t h o d o l o g y : Data Space ⇒ Feature Space Methodology: \text{Data Space} \Rightarrow \text{Feature Space} Methodology:Data Space⇒Feature Space
所以,现在的问题其实发生了一些改变。我们本来要解决的,是一个分类问题,而现在,我们把分类问题推到了特征提取上。就像神经网络一样。我们知道,神经网络是一个全连接,能够构造任何一种分类器,但是知道深度学习之前,神经网络并没有得到广泛的关注。这其中的主要原因,就是神经网络虽然能够构造分类器,但是他需要输入的是特征。也就是把分类问题踢给了特征提取问题。而不论是模式识别还是机器学习,对特征的提取并不好用。而深度学习的高明之处在于,前面增加了若干个比如卷积层之类的东西,使得能够让计算机自己学习如何从数据中寻找特征,然后分类。机器学习中的特征提取方法,本质上是给人看的,而不是给机器看的。比如提取角点,那是人感觉角点有什么特性,然后定义特征,进行计算,但是机器不一定认为这个特征很好。要让机器觉得好,最好的方法就是让他从数据中自己进行寻找,但是找出来的特征人大概率是看不懂的。因此深度神经网络人看不懂是什么意思,但是效果就是好用。因此,提取特征是非常关键的问题。
3.2 核化 kernalization
我们的问题其实仍然没有得到解决,这个时候,我们回到我们的问题上。我们发现,不管是在朴素分类方法,还是SVM分类方法中,都使用到了内积运算。我们从数据空间提升到特征空间的时候,有一点是不变的,就是只要是线性分类,即使是在新空间中,也要做内积。
x 1 , x 2 , . . . , x n L i f t i n g → ϕ ( x 1 ) , ϕ ( x 2 ) , . . . , ϕ ( x n ) s g n ( ∑ k = 1 n α k x k T x + b ) ⇒ s g n ( ∑ k = 1 n α k ϕ T ( x k ) ϕ ( x ) + b ) x_1,x_2,...,x_n \quad \underrightarrow{Lifting} \quad \phi(x_1),\phi(x_2),...,\phi(x_n) \\ sgn(\sum_{k=1}^n \alpha_k x_k^T x +b) \Rightarrow sgn(\sum_{k=1}^n \alpha_k \phi ^T(x_k) \phi(x) +b) x1,x2,...,xnLiftingϕ(x1),ϕ(x2),...,ϕ(xn)sgn(k=1∑nαkxkTx+b)⇒sgn(k=1∑nαkϕT(xk)ϕ(x)+b)
因此,其实我们并不需要关心新的空间长什么样子,我们只需要关心内积就行。这个内积就是我们的kernal。我们做如下定义
k ( x , y ) = < ϕ ( x ) , ϕ ( y ) > k(x,y) = <\phi(x),\phi(y)> k(x,y)=<ϕ(x),ϕ(y)>
k(x,y)被称为核函数。
现在,我们想通过椭圆的例子,看看我们的特征空间是怎么构造起来的,他又与内积之间是怎么联系起来的。假设我们有两个点(x1,x2)和(y1,y2)我们来看这两个点在数据空间和特征空间的内积是怎么样的
x 2 − 2 x y + y 2 ≤ r x^2 - \sqrt2xy + y^2 \leq r x2−2xy+y2≤r
ϕ ( x 1 , x 2 ) = ( x 1 2 , 2 x 1 x 2 , x 2 2 ) < ϕ ( x 1 , x 2 ) , ϕ ( y 1 , y 2 ) > = ϕ T ( x 1 , x 2 ) ∗ ϕ ( y 1 , y 2 ) = x 1 2 y 1 2 + 2 x 1 x 2 y 1 y 2 + x 2 2 y 2 2 = ( x 1 y 1 + x 2 y 2 ) 2 = < ( x 1 , x 2 ) , ( y 1 , y 2 ) > 2 \phi(x_1,x_2) = (x_1^2,\sqrt{2}x_1 x_2,x_2^2) \\ <\phi(x_1,x_2) ,\phi(y_1,y_2)>=\phi^T(x_1,x_2) *\phi(y_1,y_2) = x_1^2y_1^2 +2 x_1x_2 y_1 y_2 + x_2^2 y_2^2 \\ =(x_1y_1 + x_2 y_2)^2 = <(x_1,x_2),(y_1,y_2)>^2 ϕ(x1,x2)=(x12,2x1x2,x22)<ϕ(x1,x2),ϕ(y1,y2)>=ϕT(x1,x2)∗ϕ(y1,y2)=x12y12+2x1x2y1y2+x22y22=(x1y1+x2y2)2=<(x1,x2),(y1,y2)>2
因此,我们需要定义的核就是
k ( ( x 1 , x 2 ) , ( y 1 , y 2 ) ) = < ( x 1 , x 2 ) , ( y 1 , y 2 ) > 2 k((x_1,x_2),(y_1,y_2)) = <(x_1,x_2),(y_1,y_2)>^2 k((x1,x2),(y1,y2))=<(x1,x2),(y1,y2)>2
k ( x , y ) = < ϕ ( x ) , ϕ ( y ) > k(x,y) = <\phi(x),\phi(y)> k(x,y)=<ϕ(x),ϕ(y)>
有了这个核函数之后,其实我们就可以不去管,我们到底要建立一个怎么样的特征空间来描述数据了。事实上,这个例子只是个特例,我们能够建立新的特征空间去把他线性化。很多时候,我们并不能够找到这样的高维空间。但是只要我们选择了合适的核,我们就可以不关心特征空间建立这件事情了。
这套方法出现在1970年左右。但是当时没有火爆,因为人们没有理解kernal tricks。就是我们对新空间可以完全不了解。
现在,我们只需要计算低维空间的情况就可以了,然后把内积换到高维空间即可
3.3 核化需要关注的两个问题
3.3.1 如何选择kernal
本来从数据空间提升到特征空间是件很复杂的事情,现在我们使用一个kernal就可以什么都不用关心了。那么我们究竟应该怎么样选择kernal呢?事实上,kernal的选择,对我们的工作具有重要影响
这里介绍一些比较常用的核,第一个核是多项式核,第二个核叫做镜像机。
Polynomial Kernal : k ( x , y ) = < x , y > b Radial Basis Kernal ( G a u s s i a n ) : k ( x , y ) = e x p ( − ∣ ∣ x − y ∣ 2 ∣ 2 σ 2 ) \text{Polynomial Kernal}: k(x,y) = <x,y>^b \\ \text{Radial Basis Kernal}(Gaussian): k(x,y) = exp(-\frac{||x-y|^2|}{2\sigma^2}) Polynomial Kernal:k(x,y)=<x,y>bRadial Basis Kernal(Gaussian):k(x,y)=exp(−2σ2∣∣x−y∣2∣)
这两种用的最多,尤其是第二个,可以通过调整σ来进行优化调整。我们并不知道提升空间与kernal的直接联系,我们寄希望于我们的kernal可以把我们所想象的空间涵盖进来即可。
3.3.2 kernalization的条件
处理kernal的选择问题以外,我们还要关注一个问题,如果要把一个问题进行kernalization,其条件是什么?
我们如果想对一个模型进行核化,我们要求,在这个模型中,所有对数据的依赖,都是通过内积产生的,并且这个内积,必须产生与数据空间,而不能是数据得到转置以后的空间。意思就是,如果数据是列向量,内积必须是这个列向量进行内积。而不能是这个数据矩阵转置了,然后数据变成了行向量,我们继续计算列向量的内积,这样就不是在数据空间内进行内积了。
3.4 kernalization的例子
我们回顾一下我们以前学过的一些方法,思考一下那些可以进行核化。
3.4.1 线性回归
首先是线性回归(Linear Regression),就是最小二乘(Least Square)
我们假设有这样的模型
y ∈ R n , ω = R N Z = ( z 1 T . . . z n T ) , Z ∈ R n ∗ N Data Dimension:N Data Size:n y \in R^n , \omega = R^N\\ Z = \begin{pmatrix} z_1^T \\ ... \\ z_n^T \end{pmatrix}, Z\in R^{n*N} \\ \text{Data Dimension:N} \\ \text{Data Size:n} y∈Rn,ω=RNZ=⎝⎛z1T...znT⎠⎞,Z∈Rn∗NData Dimension:NData Size:n
目标方程与拟合结果为
m i n ( y − Z ω ) T ( y − Z ω ) ⇒ ω = ( Z T Z ) − 1 Z T y min(y-Z\omega)^T(y-Z\omega) \\ \Rightarrow \omega = (Z^TZ)^{-1}Z^{T}y min(y−Zω)T(y−Zω)⇒ω=(ZTZ)−1ZTy
这里需要注意一下,最小二乘的数据,其实都是行向量。回忆一下,如果我们要进行参数估计,我们会这样做
f ( x ) = ∑ k = 1 N ω k x k f(x) = \sum_{k=1}^N\omega_k x_k f(x)=k=1∑Nωkxk
写成矩阵的形式就是
( f ( x 1 ) . . . f ( x n ) ) = ( x 1 1 . . . x N 1 . . . . . . . . . x 1 n . . . x N n ) ∗ ( ω 1 . . . ω n ) = ( z 1 T . . . z n T ) ∗ ( ω 1 . . . ω n ) = Z ∗ ω \begin{pmatrix} f(x_1) \\ ... \\ f(x_n) \end{pmatrix} = \begin{pmatrix} x_1^1 & ... & x_N^1 \\ ... &...&...\\ x_1^n&...&x_N^n \end{pmatrix}* \begin{pmatrix} \omega_1 \\ ... \\ \omega_n \end{pmatrix} \\ = \begin{pmatrix} z_1^T \\ ... \\ z_n^T \end{pmatrix}*\begin{pmatrix} \omega_1 \\ ... \\ \omega_n \end{pmatrix}=Z*\omega ⎝⎛f(x1)...f(xn)⎠⎞=⎝⎛x11...x1n.........xN1...xNn⎠⎞∗⎝⎛ω1...ωn⎠⎞=⎝⎛z1T...znT⎠⎞∗⎝⎛ω1...ωn⎠⎞=Z∗ω
最小二乘的模型能够实现核化吗?我们来仔细看一下这个内积
Z T ∗ Z = ( z 1 , . . . , z n ) ∗ ( z 1 T . . . z n T ) = z 1 ∗ z 1 T + . . . + z n ∗ z n T Z^T*Z = (z_1,...,z_n)*\begin{pmatrix} z_1^T \\ ... \\ z_n^T \end{pmatrix} \\ = z_1*z_1^T +...+z_n*z_n^T ZT∗Z=(z1,...,zn)∗⎝⎛z1T...znT⎠⎞=z1∗z1T+...+zn∗znT
我们发现,得到的这个内积,并不是依赖于数据的内积的。只有写成下面的形式,才是依赖于数据的内积的,才能进行核化。
z i T z j = < z i , z j > z_i^Tz_j = < z_i, z_j> ziTzj=<zi,zj>
3.4.2 岭回归
我们再看看岭回归(Ridge Regression)
m i n ( y − Z ω ) T ( y − Z ω ) + λ ω T ω ⇒ ω = ( Z T Z + λ I ) − 1 Z T y min(y- Z \omega)^T(y-Z\omega) + \lambda \omega^T \omega \\ \Rightarrow \omega = (Z^TZ +\lambda I)^{-1}Z^Ty min(y−Zω)T(y−Zω)+λωTω⇒ω=(ZTZ+λI)−1ZTy
那么,岭回归能够核化吗?
事实上,岭回归得到的结果,可以做如下的变换
ω
=
(
Z
T
Z
+
λ
I
)
−
1
Z
T
y
=
Z
T
(
Z
Z
T
+
λ
I
)
−
1
\omega = (Z^TZ +\lambda I)^{-1}Z^Ty = Z^T(ZZ^T+\lambda I)^{-1}
ω=(ZTZ+λI)−1ZTy=ZT(ZZT+λI)−1
y
^
=
Z
ω
=
Z
Z
T
(
Z
Z
T
+
λ
I
)
−
1
\hat y=Z\omega = ZZ^T(ZZ^T+\lambda I)^{-1}
y^=Zω=ZZT(ZZT+λI)−1
我们看到,岭回归的数据只依赖于内积。那么这个内积是数据空间的内积吗?
Z = ( z 1 T . . . z n T ) Z ∗ Z T = ( z 1 T . . . z n T ) ∗ ( z 1 , . . . , z n ) = z 1 T ∗ z 1 + . . . + z n T ∗ z n = < z 1 , z 1 > + . . . + < z n , z n > Z = \begin{pmatrix} z_1^T \\ ... \\ z_n^T \end{pmatrix} \\ Z*Z^T = \begin{pmatrix} z_1^T \\ ... \\ z_n^T \end{pmatrix}*(z_1,...,z_n)\\ = z_1^T*z_1 +...+z_n^T*z_n = <z_1,z_1> +...+<z_n,z_n> Z=⎝⎛z1T...znT⎠⎞Z∗ZT=⎝⎛z1T...znT⎠⎞∗(z1,...,zn)=z1T∗z1+...+znT∗zn=<z1,z1>+...+<zn,zn>
这个内积就是依赖于数据的内积了。因此岭回归是可以进行核化的
3.4.3 PCA与KPCA
3.4.2.1 PCA
再来看看PCA
PCA本质上是找一个轴,让数据在这个轴上具有最大的散布。
我们假定拥有一组数据,这组数据已经做过了中心化,也就是均值为0
这里也需要注意一下,与最小二乘回归那边不一样,PCA矩阵中的数据是列向量。因为是对每个列向量进行投影,找一个最大散布方向。
Z = ( z 1 , . . . , z n ) , E ( Z ) = 0 Z = (z_1,...,z_n),E(Z) = 0 Z=(z1,...,zn),E(Z)=0
我们如何寻找最大的散布方向呢?实际上,就是我们让数据z在这个新轴的矢量上进行投影,然后让投影点的方差最大即可。
P r o j α Z ⇒ V a r ( P r o j α Z ) Proj_\alpha Z \Rightarrow Var(Proj_\alpha Z) ProjαZ⇒Var(ProjαZ)
投影的表达式为
P r o j α Z = α ( α T α ) − 1 α T Z Proj_\alpha Z = \alpha(\alpha^T \alpha)^{-1}\alpha^T Z ProjαZ=α(αTα)−1αTZ
方差表达式为
E
∣
∣
P
r
o
j
α
Z
∣
∣
2
=
E
(
Z
T
α
(
α
T
α
)
−
1
α
T
Z
)
=
E
(
(
α
T
Z
)
T
∗
α
T
Z
)
∣
∣
α
∣
∣
2
=
E
[
(
α
T
Z
)
2
]
∣
∣
α
∣
∣
2
=
E
[
(
α
T
Z
∣
∣
α
∣
∣
)
2
]
E||Proj_\alpha Z||^2 = E(Z^T\alpha(\alpha^T \alpha)^{-1} \alpha^T Z) \\ = \frac{E((\alpha^T Z)^T*\alpha^T Z)}{||\alpha||^2} \\ = \frac{E[(\alpha^T Z)^2]}{||\alpha||^2} = E[(\frac{\alpha^T Z}{||\alpha||})^2]
E∣∣ProjαZ∣∣2=E(ZTα(αTα)−1αTZ)=∣∣α∣∣2E((αTZ)T∗αTZ)=∣∣α∣∣2E[(αTZ)2]=E[(∣∣α∣∣αTZ)2]
即求
m
a
x
α
E
[
(
α
T
Z
∣
∣
α
∣
∣
)
2
]
max_\alpha E[(\frac{\alpha^T Z}{||\alpha||})^2]
maxαE[(∣∣α∣∣αTZ)2]
这里有一个条件,就是α是方向矢量,因此模为1,因此可以把目标方程变为条件极值的形式
m a x α E [ ( α T Z ) 2 ] , s.t. ∣ ∣ α ∣ ∣ 2 = 1 max_\alpha E[(\alpha^T Z)^2],\text{ s.t. } ||\alpha||^2 = 1 maxαE[(αTZ)2], s.t. ∣∣α∣∣2=1
∇
α
L
(
α
)
=
∇
α
(
α
T
E
(
Z
Z
T
)
α
)
+
λ
(
α
T
α
−
1
)
)
\nabla_\alpha L(\alpha) = \nabla_\alpha(\alpha^T E(Z Z^T) \alpha ) +\lambda(\alpha^T \alpha-1))
∇αL(α)=∇α(αTE(ZZT)α)+λ(αTα−1))
令协方差矩阵等于RZ
R Z = E ( Z Z T ) = 1 n ∑ k = 1 n z k z k T R_Z = E(Z Z^T) = \frac{1}{n} \sum_{k=1}^n z_k z_k^T RZ=E(ZZT)=n1k=1∑nzkzkT
因此求导以后的结果为
2
R
Z
α
+
2
λ
α
=
0
⇒
R
α
=
λ
α
2R_Z\alpha + 2\lambda \alpha = 0 \Rightarrow R\alpha = \lambda \alpha
2RZα+2λα=0⇒Rα=λα
可以看出来,这个方向矢量就是协方差矩阵的特征值。而且应该是最大的特征值
因为我们的目标是要求
m
a
x
α
E
[
(
α
T
Z
∣
∣
α
∣
∣
)
2
]
=
α
T
R
Z
α
=
λ
max_\alpha E[(\frac{\alpha^T Z}{||\alpha||})^2] = \alpha^T R_Z \alpha = \lambda
maxαE[(∣∣α∣∣αTZ)2]=αTRZα=λ
当特征值最大的时候,达到最大目标函数。
3.4.2.2 KPCA
下面我们想把PCA进行核化。
首先,我们找到协方差矩阵
R Z = 1 n ∑ k = 1 n z k z k T R_Z = \frac{1}{n} \sum_{k=1}^n z_k z_k^T RZ=n1k=1∑nzkzkT
我们把协方差矩阵映射到特征空间
C = R ϕ ( Z ) = 1 n ∑ k = 1 n ϕ ( z k ) ϕ T ( z k ) = 1 n ( ϕ ( z 1 ) . . . ϕ ( z n ) ) ∗ ( ϕ T ( z 1 ) . . . ϕ T ( z n ) ) C=R_{\phi_{(Z)}} = \frac{1}{n} \sum_{k=1}^n \phi(z_k) \phi^T(z_k) \\ = \frac{1}{n}\begin{pmatrix} \phi(z_1) & ... & \phi(z_n)\\ \end{pmatrix} * \begin{pmatrix} \phi^T(z_1) \\ ... \\ \phi^T(z_n)\\ \end{pmatrix} C=Rϕ(Z)=n1k=1∑nϕ(zk)ϕT(zk)=n1(ϕ(z1)...ϕ(zn))∗⎝⎛ϕT(z1)...ϕT(zn)⎠⎞
令
X = ( ϕ ( z 1 ) . . . ϕ ( z n ) ) X T = ( ϕ T ( z 1 ) . . . ϕ T ( z n ) ) X = \begin{pmatrix} \phi(z_1) & ... & \phi(z_n)\\ \end{pmatrix} \\ X^T = \begin{pmatrix} \phi^T(z_1) \\ ... \\ \phi^T(z_n)\\ \end{pmatrix} X=(ϕ(z1)...ϕ(zn))XT=⎝⎛ϕT(z1)...ϕT(zn)⎠⎞
则
n
∗
C
=
X
∗
X
T
n*C = X*X^T
n∗C=X∗XT
但是,核函数并不是这个样子的,核函数应该是内积的形式
K = X T ∗ X = ( ϕ T ( z 1 ) . . . ϕ T ( z n ) ) ∗ ( ϕ ( z 1 ) . . . ϕ ( z n ) ) = ( ϕ T ( z 1 ) ϕ ( z 1 ) . . . ϕ T ( z 1 ) ϕ ( z n ) . . . . . . . . . ϕ T ( z n ) ϕ ( z 1 ) . . . ϕ T ( z n ) ϕ ( z n ) ) = ( k ( z 1 , z 1 ) . . . k ( z 1 , z n ) . . . . . . . . . k ( z n , z 1 ) . . . k ( z n , z 1 ) ) K = X^T*X = \begin{pmatrix} \phi^T(z_1) \\ ... \\ \phi^T(z_n)\\ \end{pmatrix}* \begin{pmatrix} \phi(z_1) & ... & \phi(z_n)\\ \end{pmatrix} \\ = \begin{pmatrix} \phi^T(z_1)\phi(z_1) &... & \phi^T(z_1)\phi(z_n)\\ ... &...&...\\ \phi^T(z_n)\phi(z_1) &...& \phi^T(z_n)\phi(z_n)\\ \end{pmatrix} \\ = \begin{pmatrix} k(z_1,z_1)&... & k(z_1,z_n)\\ ... &...&...\\ k(z_n,z_1) & ... & k(z_n,z_1)\\ \end{pmatrix} K=XT∗X=⎝⎛ϕT(z1)...ϕT(zn)⎠⎞∗(ϕ(z1)...ϕ(zn))=⎝⎛ϕT(z1)ϕ(z1)...ϕT(zn)ϕ(z1).........ϕT(z1)ϕ(zn)...ϕT(zn)ϕ(zn)⎠⎞=⎝⎛k(z1,z1)...k(zn,z1).........k(z1,zn)...k(zn,z1)⎠⎞
C = K C \cancel=K C= K
是不是就意味着PCA不能进行核化了呢?
其实还是有办法的
( X T X ) ∗ α = λ ∗ α X ∗ ( X T X ) ∗ α = λ ∗ ( X ∗ α ) ( X ∗ X T ) X α = λ ∗ ( X ∗ α ) (X^TX)*\alpha = \lambda*\alpha X*(X^TX)*\alpha = \lambda*(X*\alpha) \\ (X*X^T)X \alpha = \lambda*(X*\alpha) (XTX)∗α=λ∗αX∗(XTX)∗α=λ∗(X∗α)(X∗XT)Xα=λ∗(X∗α)
我们发现,K矩阵与n*C矩阵相比,特征值是一样的,只是特征向量发生了变换
v ′ = X α v' = X \alpha v′=Xα
首先我们要对特征向量进行单位化
v = v ′ ∣ ∣ v ′ ∣ ∣ = X α α T X T X α = X α α T ∗ λ ∗ α v = \frac{v'}{||v'||} = \frac{X \alpha}{\sqrt{\alpha^T X^T X \alpha}} \\ = \frac{X \alpha}{\sqrt{\alpha^T * \lambda * \alpha}} v=∣∣v′∣∣v′=αTXTXαXα=αT∗λ∗αXα
因为α的单位向量,所以我们得到了特征空间的特征向量
v = X α λ v = \frac{X \alpha}{\sqrt{\lambda}} v=λXα
我们做PCA,实际上是把数据投影到特征向量上的,所以有
v T ∗ ϕ ( z ′ ) = α T λ ∗ X T ∗ ϕ ( z ′ ) = α T λ ∗ ( ϕ T ( z 1 ) . . . ϕ T ( z n ) ) ∗ ϕ ( z ′ ) = α T λ ∗ ( k ( z 1 , z ′ ) . . . k ( z n , z ′ ) ) v^T* \phi(z') = \frac{\alpha^T}{\sqrt{\lambda}}*X^T*\phi(z') \\ = \frac{\alpha^T}{\sqrt{\lambda}}*\begin{pmatrix} \phi^T(z_1) \\ ... \\ \phi^T(z_n)\\ \end{pmatrix}*\phi(z') \\ = \frac{\alpha^T}{\sqrt{\lambda}}* \begin{pmatrix} k(z_1,z') \\ ... \\ k(z_n,z')\\ \end{pmatrix} vT∗ϕ(z′)=λαT∗XT∗ϕ(z′)=λαT∗⎝⎛ϕT(z1)...ϕT(zn)⎠⎞∗ϕ(z′)=λαT∗⎝⎛k(z1,z′)...k(zn,z′)⎠⎞
所以,我们就得到了在新特征空间下的坐标。我们得到的就是数据降维以后的数据。