Python机器学习:支持向量机2

news2024/11/19 10:47:32

昨天是简单的了解了一下支持向量机要干什么以及线性可分支持向量机是怎么一回事,今年来看另一种:线性支持向量机:

我们昨天说的,线性可分支持向量机的目的就是找到一个超平面来吧一个数据集分成正负两个部分,但是实际上,这应该来说是一种理想情怀,因为实际的数据集中往往带有噪声,这就使得数据变成了线性不可分,这种情况之下,就要考虑线性支持向量机。

在前者的基础上,线性支持向量机引入了松弛变量\xi _i\geqslant 0,对于样本点,线性支持向量机是允许部分样本落入超平面H1或者H2的,而前者,要求样本集中的所有样本都要满足:

(\omega ^Tx+b)y_i\geqslant 1

这个时候,H1和H2之间的距离\frac{2}{||\omega||}被称为硬间距,而在线性支持向量机中,

(\omega ^Tx+b)y_i\geqslant 1-\xi_i

我们允许部分样本越过超平面H1或者H2,这个时候,H1和H2之间的距离\frac{2}{||\omega||}被称为软间距。

优化线性支持向量机的时候,目标是软间隔尽可能的大,同时希望越过两个超平面的样布不要远离这两个超平面,,这样的话,我们优化后的目标函数就是:

\frac{1}{2}||\omega||^2+C\sum_{i=1}^{m}\xi_i

其中,C是惩罚系数,前者控制最小间隔应尽可能的大,后者求和则控制着越过超平面的样本点离超平面尽量近,C是对着二者关系的权衡,线性支持向量机的优化问题可以写为:

\left\{\begin{matrix} min \frac{1}{2}||\omega||^2 +C\sum_{i=1}^{m}\xi_i& \\ s.t. (\omega^tx_i+b)y_i\geqslant 1-\xi_i& \end{matrix}\right.

求解就类似于之前的线性可分支持向量机,

Lag(\overrightarrow{\omega},b,\overrightarrow{\xi},\overrightarrow{\alpha},\overrightarrow{\mu})=\frac{1}{2}||\omega||^2+C\sum_{i=1}^{m}\xi_i+\sum_{i=1}^{m}\alpha_i(1-\xi_i-(\omega^Tx_i+b)y_i)-\sum_{i=1}^{m}\mu_i\xi_i

 然后令lag函数对\overrightarrow{\omega},b,,\overrightarrow{\xi}求偏导,并且令导数为0即可。

和线性可分支持向量机不同的是,线性支持向量机的支持限量并不一定就在H1或者H2上。

我们这里看个简单的示意图吧:

图1:示例

 就是说,一个数据集合里面有这些元素,咱要做的,就是和上面图片中的那条黑线一样,找到超平面,然后对集合元素所属属性进行判别。

然后来看一下合页损失函数

对于一个变量下,合页损失函数的定义如下:

[x]_+=\left\{\begin{matrix} x , x> 0 & \\ 0,x\leqslant 0& \end{matrix}\right.

对于线性支持向量机,优化问题就相当于优化下式:

min\sum_{i=1}^{m}[1-(\omega^Tx_i+b)y_i]_++\lambda||\omega||^2

其中,前者是合页损失形式

在线性支持向量机中,上式和\frac{1}{2}||\omega||^2+C\sum_{i=1}^{m}\xi_i是等价的。

核函数,就不做过多讲解了,可以简单的立即成一个映射函数,把样本从输入空间映射到特征空间,这样的话,就比较好计算。

一般来说,常见的核函数有:

1、线性核函数,就是支持向量机中的形式:

k(x_i,x_j)=x_i^Tx_j

2、多项式核函数,其中p是超参数

k(x_i,x_j)=(x_i^Tx_j)^p

3、高斯核函数,又被称为径向基(RBF)函数,其中,sigma是超参数:

k(x_i,x_j)=exp(\frac{||x_i-x_j||^2}{2\sigma^2})

说白了,就是一些实际应用中,你会发现,数据集的混乱程度可谓令人发指,想要直接分类,太难了,太难了怎么办,换个战场呗,将数据集映射到一个比较容易进行分类的空间,然后在用支持向量机进行分类,这不就ok了,简单且实用,对吧。

然后我们最后来看一下二分类和多分类问题,就是说,我们之前这两张讨论的都是二分类,一正一负就没了,实际情况却是多类,那怎么办呢,我们在这里使用一种策略,叫拆解法,典型的拆解法有:一对一(OvO),一对多(OvM),多对多(MvM)。

OvO:我们把K哥类别两两配对,这就得到了K(K-1)/2个二分类任务,然后再测试阶段新样本将同时提交给所有的分类器,就得到了K(K-1)/2个分类结果,最终把预测最多的结果作为投票结果。

OvM:将每一个类别分别作为正类,其他类别作为反类,来训练,这样子的话,只需要K个训练器,说白了,就是每次找个正类,其他的,管你是啥,全是反类,就这么训练,就得到了多个分类结果。

MvM:这个,说实话,我看了很懵,扯到纠错输出码上去了,第一眼还以为是海明码,编码阶段,我们对K个类别进行M次划分,每次将一部分作为正类,另一部分作为反类,编码矩阵有两种形式,二元码,三元码,前者只有正反类,后者还包括了停用类,解码阶段,我们把各分类器的预测结果联合起来形成测试示例的编码,该编码域各类所对应的编码进行比较,将距离最近的编码所对应的类别作为预测结果。

最后,我们看一下,书上用SVM来实现的红葡萄酒分类:

from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
if __name__=='__main__':
    wine=load_wine()
    x_train,x_test,y_train,y_test=train_test_split(wine.data,wine.target)
    model=SVC(kernel='linear')
    model.fit(x_train,y_train)
    train_score=model.score(x_train,y_train)
    test_score=model.score(x_test,y_test)
    print("train_score:",train_score)
    print("test_score:",test_score)

这里的核函数kernel是可以更改的:

linear:线性核函数

poly:多项式核函数

rbf:高斯核函数

sigmod:sigmod核函数

precomputed:提前计算好的核函数矩阵

注意: The 'kernel' parameter of SVC must be a str among {'poly', 'sigmoid', 'precomputed', 'rbf', 'linear'} or a callable!!!

我们来看看不同的核函数效果都怎么样:

linear:

图2、线性核函数

 poly:

图3、多项式核函数

 rbf:

图4、高斯核函数

 sigmod:

图5、sigmoid函数

 precomputed:

报错了,估计这个用不了

Precomputed matrix must be a square matrix。

不过从上面的四个核函数训练结果来看,红酒集应该是适用线性核函数的,因为,后面的三个,训练和测试得分,emm,实在是,emm,对吧。

好了,SVM就到这里了,基本上把涉及到的都写了,至于推公式,我觉得,这都不是重点了。

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

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

相关文章

一天学完C++的标准模板库STL

标准模板库STLstring字符串如何对string字符串的初始化(声明)?如何遍历string对象进行访问?如何对string类型的字符串进行增删改查?对string字符串增加一些字符对string字符串删除一些字符对string字符串改动一些字符在…

【hello Linux】环境变量

目录 1. 环境变量的概念 2. 常见的环境变量 3. 查看环境变量 4. 和环境变量相关的命令 5. 环境变量的组织方式 6. 通过代码获取环境变量 7. 通过系统调用获取环境变量 Linux🌷 在开始今天的内容之前,先来看一幅图片吧! 不知道你们是否和我一…

数据结构的加强甜点-序列1

目录 尾递归 问题 介绍 特点 原理 答案 数组栈堆内存分配 前言 分析 再分析 所谓多维数组 程序局部性原理应用 尾递归 问题 在空间复杂度这块,有个O(n)示例如下: void recur(int n) {if (n 1) return;return recur(n - 1); } 这很明显是…

Canal(1):Canal入门

1 什么是 Canal 阿里巴巴 B2B 公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了同步杭州和美国异地机房的需求,从 2010 年开始,阿里系公司开始逐步的尝试基于数据库的日志解析&am…

SpringSecurity之微服务权限解决方案

目录 前置知识点 什么是微服务 微服务的优劣 优点 缺点 微服务本质 微服务认证与授权实现思路 认证预授权的过程 前置知识点 什么是微服务 微服务(或称微服务架构)是一种云 原 生 架构方法,在单个应用中包含众多松散耦合而且可单独部…

君子生非异也,善假于物也。【借助外力获取能量,主动改善生存环境。】

文章目录 引言I 借助外力1.1 制造很实用工具1.2 火引言 人类懂得借助外力,从被动地适应环境的进化,进入到主动改善生存环境的发展轨道上了。 人之所以为人,是因为我们善于借助外力,而不是先天有多少优势。 I 借助外力 学会制造和使用工具,提高能量获取的效率学会使用火,…

苹果手写笔有必要买吗?性价比电容笔排行榜

众所周知,苹果的正版Pencil的售价过于的高,一般的用户是买不起的。那么,市场上是否会有一款苹果Pencil的平替电容笔,而这两款电容笔在功能上是完全相同的?的确如此。国内的平替电容笔在书写方面上跟苹果Pencil差别不大…

【多线程的应用】顺序打印

【多线程的应用】顺序打印题目注意点:1. 每个线程循环10次,利用锁的wait 和 计数器count调节线程的执行顺序2. count后 lock.notifyAll 唤醒所有线程3. Thread.currentThread().getName()4. 锁中的逻辑是:进入锁中后,如果while不满…

图片怎么转换成pdf格式?这几个方法帮你一键转换

现今电子书籍越来越受到欢迎,其中PDF格式也成为了一种常用的电子书籍格式。无论是工作还是学习,我们都可能会遇到需要将图片转换成PDF格式的情况,例如保存一些资料证明、公文公告、学习资料等。在这篇文章中,我们将为大家介绍三种…

CT前瞻(一):Vant UI入门与使用

文章目录📋前言🎯什么是Vant UI🎯快速上手🎯组件用法📝最后📋前言 最近在项目开发和学习的过程中,涉及到了Vant UI(简称Vant)的使用,主要还是涉及到了Card卡…

[图神经网络]视觉图神经网络ViG(Vision GNN)--论文阅读

国际惯例: 论文地址https://arxiv.org/pdf/2206.00272.pdfgit地址https://github.com/huawei-noah/Efficient-AI-Backbones/tree/master/vig_pytorch 相较于之前将GNN和CNN结合的图像处理算法,ViG创新的将GNN直接用在了特征提取上。不再需要借用…

Docker快速搭建SkyWalking[ OAP UI[登录] Elasticsearch]

文章目录[前置]:搭建ELasticsearch相关[零]:虚拟机开放SkyingWalking和ES相关端口[一]:拉取SkyWalking-oap和SkyWalking-ui镜像[二]: 运行SkyWalking的oap和ui 容器 2.1 - 运行Skywalking-oap容器 ---- 注意oap运行参数异常 no pr…

早有尔闻 | 数字赋能,提质增效

01 卡奥斯牵头国家重点研发项目 助力中小企业数字化转型升级 3月24日,2022年国家重点研发计划“面向中小企业研发制造资源技术工业互联技术服务平台”项目正式启动。其中,卡奥斯COSMOPlat作为平台承建方牵头课题4“研发制造资源工业互联技术服务平台研…

CDH6.3.2引入debezium-connector-mysql-1.9.7监听mysql事件

1、首先说明一下为啥选用debezium,它能够根据事务的提交顺序向外推送数据,这一点非常重要。再有一个结合kafka集群能够保证高可用,对于熟悉java语言的朋友后面一篇博文会介绍怎样编写插件将事件自定义路由到你想要的主题甚至分区中。 提高按顺…

百度「文心一言」阿里「通义千问」腾讯的AI将会叫什么呢

阿里于昨天2023.4.7下午上线通义千问,与ChatGPT类似,同样是基于语言模型训练的人工智能聊天平台。通义千问的核心功能分为四个大类:撰写短文、职场助理、电影脚本和写封邮件。 通义千问通义千问https://tongyi.aliyun.com/ 首页如下&#xf…

word文件上的电子签章的法律效力如何保证?

你有没有见过这样的word文件“电子签章”? 这种用PS制作的“电子签章”,或者在一些输入公司名称就能在线生成“电子签章”的小网站、小作坊买来的“电子签章”,通通都是没有法律效力的贴图章! 使用贴图章的word文件不但没有任何…

VsCode 将源代码管理(Working tree)中的新旧代码上下对比变为左右对比

文章目录一、默认设置二、左右布局变成了上下布局三、解决方法:将上下布局改为左右布局1:找到右上角的更多设置2:点击更多设置后点击【切换到并排视图】3:效果如下(还是原来的效果)四、左右切换成上下总结一…

Pytorch实现图像风格迁移(一)

图像风格迁移是图像纹理迁移研究的进一步拓展,可以理解为针对一张风格图像和一张内容图像,通过将风格图像的风格添加到内容图像上,从而对内容图像进行进一步创作,获得具有不同风格的目标图像。基于深度学习网络的图像风格迁移主要…

玩转Fastdfs

FastDFS FastDFS是一个开源的轻量级分布式文件系统。它解决了大数据量存储和负载均衡等问题。特别适合以中小文件&#xff08;建议范围&#xff1a;4KB < file_size <500MB&#xff09;为载体的在线服务&#xff0c;如相册网站、视频网站等等 特性 文件不分块存储&am…

fast-lio2代码解析

代码结构很清晰&#xff0c;从最外层看包含两个文件夹&#xff0c;一个是fast-lio,另外一个是加上scan-context的回环检测与位姿图优化。 fast-lio 主要是论文的fast-lio2论文的实现&#xff0c;包括前向处理和ikd-tree的实现 1.先从cmakelist入手看代码结构&#xff1a; #这…