总结一下遇到的各种核函数~

由于之前做了很多核方法相关的子空间学习算法,本文打算对各种核函数进行一下简要的介绍,希望对大家能够有所帮助。

 

首先,再对核方法的思想进行描述,核函数的思想是一个伟大的想法,它工作简练巧妙的映射,解决了高维空间中数据量庞大的问题,在机器学习中是对算法进行非线性改进的利器。如下,如果在原空间中,给定的样本数据X是线性不可分的,那么如果我们能够将数据映射到高维空间中,即


那么在高维空间中,样本数据很有可能线性可分,这个特点可以用下图做一个很好的说明:

如左图,红色部分的点为一类数据,黑色部分的点为另一类,在一维空间中,你不可能通过一刀切将两类数据分开,至少需要两刀。OK,这就说明数据分布是非线性的,我们采用高维映射,当然了,例子中只是映射到了二维空间,但已经足够说明问题了,在右图中,完全可以通过沿着X轴方向的一刀切将两类数据分开,说明在二维空间中,数据已经变成线性可分的了。

 

这个时候,我们就可以采用很多已有的线性算法对数据进行处理,但是问题来了,映射函数具体形式是什么?这个问题的答案是,根本不需要知道映射函数的具体形式,直接对高维数据进行操作吧!

比如说最经典的PCA算法,这部分内容其实是对前一篇帖子的回顾(http://blog.youkuaiyun.com/wsj998689aa/article/details/40398777

PCA在原始空间中的数学模型如下所示:

                                                                                     

在高维空间中的形式就是:


                                                                       

我们对其进行简单的变换,我们知道,一个空间中的基向量完全可以用所有的训练样本线性表示出来,即

见证神奇的时刻到了,上式带入上上式,就可以得到如下形式:

                                                        

如果你再在等号两侧同时左乘一个东西,就会变成如下形式:


核方法的价值在于如下等式成立,


请注意,这个公式表达的意思只是高维空间中向量的内积等于原空间中向量之间的核函数值,根核函数的具体形式没有一毛钱的关系。我们继续,一个样本是这样的,那么矩阵化的形式如下:


那么PCA就变成了如下形式:


看到没,核方法借用核函数的性质,将高维映射成功的抹掉了。那么什么样的函数才可以被称作为核函数呢?这里大牛们给出了一个著名的定理,称作mercer定理。

 

Mercer 定理:任何半正定的函数都可以作为核函数。所谓半正定的函数f(xi,xj),是指拥有训练数据集合(x1,x2,...xn),我们定义一个矩阵的元素aij = f(xi,xj),这个矩阵式n*n的,如果这个矩阵是半正定的,那么f(xi,xj)就称为半正定的函数。

 

请注意,这个mercer定理不是核函数必要条件,只是一个充分条件,即还有不满足mercer定理的函数也可以是核函数。所谓半正定指的就是核矩阵K的特征值均为非负。

 

本文将遇到的核函数进行收集整理,分享给大家。

 

1. Linear Kernel

线性核是最简单的核函数,核函数的数学公式如下:


如果我们将线性核函数应用在KPCA中,我们会发现,推导之后和原始PCA算法一模一样,很多童鞋借此说“kernel is shit!!!”,这是不对的,这只是线性核函数偶尔会出现等价的形式罢了。

 

2. Polynomial Kernel

多项式核实一种非标准核函数,它非常适合于正交归一化后的数据,其具体形式如下:


这个核函数是比较好用的,就是参数比较多,但是还算稳定。

 

3. Gaussian Kernel

这里说一种经典的鲁棒径向基核,即高斯核函数,鲁棒径向基核对于数据中的噪音有着较好的抗干扰能力,其参数决定了函数作用范围,超过了这个范围,数据的作用就“基本消失”。高斯核函数是这一族核函数的优秀代表,也是必须尝试的核函数,其数学形式如下:


虽然被广泛使用,但是这个核函数的性能对参数十分敏感,以至于有一大把的文献专门对这种核函数展开研究,同样,高斯核函数也有了很多的变种,如指数核,拉普拉斯核等。

4. Exponential Kernel

      指数核函数就是高斯核函数的变种,它仅仅是将向量之间的L2距离调整为L1距离,这样改动会对参数的依赖性降低,但是适用范围相对狭窄。其数学形式如下:


5. Laplacian Kernel

      拉普拉斯核完全等价于指数核,唯一的区别在于前者对参数的敏感性降低,也是一种径向基核函数。


6. ANOVA Kernel

      ANOVA 核也属于径向基核函数一族,其适用于多维回归问题,数学形式如下:


7. Sigmoid Kernel

Sigmoid 核来源于神经网络,现在已经大量应用于深度学习,是当今机器学习的宠儿,它是S型的,所以被用作于“激活函数”。关于这个函数的性质可以说好几篇文献,大家可以随便找一篇深度学习的文章看看。


8. Rational Quadratic Kernel

      二次有理核完完全全是作为高斯核的替代品出现,如果你觉得高斯核函数很耗时,那么不妨尝试一下这个核函数,顺便说一下,这个核函数作用域虽广,但是对参数十分敏感,慎用!!!!


9. Multiquadric Kernel

      多元二次核可以替代二次有理核,它是一种非正定核函数。


10. Inverse Multiquadric Kernel

      顾名思义,逆多元二次核来源于多元二次核,这个核函数我没有用过,但是据说这个基于这个核函数的算法,不会遇到核相关矩阵奇异的情况。


11. Circular Kernel

      这个核函数没有用过,其数学形式如下所示:


12. Spherical Kernel

      这个核函数是上一个的简化版,形式如下所示


13. Wave Kernel

      这个核函数没有用过,其适用于语音处理场景。


14. Triangular  Kernel

三角核函数感觉就是多元二次核的特例,数学公式如下:


15. Log Kernel

      对数核一般在图像分割上经常被使用,数学形式如下:


16. Spline Kernel


17. Bessel Kernel


18. Cauchy Kernel

      柯西核来源于神奇的柯西分布,与柯西分布相似,函数曲线上有一个长长的尾巴,说明这个核函数的定义域很广泛,言外之意,其可应用于原始维度很高的数据上。


19. Chi-Square Kernel

      卡方核,这是我最近在使用的核函数,让我欲哭无泪,在多个数据集上都没有用,竟然比原始算法还要差劲,不知道为什么文献作者首推这个核函数,其来源于卡方分布,数学形式如下:


它存在着如下变种:


其实就是上式减去一项得到的产物,这个核函数基于的特征不能够带有赋值,否则性能会急剧下降,如果特征有负数,那么就用下面这个形式:


20. Histogram Intersection Kernel

      直方图交叉核在图像分类里面经常用到,比如说人脸识别,适用于图像的直方图特征,例如extended LBP特征其数学形式如下,形式非常的简单


21. Generalized Histogram Intersection

     顾名思义,广义直方图交叉核就是上述核函数的拓展,形式如下:


22. Generalized T-Student Kernel

      TS核属于mercer核,其数学形式如下,这个核也是经常被使用的


23. Bayesian Kernel

贝叶斯核函数还没有用到过。

<think>好的,我需要帮助用户了解如何绘制非线性核函数相关的上下边界,以及如何用编程实现可视化或者相关的数学方法。首先,我需要回忆一下支持向量机(SVM)中核函数的作用,特别是非线性核函数的情况。根据用户提供的引用,特别是引用[1]、[2]、[3],核函数将数据映射到高维空间,使得数据线性可分。例如,高斯核函数(RBF)通过将数据映射到无穷维空间来处理非线性问题。 接下来,用户想知道如何可视化上下边界。通常,在SVM中,决策边界是超平面在高维空间的投影,但在原始输入空间中可能呈现非线性。对于可视化,通常的做法是在二维空间中绘制决策边界和间隔边界。但如何将高维的边界投影到原始空间呢? 根据引用[5],多维空间可视化常使用降维方法,但这里可能需要另一种方法。在二维输入空间的情况下,可以通过网格采样和预测的方法来绘制边界。具体来说,生成网格点,对每个点使用训练好的SVM模型进行预测,得到决策值,然后根据决策值绘制等高线。 数学上,SVM的决策函数为$f(x) = \text{sign}(\sum_{i=1}^n \alpha_i y_i K(x_i, x) + b)$,其中$\alpha_i$是支持向量对应的拉格朗日乘子,$b$是偏置项。决策边界对应于$f(x)=0$,即$\sum \alpha_i y_i K(x_i, x) + b = 0$。上下边界(间隔边界)则对应于该表达式等于±1的情况,即$\sum \alpha_i y_i K(x_i, x) + b = \pm 1$。 因此,编程实现的步骤大致如下: 1. 训练一个非线性SVM模型,如使用高斯核。 2. 创建输入空间的网格点。 3. 对每个网格点计算决策函数的值和间隔值。 4. 使用等高线绘制函数画出决策边界(值=0)和间隔边界(值=±1)。 需要注意,不同核函数对应的边界形状不同,例如高斯核会产生非线性边界。在代码中,可以利用像matplotlib的contour或contourf函数来绘制等高线。此外,需要确保在计算网格点的预测值时正确应用核函数。 可能遇到的问题包括核函数参数的选择(如高斯核的σ),这会影响边界的平滑度。另外,支持向量的位置也会影响间隔的宽度。在可视化时,需要将支持向量也标注出来,以显示其对边界的影响。 总结来说,数学方法涉及SVM决策函数和间隔的表达式,编程实现则需要网格预测和等高线绘制。结合用户提供的引用,特别是引用[2]中的高斯核例子和引用[3]中的核函数类型,可以指导选择适当的核函数并实现可视化。</think>要可视化非线性核函数的上下边界,需结合支持向量机(SVM)的数学原理和编程实现。以下分步骤说明: ### 数学原理 对于非线性SVM,决策函数为: $$f(x) = \sum_{i=1}^n \alpha_i y_i K(x_i, x) + b$$ 其中: - $K(x_i,x)$是核函数(如高斯核$K(x,z)=exp(-\frac{||x-z||^2}{2\sigma^2})$) - 决策边界对应$f(x)=0$ - 间隔边界对应$f(x)= \pm 1$[^3] ### 编程实现(Python示例) ```python import numpy as np import matplotlib.pyplot as plt from sklearn import svm # 生成非线性数据 X = np.random.randn(200, 2) y = np.logical_xor(X[:,0]>0, X[:,1]>0).astype(int) # 训练SVM模型 clf = svm.SVC(kernel='rbf', gamma=1, C=1000) clf.fit(X, y) # 创建网格 xx, yy = np.meshgrid(np.linspace(-3,3,500), np.linspace(-3,3,500)) Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) # 绘制结果 plt.scatter(X[:,0], X[:,1], c=y, s=30, cmap=plt.cm.Paired) plt.contour(xx, yy, Z, levels=[-1,0,1], linestyles=['--','-','--'], colors='k') plt.scatter(clf.support_vectors_[:,0], clf.support_vectors_[:,1], s=100, facecolors='none', edgecolors='k') plt.show() ``` ### 关键说明 1. **颜色映射**:实线为决策边界(Z=0),虚线为间隔边界(Z=±1) 2. **支持向量**:空心圆点表示支持向量,决定边界位置 3. **核参数调节**:gamma参数控制高斯核的宽度(σ越小,边界越复杂) ### 效果示意图 ![非线性边界可视化](https://via.placeholder.com/600x400/EEE/000?text=SVM+Visualization) (说明:实际运行会显示非线性分类边界与间隔带)
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值