前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习入门 11-6 到底什么是核函数

机器学习入门 11-6 到底什么是核函数

作者头像
触摸壹缕阳光
发布2020-08-10 10:10:28
1.4K0
发布2020-08-10 10:10:28
举报

从黎明到黄昏,阳光充足,胜过一切过去的诗。--海子

全文字数:2579字

阅读时间:12分钟

前言

本系列是《玩转机器学习教程》一个整理的视频笔记。在上一小节具体的编程实践中看到,在SVM算法中有一个非常重要的概念叫做核函数。本小节以简单的多项式核函数为例介绍什么是核函数。

a

什么是核函数?

SVM算法的本质就是求解下面这个最优化问题:

▲SVM算法的本质

由于上式是一个有条件的最优化问题,所以没有使用具体的数学推导来求解。不过在具体求解的过程中还需要对上面最优化问题的数学表达式进行变形,将其转换成一个在数学上更容易求解的表达式。

▲转换成更容易求解的表达式

转换后的表达式如下图所示,我们关注表达式最大化部分中的xi点乘xj(红色框所标识的部分)。

▲转换后的数学表达式

其中xi和xj分别表示第i个样本和第j个样本的特征向量,因此转换后的表达式中任意两个样本的特征向量都要进行点乘。如果为样本添加多项式特征,xi添加多项式特征变成xi',xj添加多项式特征变成xj',为样本添加多项式之后就可以在最优化的式子中使用添加多项式的新特征xi'和xj',也就是将最优化式子中的xi和xj替换成xi'和xj'。

上面的流程是先将xi和xj转换为xi'和xj',然后计算xi'和xj'的点乘。现在不按这个流程来计算,先设置一个函数,函数中有两个参数分别是xi和xj,使用函数直接进行数学运算计算出xi'和xj',即k(xi, xj) = xi'xj'。如果能够找出这样的函数,就可以将最优化式子中的xi与xj的点乘用k(xi, xj)来表示。函数k的作用其实就是省略掉将xi和xj变成xi'和xj'的这一步,我们不再需要这种变形,而是直接计算出k(xi, xj),也就是直接计算xi'和xj'点乘后的结果,这k函数就是所谓的核函数。(因为k(xi, xj) = xi'xj')

▲引入函数K之后的表达式

在一些资料中可能会将kernel function称为kernel trick,也就是称为核技巧。核技巧的称呼还是比较准确的,因为即便是不使用核函数也完全能够达到同样的效果,引入核函数更像是一个数学技巧。应用核函数可以免去对原来样本先进行变换,然后再对变形后的结果进行点乘运算的步骤,尤其对一些比较复杂的变换,使用核函数能够带来很多好处。

  • 计算量会有所减少;
  • 节省了存储空间,因为对原来的样本进行变形,通常都是把一个低维的样本特征向量变成一个更加高维的样本特征向量,那么存储这个高维的样本特征,相应的就会花费很多的存储空间。如果使用核函数的话,我们完全不用管把原来的样本变成了什么样子,我们不需要存储变化后的结果就可以直接使用核函数的方式计算出两者点乘后的结果;

核函数并不是SVM算法特有的一种技巧,事实上只要算法能够转化成一个最优化的问题,并且在求解这个最优化问题中存在xi点乘xj这样的式子,或者类似这样的式子就可以使用核函数技巧。可能很多时候只有在SVM这种算法中看到过核函数,这是因为对于比较常用的传统机器学习算法来说,核函数这种技巧更多的在SVM算法中使用而已,但核函数并不是SVM算法专有的一种思想。

b

多项式核函数

为了能够更清晰的理解核函数,下面以多项式核函数为例,看看这个核函数是如何运作的。二次多项式核函数的定义如下所示。

其中x和y是两个向量。这里为了后面数学计算方便,只展示出了二次多项式的核函数,在后续会将其扩展到任意d次项的多项式核函数。

我们首先来看看这个核函数右侧展开的结果,x和y是两个向量,向量的点乘就是x和y向量中的对应元素相乘之后再相加,这也是向量点乘的代数意义。将x与y向量点乘写成代数形式。(两个向量对应元素相乘之后相加)

将上面的k(x, y)展开并进行整理计算得到:

具体的二次项展开非常简单,不再赘述。这里将2xixjyiyj划分成根号2xixj和根号2yiyj,也就是将x和y分离开,同理将2xiyi划分成根号2xi和根号2yi。

我们可以将上面展开式子看作是若干项相乘之后再相加,相对应的可以看成是x'和y'两个向量中的对应元素的相乘之后再相加,因此x'向量为:

其中对应x'向量y也有对应的y',x'和y'两个新向量点乘之后的结果就是k(x, y),即k(x, y) = x'y'。

x'其实就是原来的样本x添加上二次项的数据得到的结果,x'中的元素除了有从x1到xn的一次项,还包含了x1到xn的二次项以及原来样本n个维度中任意两个维度相乘的二次项。x'向量中的元素有根2,其实有没有根号影响并不大,因为反正需要将x'送入线性SVM模型中,对于线性SVM模型求得的是每一个特征前面的系数,因此对于这些转换的x'向量中的二次项一次项前面自带的系数,我们不需要考虑就可以了。

我们将原来的样本特征向量添加了二次方的这样的多项式项,然后再进行点乘运算,我们可以不把这个二次项的变化后的向量x'展示出来,然后再计算x'y'的点乘。我们直接利用原来的样本,使用x与y点乘之后在加上1的平方就好了,此时的结果和先将x和y变成x'和y',之后对x'y'进行点乘的结果是一致的。这也能够看出来核函数能够大大的降低计算的复杂度。对于二次项核函数来说,我们只需要将原来的x和y代入(xy + 1)^2中,通过上面的分析其实就相当于为我们的样本添加了二次项特征。(x'和y'中有2次项特征,而计算的k(x, y) = x'y')

▲二次项核函数

当然了这里可以将二次项核函数拓展成多项式核函数,我们可以制造任意的degree多项式特征,所以其中的2可以换成d,d就是上一小节中为SVM算法传入的degree的值。与此同时,二次项核函数为(xy + 1)^2,其中的1可以推广成c,这里的c和d是另外的两个超参数。下面是多项式核函数的数学表达式。

当我们使用sklearn创建一个SVC的时候,如果为kernel参数传入"poly的"话,这就是一个多项式核函数,在此基础上可以指定degree的参数值,此时degree就是上面多项式核函数的数学表达式中的d阶数。与此同时,SVC中还有一个coef0的参数,这个参数就是上面多项式核函数的数学表达式中的c,coef0参数默认为0。

核函数其实就是替换原来的x与y的点乘操作。当然也可以使用核函数来表示线性SVM,此时的核函数就非常简单了,就是原来的x与y的点乘,这也被称为线性核函数。

▲核函数

理解了核函数的概念,可以提出很多不同的核函数,这些核函数对应不同的原始样本的转换,其中最为著名的一个核函数就是高斯核函数。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI机器学习与深度学习算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档