【吴恩达机器学习笔记】十、支持向量机

news2024/11/15 4:56:14

✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
📣专栏定位:为学习吴恩达机器学习视频的同学提供的随堂笔记。
📚专栏简介:在这个专栏,我将整理吴恩达机器学习视频的所有内容的笔记,方便大家参考学习。
💡专栏地址:https://blog.csdn.net/Newin2020/article/details/128125806
📝视频地址:吴恩达机器学习系列课程
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

十、支持向量机

1. 优化目标

在讲支持向量机之前,我们先从逻辑回归开始渡过到支持向量机。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RAbYvx0n-1670030133704)(吴恩达机器学习.assets/image-20211114165544715.png)]

上面图中粉红色的那条线就是支持向量机的曲线,和逻辑回归很相似,代价函数都分两个部分构成。

支持向量机(Support vector machine)- SVM

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kwyGNDN1-1670030133707)(吴恩达机器学习.assets/image-20211114170558702.png)]

支持向量机和逻辑回归不相同的主要在两个地方:

  • 支持向量机代价函数没有m,因为就算没有m对最终θ的结果都没有影响,上面图左下就举了个例子。
  • 逻辑回归的代价函数分两个部分,像上面一样我们分成A和B两部分,逻辑回归对于λ较为看重,因为它决定了A所占的权重。支持向量机没有λ,而是用另一种方式表示,拿C来代替,它会放在A上面,决定着B的权重。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tyeaRGgM-1670030133710)(吴恩达机器学习.assets/image-20211114171028391.png)]

支持向量机还有一个地方与逻辑回归不同的是,逻辑回归假设函数输出的是概率,而支持向量机假设函数输出的结果是直接预测了y是1还是0。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NoPf6KdB-1670030133713)(吴恩达机器学习.assets/image-20211114171232189.png)]

2. 直观上对大间隔的理解

来看看支持向量机代价函数肚饿图像,会发现:

  • 当y=1时,我们希望θTx ≥ 1才能得到z为0,而不是单纯的只需其≥0即可。
  • 当y=1时,我们希望θTx 小于等于 -1才能得到z为0,而不是单纯的只需其≤0即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BISjGKUw-1670030133715)(吴恩达机器学习.assets/image-20211114171710451.png)]

而这个-1到1的间隔,我们称为安全间隔,如果我们想要让代价函数第一部分的式子为0,那么就要满足上面y=1或y=0的要求。接下来我们来看看,支持向量机的决策边界会呈现什么效果。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6KjdVoPa-1670030133718)(吴恩达机器学习.assets/image-20211114173216990.png)]

图中黑色的那条线就是支持向量机分类的结果,可以看出它和绿色与紫色的划分线不同,它与样本之间有一定的间距,所以我们有时候也会称SVM为大间距分类器(Large margin classifier)

但是,如果我们将C设置的特别大的话,就会出下下面这种情况:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bhj4e1H2-1670030133721)(吴恩达机器学习.assets/image-20211114174002575.png)]

如上图紫色划分线,如果C太大,支持向量机对于异常值就会特别敏感,导致变化特别大,而如果C设置的很小,支持向量机对于异常值就会几乎忽略不计,就还会是我们上图的黑线那样。

3. 核函数

首先,我们来看一个复杂的非线性函数:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JjW2aQBB-1670030133723)(吴恩达机器学习.assets/image-20211114193540968.png)]

可以发现,这个函数中包含了一些复合的特征,那对于这种非常复杂的非线性边界,是否有更好的特征去代替这些f1、f2、f3等等呢。

核函数(Kernel)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lwTtbFMu-1670030133726)(吴恩达机器学习.assets/image-20211114194119497.png)]

假设我们通过给定一个x案例,并且选出三个标记(landmark),然后定义特征f为一个相似度函数,这里用到的函数就是高斯核函数(Gaussian kernels),是核函数中的一种。

接下来,我们来看看新特征内的具体计算。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ocX5xxjf-1670030133728)(吴恩达机器学习.assets/image-20211114194821688.png)]

可以发现,如果标记离给出的案例x点很近时,(xj-lj)2会几乎为0,那么e函数会接近于1,所以特征f就会接近于1;同样如果标记离给出的案例x点很远时,特征f就会接近于0,我们再来看一个具体的例子。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pRdM81PX-1670030133730)(吴恩达机器学习.assets/image-20211114195455661.png)]

上图中我们对σ的值进行了改变,σ是高斯核函数的参数,当σ越小时,可以发现当x离l越远时,下降的比σ原先下降的更快,同理当σ越大时,则下降的会更慢。

现在我们再将这些新的特征代替原来函数中的特征,可以得到下面这个例子:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kdbFTHXb-1670030133731)(吴恩达机器学习.assets/image-20211114200307787.png)]

我们可以假设θ的值并取一些x进行计算,发现靠近l(1)和l(2)时,y都被预测为1;远离l(1)和l(2)时,y都被预测为0,从而利用核函数得到一个非线性的决策边界。

大概解释完上面核函数的流程后,我们来看看核函数中的标记l是如何选择的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Eijz6pLe-1670030133734)(吴恩达机器学习.assets/image-20211114201342790.png)]

我们得到标记l的方式很简单,可以直接将训练集样本的位置作为标记的位置即可。

接下来,我们来看一下核函数的参数。

  • C(作用类似于正则化中的1/λ)

    • 如果C很大,则对应着低偏差,高方差即过拟合问题。
    • 如果C很小,则对应这高偏差,低方差即欠拟合问题。
  • σ2

    • 如果σ2很大,则对应着高偏差,低方差即欠拟合问题。
    • 如果σ2很小,则对应着低偏差,高方差即过拟合问题。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dO0EICgs-1670030133736)(吴恩达机器学习.assets/image-20211114203248108.png)]

最后,我们再来对支持向量机中的核函数使用过程进行一个小回顾。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LAEnm0Fo-1670030133737)(吴恩达机器学习.assets/image-20211114203204112.png)]

4. 使用SVM

这节课我们来讨论一下,使用SVM时的一些注意事项。

首先,第一个建议是不要尝试去写一些已经有人写好的数据包,直接去调用即可(例如liblinear,libsvm等)。

其次,你要注意的是,有两个地方是需要你人为完成的:

  • 选择一个参数C。
  • 选择一个核函数(相似函数)。
    • 可以是线性的核函数即不使用核函数,这种一般是在特征很多,训练集很少容易过拟合的情况下使用。
    • 可以是高斯核函数,这种一般是在特征很少,训练集比较多的情况下使用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6uQjkDFd-1670030133738)(吴恩达机器学习.assets/image-20211114204504350.png)]

如果你选择了高斯核函数,那么在训练时若你的x特征之间差别特别大,需要进行等比例缩放。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Lbkr2Hj-1670030133739)(吴恩达机器学习.assets/image-20211114205211016.png)]

除上述的两个函数之外,还有其他的核函数,但有效的核函数都要满足默塞尔定理(Mercer’s Theorem),即确保所有的SVM软件包能够利用大类的优化方法并从而迅速得到参数θ。

  • 多项式核函数
    • 通过改变参数增加一些参数来调整效果,并且x和l一般是非负的以保证内积大于0,如下图中的一些例子。
  • 其他复杂函数
    • 字符串核函数(String kernel),卡方核函数(chi-square kernel),直方相交核函数(histogram intersection kernel)等等。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-joJyDfMy-1670030133741)(吴恩达机器学习.assets/image-20211114210327222.png)]

再者,我们来讨论讨论SVM一对多的分类情况,这与逻辑回归中的一对多的方法一样,都是分别训练各个类别的分类器,预测时选取分类器得分最高的即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wRLKVd2C-1670030133742)(吴恩达机器学习.assets/image-20211114224023044.png)]

最后,我们来讨论一下逻辑回归和支持向量机何时使用较好。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CRb3WfsK-1670030133743)(吴恩达机器学习.assets/image-20211114224734634.png)]

  • 如果特征比训练集多很多,则一般用逻辑回归或不带核函数的SVM。
  • 如果特征很少,训练集数量适中,则一般用高斯核函数。
  • 如果特征很少且训练集数量很大很大,则一般用逻辑回归或不带核函数的SVM。

神经网络不管对应哪个情形效果都不错,但是缺点是训练速度会比较慢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/57040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

神经气体网络(NGN)和不断增长的神经气体网络(GNGN)研究(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

[附源码]计算机毕业设计springboot影评网站系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Python案例实战,gopup模块,Python3行代码就能获取海量数据

前言 今天给大家分享一个三行代码就能获取海量数据 包含了有指数数据、宏观经济数据、新经济数据、微博KOL数据、信息数据、生活数据、疫情数据等。 开发工具 Python版本: 3.6.4 相关模块: gopup模块 环境搭建 安装Python并添加到环境变量&#…

Linux权限管理(umask、粘滞位)

目录 Linux权限管理 文件访问权限的相关设置方法 目录的权限 umask 粘滞位 Linux下有两种用户:超级用户(root)、普通用户。 超级用户:可以再linux系统下做任何事情,不受限制 普通用户:在linux下做有限…

闲鱼话术,必须收藏

今天分享:闲鱼卖货,常用的客服话术。建议收藏 很多学员,货也上了,有人咨询的时候忽然手忙脚乱,懵啊,怎么感觉没人问期待有人问,有人问,自己啥也说不出来了呢?哈哈,不知…

【BOOST C++ 19 应用库】(6)序列数据封装和优化

一、说明 用于优化的包装函数&#xff1a;本节介绍包装函数以优化序列化过程。这些函数标记对象以允许 Boost.Serialization 应用某些优化技术。 二、示范和代码 示例 64.14。在没有包装函数的情况下序列化数组 #include <boost/archive/text_oarchive.hpp> #include &…

[附源码]计算机毕业设计springboot医院门诊管理信息系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

SpringBoot中使用MySQL存用户信息, 日志的使用

SpringBoot中使用MySQL存用户信息 UserController类 package com.tedu.secboot.controller; import com.tarena.mnmp.api.SendParam; import com.tedu.secboot.entity.User; import com.tedu.secboot.util.DBUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory;…

flink教程(2)-source- sink

一、flink可识别的source分类 Sources are where your program reads its input from. You can attach a source to your program by using StreamExecutionEnvironment.addSource(sourceFunction). Flink comes with a number of pre-implemented source functions, but you c…

[附源码]计算机毕业设计游戏商城平台论文Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]计算机毕业设计springboot线上评分分享平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【Android App】人脸识别中OpenCV根据人脸估算性别和年龄实战(附源码和演示 超详细)

需要源码请点赞关注收藏后评论区留言私信~~~ 人脸蕴含的信息量巨大&#xff0c;不管是青春还是年少&#xff0c;还是老年沧桑&#xff0c;都能体现出来&#xff0c;不过从人脸估算年龄估算年龄全凭经验&#xff0c;毕竟计算机无法根据固定框架判断年龄&#xff0c;那么计算机的…

ZYNQ之FPGA学习----IIC协议驱动模块仿真实验

1 IIC通信协议简介 IIC通信协议基础知识学习&#xff1a;硬件设计基础----通信协议IIC 2 实验任务 设计IIC驱动模块&#xff0c;并进行仿真验证&#xff0c;观察仿真波形 3 实验设计 3.1 创建工程 新建工程&#xff0c;操作如图所示&#xff1a; 输入工程名和路径&#x…

C++I/O流详解

目录 一&#xff0c;引入 二&#xff0c;C中的输入输出 1&#xff0c;输入输出流分类 2&#xff0c;I/O流类的安全性和可扩展性 (1)I/O流类的安全性 (2)I/O流类的扩展性 三&#xff0c;流类库简介 1&#xff0c;I/O流类库 2&#xff0c;缓冲区类 四&#xff0c;标准输…

python入门基础

1 变量和简单数据类型 变量命名格式&#xff1a;变量名 “赋值” 1.1 变量使用规范 使用变量时&#xff0c;需要遵守一些规则。违反这些规则将引发错误。 ~变量名只能包含数字、字母、下划线。变量名不能以数字开头以及不能包含空格。 ~变量名不能将Python保留字和函数名…

SpringColud——Eureka注册中心

目录 1、SpringColud概述 1.1、什么是微服务 1.2、什么是SpringColud&#xff1f; 1.3、SpringColud的特点 2、SpringColud环境准备 2.1、创建父工程 2.2、修改pom.xml文件 2.3、服务提供者——创建子工程 2.4、编写启动类 2.5、编写User类 2.6、编写UserMapper接口…

永磁同步电机恒压频比(V/F)开环控制系统Matlab/Simulink仿真分析及代码生成到工程实现

文章目录前言一、 恒压频比&#xff08;V/F&#xff09;控制原理二、永磁同步电机恒压频比开环控制系统Matlab/Simulink仿真分析2.1.仿真电路分析2.1.1.恒压频比控制算法2.1.2.输出处理2.1.3.主电路2.2.仿真结果分析2.2.1.设定目标转速为1200r/min2.2.1.设定目标转速为变化值三…

消息中间件ActiveMQ入门概述

目录 举一反三 思考 背景 消息中间件的作用 MQ的定义 MQ的特点 MQ的缺点 消息中间件已经成为互联网企业应用系统内部通信的核心手段&#xff0c;是目前企业内主流标配技术&#xff0c; 它具有解耦、异步、削峰、签收、事务、流量控制、最终一致性等一系列高性能架构所需…

并发编程详解: 十三个工具类, 十大设计模式, 从理论基础到案例实战

前言 对于 Java 程序员而言&#xff0c;熟练掌握并发编程是判断其卓越性的重要标准之一。因为并发编程是 Java 语言中最晦涩的知识点&#xff0c;它涉及操作系统&#xff0c;内存&#xff0c;CPU&#xff0c;编程语言等的基本功&#xff0c;并且还测试了程序员的内功。 那么如…

【Android App】人脸识别中借助摄像头和OpenCV实时检测人脸讲解及实战(附源码和演示 超详细)

需要全部代码请点赞关注收藏后评论区留言私信~~~ 一、借助摄像头实时检测人脸 与Android自带的人脸检测器相比&#xff0c;OpenCV具备更强劲的人脸识别功能&#xff0c;它可以通过摄像头实时检测人脸&#xff0c;实时检测的预览空间是JavaCameraView 常用方法说明如下 setCvC…