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

本文首先定义了核函数的概念,并通过实例说明了核函数如何简化高维空间中特征向量的内积计算过程,进而避免了直接计算带来的复杂度。此外,文章还探讨了核函数在机器学习算法中的应用方式及其在支持向量机(SVM)中的具体作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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了没有。所以谢谢题主问这个问题,你又驱使我把这个概念完整地思考一遍,并记录下来。  

### 机器学习分类报告的定义 在机器学习领域,分类报告是一种用于评估分类模型性能的重要工具。它通过提供一系列标来衡量模型的表现,这些标通常包括精确率(Precision)、召回率(Recall)、F1分数(F1-Score),以及支持数(Support)。其中: - **精确率**表示被正确预测为正类的样本占所有被预测为正类样本的比例[^1]。 - **召回率**是实际为正类的样本中,有多少比例被成功预测为正类[^2]。 - **F1分数**是精确率和召回率的调和平均值,综合考虑了两者的影响[^3]。 - **支持数**则每个类别中真实样本的数量。 这种报告形式能够帮助研究者全面了解模型在不同类别上的表现差异。 --- ### 分类报告的用途 分类报告的主要用途在于深入分析分类模型的效果及其潜在不足之处。具体来说: - 它可以帮助研究人员发现哪些类别容易混淆或难以区分,从而导进一步优化模型结构或者调整超参数[^4]。 - 对于不平衡数据集而言,仅依赖单一的整体准确率可能无法反映实际情况,而分类报告提供了更细致的信息以便做出合理判断[^1]。 - 此外,在多标签或多分类场景下,单独查看某一类别的各项评价标准有助于定位特定类型的错误模式并采取针对性措施改进[^2]。 --- ### 示例代码展示 以下是利用 Python 的 `scikit-learn` 库生成一份简单二分类任务下的分类报告实例: ```python from sklearn.metrics import classification_report from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.datasets import make_classification # 创建模拟数据集 X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=1) # 划分训练集与测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 使用 SVM 进行建模 model = SVC(kernel='linear') model.fit(X_train, y_train) # 预测结果 y_pred = model.predict(X_test) # 输出分类报告 report = classification_report(y_test, y_pred, target_names=['Class 0', 'Class 1']) print(report) ``` 运行以上脚本后会得到如下样式的输出内容: ``` precision recall f1-score support Class 0 0.97 0.86 0.91 91 Class 1 0.88 0.97 0.92 109 accuracy 0.92 200 macro avg 0.93 0.92 0.92 200 weighted avg 0.92 0.92 0.92 200 ``` 此表格清晰展示了各个类别对应的精度、召回率以及其他统计数值。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值