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

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

 

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


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

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

 

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

比如说最经典的PCA算法,这部分内容其实是对前一篇帖子的回顾(http://blog.csdn.net/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

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

  • 54
    点赞
  • 237
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
### 回答1: 也许Monad是一种特定的态射,它可以将一个函数(可能是不纯的)映射到一个可能包含一个值或一个空值(Maybe)的可能性。它可以让我们处理函数的可能性,而不是像其他函数一样处理其结果。也就是说,它使我们能够从一个可能存在的值中获取有用的信息,而不是必须处理它的结果或错误。 ### 回答2: Maybe Monad 是一种用于处理可能存在空值的情况的特殊 Monad。在函数式编程中,我们经常会遇到某些函数可能返回 null 或者 undefined 的情况,这可能会导致一些异常或者错误。而 Maybe Monad 就可以帮助我们处理这种情况,使得代码更加健壮和安全。 Maybe Monad 具有两种可能的值:Just 和 Nothing。Just 表示存在一个具体的值,而 Nothing 表示空值。我们可以将带有可能为空值的函数包装进 Maybe Monad 中,通过一系列的操作来确保函数的返回值总是有意义的。 Maybe Monad 可以将不纯的函数转换成一种特殊的映射,这种映射可以连续地处理可能为空值的情况。它提供了一些方法,比如 map、flatMap 和 filter,用于对 Maybe Monad 中的值进行处理。 使用 map 方法,我们可以对 Maybe Monad 中的值进行转换操作。如果 Maybe Monad 是 Just,那么 map 方法会将这个值传递给函数并将返回值包装为新的 Just,否则将返回 Nothing。 使用 flatMap 方法,我们可以进行链式操作。它接受一个函数作为参数,这个函数返回一个新的 Maybe Monad。如果当前 Maybe Monad 是 Just,则将其值传递给函数并返回新的 Maybe Monad,否则直接返回 Nothing。 使用 filter 方法,我们可以对 Maybe Monad 中的值进行条件过滤。如果 Maybe Monad 是 Just 并且满足条件,则返回原始 Maybe Monad,否则返回 Nothing。 通过利用这些方法,我们可以在处理可能为空值的函数时更加灵活。Maybe Monad 的工作原理就是通过这些操作来确保不纯的函数总是可以正常处理为空值的情况,从而避免潜在的错误和异常。 ### 回答3: Maybe Monad是一种用来处理可能存在空值或错误情况的编程模式。它将不纯的函数转换为一种特殊类型的映射,该映射可以处理空值情况。 在Maybe Monad中,我们有两种可能的结果:Just值和Nothing。Just表示有一个非空的值,而Nothing表示无值或空值。 Maybe Monad的工作方式如下:当我们在Maybe Monad中执行一个函数时,首先会检查输入值是否为Nothing。如果输入是Nothing,则函数不会执行任何操作,而是直接返回Nothing。这种处理方式允许我们在遇到空值时,避免出现错误或异常。 如果输入值是Just值,函数将会被执行且返回一个新的Maybe值。这个新的Maybe值可以是Just值,也可以是Nothing。如果函数执行过程中遇到错误,它会返回Nothing;如果没有错误,它会返回一个新的Just值。 使用Maybe Monad的好处是,它能够简化我们在处理可能存在空值的情况下的编程逻辑。它将错误处理与心逻辑分离,使代码更加清晰和易于理解。 总结起来,Maybe Monad通过将不纯的函数转换为具有特殊处理空值能力的映射,来处理可能存在空值或错误情况。它提供了一种简单且可靠的方式来处理空值,使得代码更加健壮和鲁棒。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值