林轩田之机器学习课程笔记( embedding numerous feature之support vector regression)(32之22)
欢迎转载,可以关注博客:http://blog.csdn.net/cqy_chen
题目可能不全,因为有字数限制,不好意思,可以参考:
https://www.csie.ntu.edu.tw/~htlin/course/ml15fall/
概要
上节讲到了kernel版本的逻辑回归,同时证明了L2的逻辑回归和soft-margin的SVM差不多是一样的。本节讲解将核函数用在回归之中。
带核函数的岭回归
对于任意的带有L2的线性函数都可以得到
再来看看线性回归,带L2的线性回归如何做到带kernel的。
回顾下:
而ridge的线性回归的损失函数是:
所以假设得到了w的最佳解为:
所以我们只需要求解这个
这个直接求解梯度就好了。
所以令这个梯度为0得到:
这个是一定存在的,因为
对比下线性回归和kernel版本的线性回归如下图:
kernel版本带来更大的空间选择,但是付出的代价也是蛮大的。
1)当数据量比较大的时候,且
2)当数据量不算很大的时候,可以使用kernel版本。
所以有利也有弊,要想更好的去拟合,需要付出计算的复杂度。
支持向量回归原问题
我们知道可以使用线性回归去求解分类问题,可以参考:
http://blog.csdn.net/cqy_chen/article/details/78908160
当然ridge的线性回归也可以去求解分类问题,所以采用kernel版本的岭回归更可以了。
我们将采用kernel版本的岭回归称为:LSSVM(最小二乘SVM)。
为啥称之为SVM呢,而不是回归呢?哈哈哈,可以参考
https://www.cnblogs.com/v-July-v/archive/2012/06/01/2539022.html
因为LSSVM是将原来的条件改成了等式,放到了SVM上面就和回归一个模样了。
对比下高斯的SVM和LSSVM如下;
可以看到就支持向量而言,soft-margin的高斯SVM的支持向量远远少于LSSVM,因为LSSVM是个回归啊。
两者的边界貌似差不多,如果就性能而言没啥好挑选的,但是如果上线的话,由于SVM的支持向量比较少,这样计算更快,而LSSVM支持向量太多,so,这个时候一般会选择SVM来使用。
那有木有啥办法减少LSSVM的支持向量的个数?
我们首先来看一个例子:
在上图中,如果我们不考虑阴影内部的点的错误,只考虑外面点的错误,这样就得到了tube 的回归。
其损失函数如下:
这样就减少了点的数量,参数的个数自然就降下来了。
对比下tube的regression和原始的regression:
他们的损失函数如下:
可以看到在一定范围内,两者差不多的。但是越往两边走,采用平方的回归问题的损失更大,这样就更容易受到噪音的影响。所以从这方面看tube的回归还是不错的。
目标函数如下:
如何求解呢?这个和我们以前的soft-margin的SVM不是一样的形式吗?
可以参考:http://blog.csdn.net/cqy_chen/article/details/78938739
可以参考以前的公式:
将tube的回归改写成SVM的样子,这里将正则化项修改成固定参数1/2便于和SVM保持一致,同时将w也修改了成了w和b的形式。
对比上面SVM的处理办法。将上面进行了转换,得到:
最后得到标准的原问题,我们称这个是SVR,支持向量回归。
这里转换的时候稍微啰嗦两句,我们将
这样就转换成了一个标准的QP问题,就可以采用熟悉的技术来搞定了,共计有
同理,如果维度比较小的话可以直接采用QP问题去求解,如果通过高维度的kernel转换则需要采用对偶的方式去求解,比如高斯kernel。
支持向量回归的对偶问题
ok上面说到了SVR的形式,那么对于高维的映射还是要采用对偶的问题,那么对偶形式如何呢?该如何求解呢?可以再去慢慢推导,这里就不写了,参考:http://blog.csdn.net/cqy_chen/article/details/78938739求解。
首先设定拉格朗日乘子是:
最后对比原始的SVM和SVR的结果:
切记:SVM是用于分类,SVR是用于回归,之所以选用SVR作为回归就是可以通过一个隔离带减少支持向量的个数从而达到预测和计算的时间开销。
这也是为啥要使用SVR替代岭回归
那么我们可以看看到底SVR是否是参数稀疏的,其实这个想都不用想,因为在隔离带内的数据错误都归0,导致这些点都不参与计算了,掰着脚趾头都知道这个回归方程只是用了隔离带外的点,而w是可以用资料点表示的,点少了,那w计算当然就便宜了。这里还是展示下:
所以采用SVR解决了岭回归中的参数密集问题。
核函数模型总结
这里将以前学习到的模型进行总结:
线性模型:
在kernel版本的模型:
这里大致说一说:
1)PLA用的少,虽然是神经网络以及SVM的鼻祖,但是表现不咋好,假设空间可以看出。
2)线性的SVR用的也少,因为表现也不好,因为我们知道SVR是只采用了隔离带以外的数据进行计算,虽然稀疏了,但是点少了。表现不佳。
3)线性soft-margin的SVM在数据量少的情况还是可以的,数据量大SVM就不好使了。
4)线性的岭回归还是不错的,在但是这个回归会有参数稠密问题,所以会对比岭回归还是lasso的回归。
5)正则化的逻辑回归,这个是经常使用的。结合bagging的方式666。
6)kernel版本的岭回归,因为参数稠密上面我们也介绍了,只要带有kernel肯定计算量要上来,你还不是稀疏的,让人怎么活
7)kernel的逻辑回归,和kernel版本的岭回归一个道理
8)kernel版本的SVM/SVR/problistic SVM用的多,但是计算量都有的。
所以在使用模型的时候要考虑模型是否可以达到精度要求,还有就是计算量的问题。
欢迎转载,可以关注博客:http://blog.csdn.net/cqy_chen
上一篇: 内部类:局部内部类