zoukankan      html  css  js  c++  java
  • 核方法-核技巧-核函数

    问题的引入

    对于线性可分或者线性近似可分的数据集, 线性支持向量机可以很好的划分,如图左。但是,对于图右的数据集呢?很显然, 这个数据集是没有办法用直线分开的。

    我们的想法是在低维空间中不能线性分割的点集,通过转化为高维空间中的点集时,很有可能变为线性可分的
    插个题外话:看过《三体》的小伙伴们都知道,故事中的主人公进入到四维空间,发现“视野变得十分的开阔”, 进入四维的人,可以直接将三维中的人的内脏取出来,三体中女巫不是靠魔法取出大脑的,而是进入了四维空间, 将活人的大脑取出来了。在三维里面,内脏不还隔着肚皮嘛!但是进入到四维之后,可以做很多三维中看似不可能的事情。所以, 让我们到高维度空间去玩玩吧!
    简单的例子, 我们引入了一个映射, 将二维空间映射到三维空间,这样, 看似难以分开的数据集,到高维度里面,只需要简单的一个平面。如下图所示。

    核方法

    定义: 在低维空间中不能线性分割的点集,通过转化为高维空间中的点集时,从而变为线性可分的,这就是核方法。

    现在有二维的空间,我们知道,二维中任意的曲线可以表示成:

    构造一个映射, 得到五维的空间
    我们只取三个维度, 将二维的数据映射到三维中去,得到下图:

    这里有一个视频,很好的演示了一个例子核方法例子
    通过上面的描述, 好像我们通过一个映射, 将数据集映射到新的空间就能解决所有问题了,但是,这个时候会出现维度灾难,刚刚我们只用到了二维的空间,就需要映射到五维的空间, 经过计算,三维就需要映射到十九维了!这个数字真的是指数爆炸,怎么解决这个问题呢, 我们就要用到核技巧啦。

    核技巧

    这里用一个简单的例子来说明
    设有两个向量
    映射定义为:
    两个向量的映射为:

    两个向量经过映射后的內积为:

    前方高能, 我们也可以有:

    上面的两个式子是相似的, 实际上,经过维度缩放再加上常数维度就可以得到同样的效果。区别在哪里呢?
    第一个是, 先通过映射将数据集映射到高维空间,再计算內积
    第二个是, 直接低维空间计算內积,而不需要显式的定义映射
    于是我们自然的可以定义核函数

    核函数

    怎么判断呢?换句话来说,怎么判断我们选的这个核函数有效呢?

    核函数的判定:

    .

    具体的证明过程比较复杂, 可以参考《统计学习方法》和核函数判断证明
    下面介绍SVM中常用的核函数:

    • 线性核

      线性核,主要用于线性可分的情况,我们可以看到特征空间到输入空间的维度是一样的,其参数少速度快,对于线性可分数据,其分类效果很理想,因此我们通常首先尝试用线性核函数来做分类,看看效果如何,如果不行再换别的

    • 高斯(RBF)核

      多项式核函数可以实现将低维的输入空间映射到高纬的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。如果选得很大的话,高次特征上的权重实际上衰减得非常快,所以实际上(数值上近似一下)相当于一个低维的子空间;反过来,如果选得很小,则可以将任意的数据映射为线性可分——当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题。不过,总的来说,通过调控参数,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。下图所示的例子便是把低维线性不可分的数据通过高斯核函数映射到了高维空间:

    • 多项式核

    多项式核函数可以实现将低维的输入空间映射到高纬的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。

    • sigmoid核

    采用sigmoid核函数,支持向量机实现的就是只包含一个隐层,激活函数为 Sigmoid 函数的神经网络。应用SVM方法,隐含层节点数目(它确定神经网络的结构)、隐含层节点对输入节点的权值都是在设计(训练)的过程中自动确定的。而且支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部最小值,也保证了它对于未知样本的良好泛化能力而不会出现过学习现象。
    如图, 输入层->隐藏层之间的权重是每个支撑向量,隐藏层的计算结果是支撑向量和输入向量的内积,隐藏层->输出层之间的权重是支撑向量对应的

    因此,在选用核函数的时候,如果我们对我们的数据有一定的先验知识,就利用先验来选择符合数据分布的核函数;如果不知道的话,通常使用交叉验证的方法,来试用不同的核函数,误差最下的即为效果最好的核函数,或者也可以将多个核函数结合起来,形成混合核函数。在吴恩达的课上,也曾经给出过一系列的选择核函数的方法:

    • 如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM;
    • 如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数;
    • 如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。

    详情参考:SVM几种核优缺点比较

  • 相关阅读:
    LeetCode: LRU Cache
    LeetCode: Reorder List
    LeetCode: Linked List Cycle I && II
    LeetCode: Word Break I && II
    LeetCode: Single Number I && II
    太坑了,mybatis注解一对多,id没了
    ajax请求参数的格式
    查询结果拼接
    id拼接保存到单个字段后作为表连接的查询条件
    seam的定时轮巡
  • 原文地址:https://www.cnblogs.com/hichens/p/11874645.html
Copyright © 2011-2022 走看看