吴恩达机器学习笔记:第 7 周-12支持向量机(Support Vector Machines)12.4-12.6

目录

  • 第 7 周 12、 支持向量机(Support Vector Machines)
    • 12.4 核函数 1
    • 12.5 核函数 2
    • 12.6 使用支持向量机

第 7 周 12、 支持向量机(Support Vector Machines)

12.4 核函数 1

回顾我们之前讨论过可以使用高级数的多项式模型来解决无法用直线进行分隔的分类
问题:
在这里插入图片描述
为了获得上图所示的判定边界,我们的模型可能是 θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 x 2 + θ 4 x 1 2 + θ 5 x 2 2 + ⋯ θ_0 + θ_1x_1 + θ_2x_2 + θ_3x_1x_2 + θ_4x_1^2 +θ_5x_2^2 + ⋯ θ0+θ1x1+θ2x2+θ3x1x2+θ4x12+θ5x22+的形式。

我们可以用一系列的新的特征 f 来替换模型中的每一项。例如令: f 1 = x 1 , f 2 = x 2 , f 3 = x 1 x 2 , f 4 = x 1 2 , f 5 = x 2 2 . . . f_1 = x_1, f_2 = x_2, f_3 =x_1x_2, f_4 = x_1^2, f_5 = x_2^2... f1=x1,f2=x2,f3=x1x2,f4=x12,f5=x22...得到ℎ𝜃(𝑥) = θ 1 f 1 + θ 2 f 2 + . . . + θ n f n θ_1f_1 + θ_2f_2+. . . +θ_nf_n θ1f1+θ2f2+...+θnfn。然而,除了对原有的特征进行组合以外,有没有更好的方法来构造𝑓1, 𝑓2, 𝑓3?我们可以利用核函数来计算出新的特征。

给定一个训练实例 𝑥 ,我们利用 𝑥 的各个特征与我们预先选定的地标(landmarks) l ( 1 ) , l ( 2 ) , l ( 3 ) l^{(1)}, l^{(2)}, l^{(3)} l(1),l(2),l(3)的近似程度来选取新的特征 f 1 , f 2 , f 3 f_1, f_2, f_3 f1,f2,f3

在这里插入图片描述
上例中的𝑠𝑖𝑚𝑖𝑙𝑎𝑟𝑖𝑡𝑦( x , l ( 1 ) x, l^{(1)} x,l(1))就是核函数,具体而言,这里是一个高斯核函数(Gaussian Kernel)。注:这个函数与正态分布没什么实际上的关系,只是看上去像而已。

这些地标的作用是什么?如果一个训练实例𝑥与地标𝐿之间的距离近似于 0,则新特征 f 近似于 e − 0 = 1 e^{−0}= 1 e0=1,如果训练实例𝑥与地标𝐿之间距离较远,则𝑓近似于 e − ( 一个较大的数 ) e^{−(一个较大的数) } e(一个较大的数)= 0。
假设我们的训练实例含有两个特征[ x 1 x 2 x_1 x_2 x1x2],给定地标 l ( 1 ) l^{(1)} l(1)与不同的𝜎值,见下图:

在这里插入图片描述
图中水平面的坐标为 x 1 , x 2 x_1,x_2 x1x2而垂直坐标轴代表𝑓。可以看出,只有当𝑥与 l ( 1 ) l^{(1)} l(1)重合时f才具有最大值。随着𝑥的改变𝑓值改变的速率受到 σ 2 σ^2 σ2的控制。

在下图中,当实例处于洋红色的点位置处,因为其离 l ( 1 ) l^{(1)} l(1)更近,但是离 l ( 2 ) l^{(2)} l(2) l ( 3 ) l^{(3)} l(3)较远,因此 f 1 f_1 f1接近 1,而 f 2 , f 3 f_2,f_3 f2,f3接近 0。因此ℎ𝜃(𝑥) = θ_0 + θ_1f_1 + θ_2f_2 +θ_3f_3 > 0,因此预测𝑦 = 1。同理可以求出,对于离l^{(2)}$较近的绿色点,也预测𝑦 = 1,但是对于蓝绿色的点,因为其离三个地标都较远,预测𝑦 = 0。
在这里插入图片描述

这样,图中红色的封闭曲线所表示的范围,便是我们依据一个单一的训练实例和我们选取的地标所得出的判定边界,在预测时,我们采用的特征不是训练实例本身的特征,而是通过核函数计算出的新特征 f 1 , f 2 , f 3 f_1, f_2, f_3 f1,f2,f3

12.5 核函数 2

在上一节视频里,我们讨论了核函数这个想法,以及怎样利用它去实现支持向量机的一些新特性。在这一节视频中,我将补充一些缺失的细节,并简单的介绍一下怎么在实际中使用应用这些想法。

如何选择地标?
我们通常是根据训练集的数量选择地标的数量,即如果训练集中有𝑚个实例,则我们选取𝑚个地标,并且令: l ( 1 ) = x ( 1 ) , l ( 2 ) = x ( 2 ) , . . . . . , l ( m ) = x ( 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)。这样做的好处在于:现在我们得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上的,即:

在这里插入图片描述
下面我们将核函数运用到支持向量机中,修改我们的支持向量机假设为:

• 给定𝑥,计算新特征𝑓,当 θ T f θ^Tf θTf>= 0 时,预测 y = 1,否则反之。相应地修改代价函数为:
∑ j = 1 n = m θ j 2 = θ T θ \sum_{j=1}^{n=m}{θ_j^2=θ^Tθ} j=1n=mθj2=θTθ
m i n C ∑ i = 1 m [ y ( i ) c o s t 1 ( θ T f ( i ) ) + ( 1 − y ( i ) ) c o s t 0 ( θ T f ( i ) ) ] + 1 2 ∑ j = 1 n = m θ j 2 minC \sum_{i=1}^m{[y^{(i)}cost_1(θ^Tf ^{(i)}) + (1 − y^{(i)})cost_0(θ^Tf ^{(i)})]} + \frac{1}{2}\sum_{j=1}^{n=m}{θ_j^2} minCi=1m[y(i)cost1(θTf(i))+(1y(i))cost0(θTf(i))]+21j=1n=mθj2
在具体实施过程中我们还需要对最后的正则化项进行些微调整,在计算 ∑ j = 1 n = m θ j 2 = θ T θ \sum_{j=1}^{n=m}{θ_j^2=θ^Tθ} j=1n=mθj2=θTθ时,我们用 θ T M θ θ^TMθ θT代替 θ T θ θ^Tθ θTθ,其中𝑀是根据我们选择的核函数而不同的一个矩阵。这样做的原因是为了简化计算。

理论上讲,我们也可以在逻辑回归中使用核函数,但是上面使用 𝑀来简化计算的方法不适用与逻辑回归,因此计算将非常耗费时间。

在此,我们不介绍最小化支持向量机的代价函数的方法,你可以使用现有的软件包(如liblinear,libsvm 等)。在使用这些软件包最小化我们的代价函数之前,我们通常需要编写核函数,并且如果我们使用高斯核函数,那么在使用之前进行特征缩放是非常必要的。

另外,支持向量机也可以不使用核函数,不使用核函数又称为线性核函数(linear kernel),当我们不采用非常复杂的函数,或者我们的训练集特征非常多而实例非常少的时候,可以采用这种不带核函数的支持向量机。

下面是支持向量机的两个参数𝐶和𝜎的影响:
𝐶 = 1/𝜆
𝐶 较大时,相当于𝜆较小,可能会导致过拟合,高方差;
𝐶 较小时,相当于𝜆较大,可能会导致低拟合,高偏差;
𝜎较大时,可能会导致低方差,高偏差;
𝜎较小时,可能会导致低偏差,高方差。

如果你看了本周的编程作业,你就能亲自实现这些想法,并亲眼看到这些效果。这就是利用核函数的支持向量机算法,希望这些关于偏差和方差的讨论,能给你一些对于算法结果预期的直观印象。

12.6 使用支持向量机

目前为止,我们已经讨论了 SVM 比较抽象的层面,在这个视频中我将要讨论到为了运行或者运用 SVM。后强烈建议使用高优化软件库中的一个,而不是尝试自己落实一些数据。有许多好的软件库,我正好用得最多的两个是 liblinear 和 libsvm,但是真的有很多软件库可以用来做这件事儿。你可以连接许多你可能会用来编写学习算法的主要编程语言。

在高斯核函数之外我们还有其他一些选择,如:
多项式核函数(Polynomial Kernel)
字符串核函数(String kernel)
卡方核函数( chi-square kernel)
直方图交集核函数(histogram intersection kernel)
等等…

这些核函数的目标也都是根据训练集和地标之间的距离来构建新特征,这些核函数需要满足 Mercer’s 定理,才能被支持向量机的优化软件正确处理。

多类分类问题
假设我们利用之前介绍的一对多方法来解决一个多类分类问题。如果一共有𝑘个类,则我们需要𝑘个模型,以及𝑘个参数向量𝜃。我们同样也可以训练𝑘个支持向量机来解决多类分类问题。但是大多数支持向量机软件包都有内置的多类分类功能,我们只要直接使用即可。

尽管你不去写你自己的 SVM 的优化软件,但是你也需要做几件事:
1、是提出参数𝐶的选择。我们在之前的视频中讨论过误差/方差在这方面的性质。
2、你也需要选择内核参数或你想要使用的相似函数,其中一个选择是:我们选择不需要任何内核参数,没有内核参数的理念,也叫线性核函数。因此,如果有人说他使用了线性核的 SVM(支持向量机),这就意味这他使用了不带有核函数的 SVM(支持向量机)。

从逻辑回归模型,我们得到了支持向量机模型,在两者之间,我们应该如何选择呢?

下面是一些普遍使用的准则:
𝑛为特征数,𝑚为训练样本数。
(1)如果相较于𝑚而言,𝑛要大许多,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机。
(2)如果𝑛较小,而且𝑚大小中等,例如𝑛在 1-1000 之间,而𝑚在 10-10000 之间,使用高斯核函数的支持向量机。
(3)如果𝑛较小,而𝑚较大,例如𝑛在 1-1000 之间,而𝑚大于 50000,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机。

值得一提的是,神经网络在以上三种情况下都可能会有较好的表现,但是训练神经网络可能非常慢,选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值。

当你有非常非常大的训练集,且用高斯核函数是在这种情况下,我经常会做的是尝试手动地创建,拥有更多的特征变量,然后用逻辑回归或者不带核函数的支持向量机。逻辑回归和不带核函数的支持向量机它们都是非常相似的算法,不管是逻辑回归还是不带核函数的 SVM,通常都会做相似的事情,并给出相似的结果。但是根据你实现的情况,其中一个可能会比另一个更加有效。但是在其中一个算法应用的地方,逻辑回归或不带核函数的SVM 另一个也很有可能很有效。

最后,神经网络使用于什么时候呢? 有一个缺点是,或者说是有时可能不会使用神经网络的原因是:对于许多这样的问题,神经网络训练起来可能会特别慢,但是如果你有一个非常好的 SVM 实现包,它可能会运行得比较快比神经网络快很多,尽管我们在此之前没有展示,但是事实证明,SVM 具有的优化问题,是一种凸优化问题。因此,好的 SVM优化软件包总是会找到全局最小值,或者接近它的值。在实际应用中,局部最优不是神经网络所需要解决的一个重大问题,所以这是你在使用 SVM的时候不需要太去担心的一个问题。通常更加重要的是:你有多少数据,你有多熟练是否擅长做误差分析和排除学习算法,指出如何设定新的特征变量和找出其他能决定你学习算法的变量等方面,通常这些方面会比你使用逻辑回归还是 SVM 这方面更加重要。SVM 仍然被广泛认为是一种最强大的学习算法,这是一个体系,包含了
什么时候一个有效的方法去学习复杂的非线性函数。因此,实际上与逻辑回归、神经网络、SVM 一起使用这些方法来提高学习算法,我认为你会很好地建立很有技术的状态。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Octopus+: An RDMA-Enabled Distributed Persistent Memory File System——泛读笔记

TOS 2021 Paper 分布式元数据论文阅读笔记整理 问题 非易失性存储器(NVM)和远程直接存储器访问(RDMA)在存储和网络硬件中提供了极高的性能。然而,现有的分布式文件系统隔离了文件系统和网络层,而且分层的…

【C++】C++11右值引用

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.什么是左值&&…

使用名称空间共享集群

📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。 📘相关专栏Rust初阶教程、go语言基础系列、spring教程等,大家有兴趣的可以看一看 📙Jav…

【五十一】【算法分析与设计】KMP 算法,KMP 算法的作用,KMP 算法流程,KMP 算法证明,KMP 算法代码

目录 KMP 算法的作用,解决的问题 KMP 算法的流程 Next 数组 KMP 算法正式过程 KMP 算法的证明过程 Next 数组的求法 Next 数组求法的证明过程 KMP 算法代码 结尾 KMP 算法的作用,解决的问题 1. 首先给你一个字符串 str,然后又给你…

mPEG-Succinimidyl Carboxyl Methyl ester,135649-01-3可以制备出多种生物成像试剂

【试剂详情】 英文名称 mPEG-SCM,Methoxy PEG SCM, mPEG-Succinimidyl Carboxyl Methyl ester 中文名称 聚乙二醇单甲醚琥珀酰亚胺乙酸酯, 甲氧基-聚乙二醇-琥珀酰亚胺乙酸酯 CAS号 135649-01-3 外观性状 由分子量决定,液体…

交流电220V转9V直流电芯片WT5105

交流电220V转9V直流电芯片WT5105 WT5105设计一个电路。电路的输入端连接到220V交流电,通过一个整流桥进行整流,将交流电转换为脉冲直流电。然后,经过电容滤波后,得到较为平滑的直流电。这个直流电进入WT5105的输入端。 在WT5105的…

揭秘1688选品高阶玩法,90%的人都没注意到(下篇)

店雷达继续为各位商家揭秘1688选品7大高阶玩法,错过前4个选品场景思路干货的商友们可以点击上篇查看哦。希望帮助各位找到符合自己选品方向,提供一些新的思路帮助。☛《揭秘1688选品高阶玩法,90%的人都没注意到(上篇)》…

2W 6KVDC 隔离双输出 DC/DC 电源模块——TPJ-2W 系列,可以用于医疗仪器和设备中

TPJ-2W一款有超高隔离电压的电源模块,主要用于隔离度要求高的如医疗仪器和设备,特别在安全设备的应用中起着相当重要的作用,它的绝缘设计完全能满足对隔离电压要求超过6KVDC的应用,在额定负载2W的情况下,工作温度范围为…

鸿蒙原生应用元服务-访问控制(权限)开发场景与权限声明

一、场景介绍 应用的APL(Ability Privilege Level)等级分为normal、system_basic和system_core三个等级,默认情况下,应用的APL等级都为normal等级。权限类型分为system_grant和user_grant两种类型。 二、配置文件权限声明 应用需要…

基于springboot+vue花店商场管理系统

项目介绍: 基于springbootvue花店商场管理系统 开发系统:Windows 架构模式:MVC/前后端分离 JDK版本:Java JDK1.8 开发工具:IDEA 数据库版本: mysql8.0 数据库可视化工具: navicat 服务器&#…

腾讯EdgeOne产品测评体验—更快更强更安全,安全我选EdgeOne

腾讯EdgeOne产品测评体验—更快更强更安全,安全我选EdgeOne 王婆的瓜可甜? 自 23 年 8 月份 EdgeOne 开放订阅套餐后,腾讯云用户使用 EdgeOne 来为自己网站进行加速和防护的站点数量,呈现爆发式增长趋势。 金融服务业受到的 Web…

固体矿产资源储量分类GBT17766-2020

1999分类标准采用三轴体系划分资源量与处理,表达复杂、经济意义划分过细、实用性不强 虽然不再采用”三轴“表达方式,但依然考虑地质可靠程度、经济意义、可行性评价 矿产资源勘查:通常依靠地球科学知识,运用地质填图&#xff0…

分享4款免费ai绘画工具!

随着人工智能技术的飞速发展,AI绘画工具已经逐渐走入了我们的日常生活。这些工具不仅能够简化绘画过程,更能让普通人体验到艺术创作的乐趣。今天,我们就来盘点一下那些值得一试的免费AI绘画工具,看看它们如何让我们的创作欲望得到…

ABAP - LRAW类型转换为Xstring再转换为String

比如我想取出表SWWCNTP0里的DATA字段里的值: 那么可以用已有的含有LRAW字段的结构去放要取的数据:比如下面代码里的lt_data就是type table of 这个结构 取出来的数据,放到一个只含有LRAW的表里去(lt_xml) 取数的时候&a…

3D模型格式转换工具HOOPS Exchange:3D CAD数据的快速导入与导出

在当今的工程设计领域中,快速且可靠地处理3D CAD数据是至关重要的。HOOPS Exchange SDK通过提供一组C软件库,为开发团队提供了实现这一目标的有效工具。 什么是HOOPS Exchange? HOOPS Exchange是一组C软件库,旨在为开发团队提供…

【复习笔记】reeRTOS(七) 二值信号量和计数信号量

本文是FreeRTOS复习笔记的第七节,信号量。 上一篇文章: 【复习笔记】FreeRTOS(六) 队列操作 文章目录 一、信号量分类二、二值信号量2.1.实验设计2.2.测试例程2.3.实验效果 三、计数信号量3.1.实验设计3.2.测试例程3.3.实验效果 一、信号量分类 信号量是…

盲盒新风潮:从玩具到文化符号的转变

亲爱的朋友们,我是微三云的周丽,一名专注于私域电商模式创新的探索者。 随着互联网和电子商务的迅猛发展,商业模式不断创新,盲盒电商作为其中的一种新兴形式,正逐渐引起人们的关注。盲盒电商不仅仅局限于传统的日用品…

【电控实现5.1】

标幺系统 vb:峰值

【Node.js】 fs模块全解析

🔥【Node.js】 fs模块全解析 📢 引言 在Node.js开发中,fs模块犹如一把万能钥匙,解锁着整个文件系统的操作。从读取文件、写入文件、检查状态到目录管理,无所不能。接下来,我们将逐一揭开fs模块中最常用的那…

【C++】string的使用

目录 1、为什么学习string类? 2、标准库中的string类 2.1 string类 2.2 string类的常见接口声明 2.2.1 string类的常见构造 ​编辑 2.2.2 string类对象的访问及遍历操作 2.2.3 string类对象的容量操作 2.2.4 string类对象的修改操作 ​编辑 1、为什么学习s…
最新文章