上一节最后我们说到我们根据求得的,可求得,,然后求出决策函数,但是我们知道:


是的函数,我们也许不必把带入上式来求解,我们直接把上式带入决策函数可有:



假如我们已经求得最优的,在作出预测的时候,我们可以只进行输入数据x与训练样本的内积即可。在转化为对偶条件的时候,我们知道要满足KKT条件,KKT条件中有一个是:


其中:


由此可以知道,若,则有函数间隔必然等于1,也就是说,只有支持向量满足,而不是支持向量的样本点,必然有。故而在计算下式的时候,我们只需考虑支持向量,而是支持向量的样本点有很少,所以这样会降低计算复杂度。这种形式也为引入核函数做出铺垫。

Kernels

我们上次最后说明了,如果遇到线性不可分的情况,根据现有的分类函数,可能解决不了,比如,下图(来源:知乎)


上图中的红点服从,蓝点服从,很明显红蓝点是不可分的,但是通过映射,将其映射到三维空间后,便有:


映射到三维空间之后,红蓝点变得线性可分了。核函数作用其实就是通过一个映射,把低维线性不可分的样本点,映射到高维中,使之变得线性可分。

吴恩达老师说,“原始”的输入我们称之为问题的属性,当“原始”输入经过映射得到一个新的集合,而这个集合传递给学习算法,这样的一个新的集合称之为特征。SVM的输入就是特征而不是原始的输入属性。当低维线性不可分 的时候,我们把输入属性,映射到一个高维特征空间,并把映射后的特征作为新的输入,而新的决策函数,只是把原来的内积运算<x,z>简单替换为即可。而接下我们探讨这个核函数。

核函数定义为:


其中的为映射函数。

凭直觉来看,要求出,我们需要求出,然而要求代价是很大的,因为很难求得,另外当高维的维数很大的时候(这是很有可能的),我们的计算量也是很大的,这让我们很难承受,那么我们可不可以把的值在低维求出呢?

我们先看一个例子:

我们可以把上式写成如下的形式:


假如当N=3时,那么就是如下形式:


对于这个例子,我们在高维中计算的时间复杂度为,而在输入属性中计算,只需的时间,这样给了我们启发,对于高维中的内积,我们在低维中就可以解决。

对于kernel,我们有多项式kernel,Gaussian kernel等等,那么给定一个函数K,我们怎么知道他是不是有效的呢?也就是说对于所有的x,z是否存在一个映射,使得成立?

假如K是有效的,那么有,因此K一定是对称的。另外我们令表示向量的第k个坐标,对于任意向量z有:


这就说明了如果K是有效的,那么其对应的核矩阵就是半正定的。这是一个充分必要条件,也是Mercer定理。好了到此我们也说明了什么是核函数。下一节我们将继续上一节的话题,怎么样求解对偶问题的解。请看:

支持向量机(SVM)(四)----SMO

支持向量机SVM三----核函数及正则化的更多相关文章

  1. 正则化DropPath/drop_path用法示例(Python实现)

    DropPath 类似于Dropout,不同的是 Drop将深度学习模型中的多分支结构随机"失效",而Dropout是对神经元随机"失效"这篇文章主要给大家介绍了关于正则化DropPath/drop_path用法的相关资料,需要的朋友可以参考下

  2. 分类报告中少数类别的准确度、召回率和F1分数均为零

    我在使用SkLearn包中的SVM和MLP分类器时出错。使用zero_division参数控制此行为_warn_prf用于拆分数据集的代码SVM分类器代码MLP分类器代码两个分类器的错误相同

  3. 机器学习 – 为什么需要在机器学习问题中使用正则化?

    为什么在这种情况下我们更喜欢较小的重量?

  4. 机器学习 – TensorFlow – L2丢失的正则化,如何应用于所有权重,而不仅仅是最后一个?

    我有一个任务,涉及到使用L2丢失的一个隐藏的ReLU层向网络引入泛化。我不知道如何正确引入它,以便所有权重都受到惩罚,不仅仅是输出层的权重。代码网络没有泛化是在底部的帖子。引入L2的明显方法是用这样的代替损失计算:但在这种情况下,它将考虑到输出层权重的值。是否需要或引入惩罚的输出层将以某种方式保持隐藏的权重也在检查?hidden_weights,hidden_biases,out_weights和out_biases都是您正在创建的模型参数。您可以按如下所示对所有这些参数添加L2正则化:

  5. 正则化方法:L1和L2 regularization、数据集扩增、dropout

    有一个概念需要先说明,在机器学习算法中,我们常常将原始数据集分为三部分:trainingdata、validationdata,testingdata。因此,trainingdata的作用是计算梯度更新权重,validationdata如上所述,testingdata则给出一个accuracy以判断网络的好坏。避免过拟合的方法有很多:earlystopping、数据集扩增、正则化包括L1、L2,dropout。L1regularization在原始的代价函数后面加上一个L1正则化项,即所有权重w的绝对值的

  6. 吴恩达机器学习 - 逻辑回归的正则化

    题目链接:点击打开链接先贴笔记代码:costFunction.m:然后展示下不同λ画出的不同图案

  7. 深度学习中的拟合欠拟合、过拟合、正则化

    我们不论在逻辑回归,线性回归还是在神经网络中应用的都是线性函数。那么如果出现了欠拟合或者过拟合该怎么办呢。这里主要说一下L2正则的原理,看下图:这是我们加了正则化之后的成本函数,可以看我们后面加入了正则化λ的表达式来完善成本函数。而使得整个模型越来越接近于线性化,也就是从下图中的过拟合往欠拟合偏转。

  8. 机器学习中正则化项L1和L2的直观理解

    正则化机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般英文称作11-norm和22-norm,中文称作L1正则化和L2正则化,或者L1范数和L2范数。L1正则化和L2正则化可以看做是损失函数的惩罚项。L1和L2正则化的直观理解这部分内容将解释为什么L1正则化可以产生稀疏模型,以及为什么L2正则化可以防止过拟合。而正则化前面的系数αα,可以控制LL图形的大小。

  9. 机器学习 – TensorFlow – 将L2正则化和退出引入网络.有什么意义吗?

    如果是这样,怎么办?任何关于此事的参考将是有用的,我还没有找到任何信息.为了防止你有兴趣,我的代码为ANN与L2正则化在下面:好的,经过一些额外的努力,我设法解决它,并将L2和辍学引入我的网络,代码如下.在同一个网络中,我没有辍学略有改善.我仍然不确定是否真的很值得介绍他们两个,L2和辍学的努力,但至少它的作品,并略微提高了结果.

  10. 正则化方法:防止过拟合,提高泛化能力

    λ就是正则项系数,权衡正则项与C0项的比重。当然考虑到后面的导数项,w最终的值可能增大也可能减小。而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部