机器学习里的kernel是指什么?

1.先给个定义:核函数Kkernel function)就是指K(x, y) = ,其中xyn维的输入值,f(·) 是从n维到m维的映射(通常而言,m>>n)。是xy的内积(inner product),严格来说应该叫欧式空间的标准内积,也就是很多人常说的点积(dot product)。  

2.    

3.光看这一段还是不明白kernel是什么,用来干什么的...对吧?不要急。一个好的知识分享者是不会把一篇空洞的定义扔下就不管的,TA会告诉你这个概念的intuition,然后给你举个小小的栗子,最后告诉你几个应用场景。Andrew NgMachine Learning为什么会成为一门现象级的MOOC?原因之一就是因为他除了是个学术上的大神,也同样是个极有质素的知识分享者。所以我要学习他。  

4.  

5.好了,intuitively(这也模仿得太生硬了吧),要计算,我们要先分别计算f(x)f(y),然后再求它们的内积。上面的定义里也说了,经过映射后的xy,维数大大增加,计算内积的成本可能会非常之大,而且在高位空间费力牛劲儿地计算内积,内积又是一个scalar,相当于说又把我们的计算从高维空间拉回到一维空间!所以我们特别想要一个简便运算法,帮助我们不需要奔向高维空间就能在家门口计算得到想要的内积。这时候该轮到我们的猪脚——kernel登场了,它能帮我们做到这一点。  

6.  

7.举个小小栗子。  

8.  

9. x = (x1, x2, x3, x4); y = (y1, y2, y3, y4);  

10.  

11. f(x) = (x1x1, x1x2, x1x3, x1x4, x2x1, x2x2, x2x3, x2x4, x3x1, x3x2, x3x3, x3x4, x4x1, x4x2, x4x3, x4x4); f(y)亦然;  

12.  

13.令核函数 K(x, y) = ()^2.  

14.  

15.接下来,让我们带几个简单的数字进去看看是个什么效果:x = (1, 2, 3, 4); y = (5, 6, 7, 8). 那么:  

16.  

17.f(x) = ( 1, 2, 3, 4, 2, 4, 6, 8, 3, 6, 9, 12, 4, 8, 12, 16) ;  

18.  

19.f(y) = (25, 30, 35, 40, 30, 36, 42, 48, 35, 42, 49, 56, 40, 48, 56, 64) ;  

20.  

21. = 25+60+105+160+60+144+252+384+105+252+441+672+160+384+672+1024  

22.  

23.4900.  

24.  

25.好累,对不对?可谁让f(·)把四维空间的数据映射到十六维空间里呢?  

26.  

27.如果我们用核函数呢?  

28.  

29.K(x, y) = (5+12+21+32)^2 = 70^2 = 4900.  

30.  

31.就是这样!  

32.  

33.所以现在你看出来了吧,kernel其实就是帮我们省去在高维空间里进行繁琐计算的简便运算法。甚至,它能解决  

34. 无限维空间

35.无法计算的问题!因为有时f(·)会把n维空间映射到无限维空间去,对此我们常常束手无策,除非是用kernel,尤其是RBF kernelK(x,y) = exp(-||x-y||^2) )。  

36.  

37.在有kernel之前,做machine learning的典型的流程应该是:data --> features --> learning algorithm,但kernel给我们提供了一个alternative,那就是,我们不必定义从datafeature的映射函数,而是可以直接kernel(data) --> learning algorithm,也可以是data --> features --> kernel(features) --> learning algorithm  

38.  

39.所以虽然我们看到kernel常被应用在SVMSVM中的kernel应该是后一种用法,后文再说),但其实要用到内积的learning algorithm都可以使用kernel用到内积的learning algorithm”其实并不少见,不信你可以想一想最普通不过的linear classifier/regressor有没有一个步骤是计算特征向量(feature vectors)。  

40.  

41.<strong>那么kernelSVM究竟扮演着什么角色?</strong>  

42.  

43.初学SVM时常常可能对kernel有一个误读,那就是误以为是kernel使得低维空间的点投射到高位空间后实现了线性可分。其实不然。这是把kernelfeature space transformation 混为了一谈

44.。(这个错误其实很蠢,只要你把SVM从头到尾认真推导一遍就不会犯我这个错。)  

45.还是简单回顾一下吧。SVM就是 y = w'·φ(x) + b,其中φ(x)是特征向量(feature vectors),并且是φ(x)使得数据从低维投射到高位空间后实现了线性可分。而kernel是在解对偶问题的最优化问题时,能够使φ(x)更方便地计算出来,特别是φ(x)维数很高的时候。  

46.  

47.--------------正文完,附上几个链接-----------

48.  

49.kernel的种类繁多,如果想详细了解,可以看看这个帖子  

50.<a class="wrap external" href="//link.zhihu.com/?target=http%3A//crsouza.com/2010/03/kernel-functions-for-machine-learning-applications/" target="_blank">  

51.  

52.Caltech的机器学习:  

53.</a><a class="wrap external" href="//link.zhihu.com/?target=http%3A//work.caltech.edu/telecourse.html" target="_blank">  

54.  

55.台湾大学林轩田《机器学习基石》:  

56.</a><a class="wrap external" href="//link.zhihu.com/?target=https%3A//www.coursera.org/course/ntumlone" target="_blank">  

57.  

58.PS:本来草稿里存的话是想告诉题主,这样的问题好好去翻教材,或者看CaltechAbu-Mostafa教授的公开课Learning from Data,或者看台湾大学林轩田的《机器学习基石》,(前者是后者的导师,而且师徒俩讲课都很萌),弄懂kernel这个概念是不成问题的。  

59.  

60.但当时没有就这样草率地发出来。原因倒不是怕被扣友善度,而是接连地追问了我自己到底弄明白kernel了没有。所以谢谢题主问这个问题,你又驱使我把这个概念完整地思考一遍,并记录下来。  

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值