版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haolexiao/article/details/70800960
之前一篇文章【机器学习】Linear SVM 和 LR 的联系和区别讲了线性SVM和常规LR的关系和优缺点。结果今天想研究一下Kernel logistic regression(以下简称KLR),结果发现相关的中文资料几乎没有啊,所以特来总结一下
一个模型要能用核函数形式必须满足如下两点:
w
是
xi
的线性组合是使用Kernel的关键所在。
比如SVM,其最佳
w
来源于
xi
的线性组合
w∗=∑i=1n(αiyi)xi
同时这个模型本身是线性模型也是使用Kernel的必要条件
即
y=f(wTx)
只有满足了以上两点:其判别式才能写成
y=f(∑i=1nαixTix)=f(∑i=1nαi<xi,x>)
进而写成核函数形式:
y=f(∑i=1nαiK(xi,x))
LR本身就是一个线性判别模型,所以满足了条件2,那么它是否满足条件1呢?
证明如下:
任何L2正则化的线性模型都可以用核函数
标题就是结论,下面开始证明:
只要需要优化的目标函数如下:
minLoss(w)=minw∑i=1nerror(yi,wTxi)+λwTw
即优化的目标是一个广义线性损失函数(这里指
w
需要和
xi
简单做内积),同时带有一个
wTw
的L2正则。
那么:最优的
w∗
就能表示为
xi
的线性组合
证明如下:
假设最优解
w∗
存在,那么把
w∗
分成两个部分,一个平行于
xi
的线性组合
∑ni=1αixi
部分
w||
,另一个是垂直于其线性组合的部分
w⊥
。即:
w∗=w||+w⊥
带入到上面的
Loss(w)
目标函数中得到:
对于error部分:
error(yi,(w||+w⊥)Txi)
因为
w⊥
部分也垂直于所有的
xi
所以,error部分就等同于:
error(yi,wT||xi)
对于正则化部分:
wTw=(w||+w⊥)T(w||+w⊥)=wT||w||+2∗wT||w⊥+wT⊥w⊥=wT||w||+wT⊥w⊥
所以此时的
Loss(w∗)
目标函数为:
Loss(w∗)=∑i=1nerror(yi,wTxi)+λwTw
=∑i=1nerror(yi,wT||xi)+λ(wT||w||+wT⊥w⊥)
≥∑i=1nerror(yi,wT||xi)+λwT||w||
=Loss(w||)
因为已经假设了
w∗
是最优解,即使得
Loss(w)
最小的解,而上面又证明了
Loss(w∗)≥Loss(w||)
所以只有取得等号的时候才能满足题意,而只有当
w⊥=0⃗
时才能取得等号
所以证得:
w∗=w⊥
所以说明其最优的
w∗
可以由每个数据集线性表示出来,即
w∗=∑i=1nαixi
Kernel logistic regression(KLR)推导
既然上面已经推导了
w∗=∑i=1nαixi
那么怎么去求里面的参数
αi
呢?
那就直接带入到
Loss(w)
中就好,这样Loss(w)就变成了
α
的函数:
Loss(α)=minα∑i=1nerror(yi,(∑j=1nαjxj)Txi)+λ(∑i=1nαixi)T(∑i=1nαixi)
=minα∑i=1nerror(yi,∑j=1nαj<xj,xi>)+λ∑i=1n∑j=1nαiαj<xi,xj>
有了向量内积,就可以转化成为核函数:
Loss(α)=minα∑i=1nerror(yi,∑j=1nαjK(xj,xi))+λ∑i=1n∑j=1nαiαjK(xi,xj)
对于 logistic regression来说,其损失函数:
error(yi,wxi)=log(1+exp(−yiwTxi))
所以:
Loss(α)=minα∑i=1nlog(1+exp(−yi∑j=1nαjK(xj,xi)))+λ∑i=1n∑j=1nαiαjK(xi,xj)
所以需要优化的目标就出来了,用正常的优化方法就好(比如SGD),而且它没有约束。
另一个角度来看Kernel损失函数
Loss(α⃗ )=minα∑i=1nerror(yi,∑j=1nαjK(xj,xi))+λ∑i=1n∑j=1nαiαjK(xi,xj)
看前半部分:
error(yi,∑j=1nK(xj,xi)αj)
这部分可以看成参数向量
α⃗ =(α1,α2,⋯,αn)
与系数向量
K⃗ (⋅,xi)=(K(x1,xi),K(x2,xi),⋯,K(xn,xi))
两个向量的内积。
再看后半部分:
∑i=1n∑j=1nαiαjK(xi,xj)=α⃗ TKα⃗
其中
K
为kernel矩阵,矩阵的第
i
行
j
列
Kij=K(xi,xj)
所以这个
Loss(α⃗ )
可以化为:
Loss(α⃗ )=minα∑i=1nerror(yi,α⃗ TK⃗ (⋅,xi))+λα⃗ TKα⃗
所以可以把
α⃗
看成之前的
w⃗
,所以新的可以看成关于
α⃗
的线性模型.
可以这么看损失函数:
1. 第一部分
α⃗ TK⃗ (⋅,xi)
看成之前的线性内积
2. 第二部分
α⃗ TKα⃗
看成
α⃗
的正则化项。
二次型
α⃗ TKα⃗
这里额外说一下二次型
α⃗ TKα⃗
常规的
α⃗ Tα⃗
可以看成正常的欧式距离,而
α⃗ TKα⃗
可以看成
α⃗
关于
K
的距离。
因为
K
是一个对称矩阵,所以任何一个对称矩阵都可以化成
K=PTAP
其中
A
矩阵是一个对角矩阵,如果
K
还是一个正定矩阵的话,那么
P
可以是一个单位正交矩阵【相当于其特征向量组成的矩阵】
所以二次型化为:
α⃗ TKα⃗ =(Pα)TA(Pα)
可以看成先将
α⃗
做旋转,然后各个分量做伸缩之后的距离。
KLR和SVM的对比
既然加核之后,KLR和SVM都可以用于多分类,那么它们的不同点在什么地方呢?
KLR的优势:
1. KLR能够提供属于某一类的概率,而SVM只能判定属于某一类
2. KLR自带能够扩展到多分类问题方法,而SVM虽然也可以但是都不太理想
虽然上面说了这么多关于KLR的好处,那么为什么不见有人用呢, SVM的优势有哪些?
KLR计算复杂度实在是太高了,因为其几乎每一个
αi
都不为0,所以基本上要计算两两之间的
xi
的核函数,而SVM只有支持向量起作用,所以其自带稀疏性,只用计算少量的支持向量的
αi
部分就好。
KLR的计算复杂度是
O(N3)
SVM的计算复杂度是
O(N2k)
其中
αi
不为0的个数
参考资料
- Kernel logistic regression vs SVM
- Kernel Logistic Regression (機器學習技法)现在才发现这门课讲的真是太好了。