之前曾经在知乎上问过一个ml phd几个问题,问题如下:
1.SVM模型中,假如通过高斯核这样的可以把样本空间向无限多维映射的核函数,映射之后,样本空间一定可分么?之所以有这个疑惑,是因为我曾经记得有一个老师说:无论样本空间多么不可分,只要映射的维数足够高,就一定可分。
解答:高斯核函数的确是把样例映射到无限多维,并且也一定可以使得样例线性可分(不过这里有一个前提,前提就是同样的样例不能即既被标记为正例,又被标记为负例)。
2.如果第一个问题的回答是yes,那在SVM中又为什么需要使用松弛变量和惩罚因子呢,既然使用核函数映射之后,一定可分,那也就不会出现一个负样例跑到正样例区域这样的事情了。用松弛变量 又有什么意义呢?
解答:使用松弛变量和惩罚因子的意义在于避免overfitting,使得模型泛化性更好。由于数据有一些噪声,我们不希望我们的model对这些噪声过于敏感。
关于1,2问题,知乎王赟 Maigo的解答是这样的:
理论上来讲,维度足够高以后,确实是几乎一定线性可分。
但是不排除有特殊情况,比如有一正一负两个样本的特征完全一样。
更重要的是,实际应用中我们并不需要追求完美的线性可分;费了很大的力气完美分割了两个类,很可能意味着overfitting。
所以,我们通过松弛变量和惩罚因子的平衡,让SVM自己学习到哪些样本是值得分开的,哪些样本是可以弄错的(把它弄对花的代价太大)。这样才能获得可推广的模型。
PS:之前一直不太明白这一点。觉得如果把数据向无限多维进行映射的话,样例一定线性可分,既然这样,找那个在最中间的超平面不就好了么,还用得着松弛变量么?后来想想,假如数据只是二维的。不也需要松弛变量么?找最中间的超平面 未必就是合适的!!!如下图所示。
3.看到很多机器学习包,会使用sigmoid核和高斯核,他们都是向无限多维度进行映射的。但是也许数据本身映射到100维就好了呢,为什么要映射到无限多维呢?
解答:1.因为在很多时候,我们并无法确定,数据到底映射到多少维算合适。比如你想把数据映射到100维,你打算怎么映射呢,你又怎么确定每一维是什么样呢。2.因为从计算的简便性来说,要遍历所有的核空间,逐一尝试不同的维度,是需要大量的时间的。3.其次,因为机器学习包是开源的,所以要适应各种不同类型的数据。
4.在机器学习中,惩罚因子是人工设定的,而松弛变量是模型优化得到的么?
解答:对的!惩罚因子需要人工设定。而松弛变量和w一样,是模型优化得到的(通过smo算法)!
5.在SVM中利用核函数映射,一般会映射到多少维度呢,这个维度有办法估量么?
解答:n阶多项式可以把d维映射到d^n这个数量级的维数;其它核一般都是映射到无限维。
2.假如我数据是100万维,利用核函数映射到高纬度,会不会高纬度比100万维还要小?
解答:不会。
3.对于不同的核函数,比如sigmoid维度,高斯核,多项式核,他们映射数据到高纬的能力是怎样的呢?
解答:它们都映射到无限维,而且一般不去研究映射本身,因为这个映射是隐含的。有些核函数有其适用的场景(比如chi-square核函数适用于histogram(直方图)特征),但实际应用中一般都是挨个试一下,选最好的。