kernels
上一篇,我们讨论的都是在进行线性分类的情况,接下来当然需要讨论SVMs作为非线性分类器的情况,完成非线性分类的核心思想就是引入所谓核函数的一个东西。
如下图,我们现在要对这样一个数据集进行分类,我们能想到的一种方法就是利用高次项来进行拟合,但是在处理复杂的问题的时候,高次项会大大增加我们的运算负荷,于是就想能不能选择别的更好的特征呢。答案当然是肯定的,也就是kernel。
接下来我们要讲解什么是核函数,它是如何帮我引入新的特征变量的。同样的,为了直观我们假设只有 。现在我们人为地在平面上选取一些点作为landmark(这里假设选3个),分别为 。
然后我们定义新的特征为某个相似函数
这个所谓的相似函数就是定义某个点与我们选取的landmark的接近(相似)程度,同时这个也就是我们的kernel(核函数)。核函数有很多种,我们所举例中用的是高斯核函数。
对于高斯分布,如果某个点离我们的landmark越近,它对应的核函数的值就越接近于1,如果离的越远,就越接近于0。
下面给出一些例子就更加清楚了,对于二维的情况,每个kernel都是一个跟landmark和所选取的 有关的二维高斯分布。
核函数的形式我们有了,问题是landmark应该如何选取呢,面对复杂的问题,人为地选取landmark,显然是不太现实的。于是一个即简单又合理的方法就是选取我们训练集所有的点作为landmark,有多少个点就有多少个landmark。
通过核函数(本质上一种映射),我们将 映射到 ,现在特征量有了,训练集也有了,接下来就要训练模型拟合 了。相比于上一篇的目标函数,由于加入了kernel,我们进行了一些修改如下。
对于目标函数的后一项可以表示为 ,这里的 我们忽略 。在实际运用当中,我们的后一项其实是使用 ,这个 矩阵跟我们的kernel有关,不仔细讲解它的构成,只说明加入这个矩阵的原因,由于我们将我们训练集的所有样本都用作为了landmark,可想而知,如果我们的样本数量很大,那么 的运算量是非常大的,而这个矩阵的引入能够大大的减少运算时间。
最后我们讲一讲关于参数 的选取对于模型的影响。
小广告
淘宝choker、耳饰小店 物理禁止
女程序员编码时和编码之余 都需要一些美美的choker、耳饰来装扮自己
男程序员更是需要常备一些来送给自己心仪的人
淘宝小店开店不易 希望有缘人多多支持 (O ^ ~ ^ O)
本号是本人 只是发则小广告 没有被盗 会持续更新深度学习相关博文和一些翻译
感谢大家 不要拉黑我 ⊙﹏⊙|||°