热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【机器学习】SVM和核函数

上了吴恩达教授在Coursera上的课程之后,在网上找到了他在斯坦福课程的资料CS229 。下面会结合这两个课程的资料,整理一篇笔记。

背景

从之前的逻辑回归的模型中,我们可以看到,如果一个样本越远离决策边界(Decision Boundary),那么我们就越能确保这个样本被正确分类。所以一个比较好的决策边界是尽量能让所有样本到决策边界的距离最大。从下图中可以看到,如果margin越大,我们对样本的正确分类就越有信心。
【机器学习】SVM和核函数
SVM就是一种能帮你得到margin最大的决策边界的算法。

SVM数学推导

在接下来的推导中,定义y(i){1,1}y^{(i)}\in\{-1,1\},而不是y{0,1}y\in\{0,1\}。首先定义函数间隔(functional margin) 为:
γ^(i)=y(i)(wTx(i)+b)\hat{\gamma}^{(i)}=y^{(i)}(w^{T}x^{(i)}+b)

如果y(i)=1y^{(i)}=1,那么我们希望wTx(i)+bw^{T}x^{(i)}+b能是一个很大的正数,相反,如果y(i)=1y^{(i)}=-1,那么wTx(i)+bw^{T}x^{(i)}+b需要是一个很小的负数,这样就能使得样本离决策边界越远,分类效果越好。因此,得到的functional margin γ^\hat{\gamma}越大,分类效果越好。
对于一个样本集S={(x(i),y(i));i=1,...n}S=\{(x^{(i)},y^{(i)});i=1,...n\},定义:
γ^=mini=1,...nγ^(i)\hat{\gamma}=\min_{i=1,...n}\hat{\gamma}^{(i)}

那么接下来讨论 几何间隔(geometric margin)
【机器学习】SVM和核函数
从上图中可以看到,向量ww一定是与超平面垂直的,我们取超平面上的任意两点x1,x2x_1,x_2x1,x2x_1,x_2满足wx1+b=0wx_1+b=0wx2+b=0wx_2+b=0,两式相减得到w(x1x2)=0w(x_1-x_2)=0。因为向量x1x2x_1-x_2肯定在超平面上,所以可以得到向量ww与这个超平面正交。
假设A为样本点,如何求A到超平面的几何间距γ(i)\gamma^{(i)}呢?假设点B是A到超平面的投影,那么向量B可以表示为x(i)γ(i)wwx^{(i)}-\gamma^{(i)}*\frac{w}{||w||}。而且由于B点位于决策边界上,所以:
wT(x(i)γ(i)ww)+b=0w^T(x^{(i)}-\gamma^{(i)}*\frac{w}{||w||})+b=0

得到γ(i)\gamma^{(i)}为:
γ(i)=(ww)Tx(i)+bw\gamma^{(i)}=(\frac{w}{||w||})^Tx^{(i)}+\frac{b}{||w||}

由于我们的样本是有正负之分的,综合正负样本可以得到:
γ(i)=y(i)((ww)Tx(i)+bw)\gamma^{(i)}=y^{(i)}((\frac{w}{||w||})^Tx^{(i)}+\frac{b}{||w||})

同时定义γ=mini=1,...nγ(i)\gamma=\min\limits_{i=1,...n}\gamma^{(i)}
从geometric margin的表达式可以看到,wwbb的缩放对γ\gamma的值没有影响,所以我们可以把要求的最优化问题写成:
maxy,w,bγs.t.  y(i)(wTx(i)+b)γ,i=1,...,nw=1\max_{y,w,b}\gamma\\ s.t.\space \space y^{(i)}(w^{T}x^{(i)}+b)\ge\gamma, i=1,...,n\\ ||w||=1
但这个问题并不是一个直接可解的优化问题。我们首先用functional matrix来代替geometric matrix:
maxy,w,bγ^ws.t.  y(i)(wTx(i)+b)γ^,i=1,...,n\max_{y,w,b}\frac{\hat{\gamma}}{||w||}\\ s.t.\space \space y^{(i)}(w^{T}x^{(i)}+b)\ge\hat{\gamma}, i=1,...,n

为了剔除γ^\hat{\gamma}的影响,我们可以对wwbb进行缩放,使得γ^\hat{\gamma}为1.前面讨论过,对wwbb同时缩放,并不会影响geometric function的大小,也不会影响最终的结果。
因此,上述问题可以简化成:
minw,b 12w2s.t.  y(i)(wTx(i)+b)1,i=1,...,n\min_{w,b}\space \frac{1}{2}||w||^2\\ s.t. \space \space y^{(i)}(w^{T}x^{(i)}+b)\ge1, i=1,...,n

现在我们把这个问题转换成能用已知的优化问题求解的形式了。

正则化

为了解决某些离散点存在使得我们没办法保证functional margin永远都等于1,所以我们为上式加上一个补偿因子ξ\xi.
minw,b 12w2+Ci=1nξis.t.  y(i)(wTx(i)+b)1ξi, i=1,...,nξi0, i=1,...,n\min_{w,b}\space \frac{1}{2}||w||^2+C\sum_{i=1}^n\xi_i\\ s.t. \space \space y^{(i)}(w^{T}x^{(i)}+b)\ge1-\xi_i, \space i=1,...,n\\ \xi_i\ge0, \space i=1,...,n
其中 C是惩罚系数,即对误差的宽容度。C越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。

核函数

如果我们想要拟合一种比较复杂的情况,通常需要把样本映射到更高维,但如果样本量比较大的时候,模型就会变得很复杂,所以我们需要寻找一种新的表达方式。
对于给定的样本集(x(1),y1),(x(2),y2),...,(x(m),y(m))(x^{(1)},y^{1}),(x^{(2)},y^{2}),...,(x^{(m)},y^{(m)})
选取 l(1)=x(1),l(2)=x(2),...l(m)=x(m)l^{(1)}=x^{(1)},l^{(2)}=x^{(2)},...l^{(m)}=x^{(m)}
然后计算xxl(i)l^{(i)}之间的相似度,记作f(i)f^{(i)}
f(i)=similarity(x,l(i))f^{(i)}=similarity(x,l^{(i)})

其中f(0)=1f^{(0)}=1.
其中最常用的一种核函数就是高斯核函数。
高斯核函数计算相似度的公式为:
f(i)=similarity(x,l(i))=exp(xl(i)22σ2)f^{(i)}=similarity(x,l^{(i)})=exp(-\frac{||x-l^{(i)}||^2}{2\sigma^2})

原先的模型就变成了 h=g(θTf)h=g(\theta^Tf)
【机器学习】SVM和核函数
如果不用核函数,就是线性核,即h=g(θTx)h=g(\theta^Tx)
在用高斯核之前一定要先进行特征缩放。
【机器学习】SVM和核函数
当n很大,但m很小的时候,不建议用高斯核,因为样本量太少,不太好训练一个复杂的模型。
当n很小,但m很大时,也不建议用高斯核,因为高斯核算法训练地很慢。
只有当n比较小,m适中时,才推荐用高斯核。


推荐阅读
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • 本文详细解析了MySQL中常见的几种错误,并提供了具体的解决方法,帮助开发者快速定位和解决问题。 ... [详细]
  • 本文探讨了Python类型注解使用率低下的原因,主要归结于历史背景和投资回报率(ROI)的考量。文章不仅分析了类型注解的实际效用,还回顾了Python类型注解的发展历程。 ... [详细]
  • 本文探讨了如何利用RxJS库在AngularJS应用中实现对用户单击和拖动操作的精确区分,特别是在调整区域大小的场景下。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 本文详细介绍了如何使用C#实现不同类型的系统服务账户(如Windows服务、计划任务和IIS应用池)的密码重置方法。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • 基于SSM框架的在线考试系统:随机组卷功能详解
    本文深入探讨了基于SSM(Spring, Spring MVC, MyBatis)框架构建的在线考试系统中,随机组卷功能的设计与实现方法。 ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
  • 深入解析 C++ 中的 String 和 Vector
    本文详细介绍了 C++ 编程语言中 String 和 Vector 的使用方法及特性,旨在帮助开发者更好地理解和应用这两个重要的容器。 ... [详细]
  • 本文详细介绍了在Luat OS中如何实现C与Lua的混合编程,包括在C环境中运行Lua脚本、封装可被Lua调用的C语言库,以及C与Lua之间的数据交互方法。 ... [详细]
  • 本文探讨了使用普通生成函数和指数生成函数解决组合与排列问题的方法,特别是在处理特定路径计数问题时的应用。文章通过详细分析和代码实现,展示了如何高效地计算在给定条件下不相邻相同元素的排列数量。 ... [详细]
  • 在测试软件或进行系统维护时,有时会遇到电脑蓝屏的情况,即便使用了沙盒环境也无法完全避免。本文将详细介绍常见的蓝屏错误代码及其解决方案,帮助用户快速定位并解决问题。 ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
author-avatar
塑料调色cz
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有