SVM: 使用kernels(核函数)的整个SVM算法过程

来源:互联网 发布:sj金基范雪藏事件知乎 编辑:程序博客网 时间:2024/06/05 10:55

将所有的样本都选做landmarks

一种方法是将所有的training data都做为landmarks,这样就会有m个landmarks(m个trainnign data),这样features就是某个x(可以是trainning data/cross validation data/test data里面的)与这些landmarks之间的距离的远近程度的描述。

landmarks选定后得出新的features向量

给出一个x,则通过这些landmarks来计算features向量,和之前的类似,将f0=1;

对于在training data里面的x(i)则通过kernel函数映射后变为f1(i),f2(i).....fm(i)(m个trainning data,m个landmarks),对于fi(i),由高斯核函数计算得出1

如何minimize cost function得出parameters-- θ

我们根据核函数计算出new features f(有m+1维):m个landmarks(m个data set),+1是f0=1

cost function与之前的有些不同,因为我们用了新的features,所以z不是θTx(i)而是θTf(i);后面的正则化项因为θ为m+1维,不对θ0正则化,即从θ1-m进行累加

这儿需要注意的是在使用SVM与核函数时,不是使用θTθ来表示parameters的平方的累加,而是使用θT(M为依赖于采用的某个核函数的矩阵),为另一种略有区别的距离度量方式,不使用||θ||2进行最小化,而是最小化另一种类型的度量(参数向量θ的变尺度形式,这种变化和核函数有关),这样使得SVM有效率的运行,之所以这样做是为了适应大的数据集,因为当我们的数据集很大的时,landmarks就会很多,θ的维数也会很大,这样计算θ就会很慢,所以做了这样的优化。

kernels能应用到其它算法吗?如logistic regression等?可以将kernels应用到其它算法,但是用于SVM的计算技巧却不能较好的推广到其它算法(如logistic regression),所以将kernels应用到logistic regression时,会变得非常慢。

SVM与kernels是相配的,而logistic regression与kernels会十分慢。

一些计算小技巧是人们专门为使用kernels的SVM来开发的

如何确定SVM的一些参数(如C与高斯核函数的σ2)--bias与variance之间的权衡

C=1/λ,λ为正则化参数,当C大时,表示λ小,则会high variance,low bias(overfitting)

当C小是,表示λ大,则会high bias, low variance(underfitting)

σ2为高斯核函数的参数,用来表示f(新的features)与x之间变化是平缓的还是急剧的。

大的σ2,表示参数的值随着x的变化而变化平缓,所以会出现underfitting(high bias,lower variance)

小的σ2,表示参数的值随着x的变化而变化急剧所以会出现overfitting(high variance,lower bias)


按照Andrew在视频课上的讲解,高斯核就是把每个数据都看做是一个基准然后分别计算所有数据与这个基准之间的高斯函数。

这样如果原始数据维度是2,有n条数据,就成功的把一个2维的向量升到了n维。


那么为什么说高斯核函数能将数据映射到无穷维度空间呢?

参考自水木社区:

如果映射后空间是k维的话,那内积矩阵的秩最大是k。而任给n个互不重合的样本, 
Gaussian kernel的内积矩阵都是满秩的。所以你无论假设k是多少,都能找到n>k,矛 
盾,所以必须是无限维的。 


意思是说,我现在有n条数据,那么我把k维成功升到了n维,你告诉我说高斯核函数能把数据集升到n维。这个时候我再给你加一条新的与原始数据不重合的样本,那么数据就可以映射到n+1维空间,与之前结论矛盾,因此,高斯核函数能将数据升到无穷维。


那么升到无限维有什么好处呢?

好处是:vc维提升(线性分类器的vc维是n+1,如果升到无穷维,则是vc维也是无穷的),即总能找到一个分类面将数据集很好的分开。vc维代表了分类能力。即在使用SVM的时候,只要C选的足够大,就可以保证拟合的很好,甚至是过拟合。



如果是高斯核函数,那svm train出来的model是不是得存储所有的原始训练数据呢?

答案是否定的。

由于w=Σαyx,由于非suppor vector对应的alpha的值都是0,所以它随便是多少都无所谓,一乘alpha直接原形毕露,所以其实还是只需要保存下来support vector的数据即可。




原文地址:http://www.cnblogs.com/yan2015/p/5183284.html

http://blog.csdn.net/oliverkehl/article/details/39276547

0 0
原创粉丝点击