当前位置: 首页 > news >正文

机器学习-SVM

  1. 线性感知机分类

  2. 支持向量机

线性感知机(Perceptron)

感知机是线性二值分类器。

注意:什么是线性?线性分割面就是,就是在分割面中,任意两个的连线也在分割面中,这个分割面,就是线性分割面。

f(x,w,b)=sign(wx+b)

wx+b>0, f=1

wx+b<0, f=-1

为什么分割面能写成 wx+b=0?w 一个向量。

对于普通的方程 y=kx+b,那么我们可以写成 kx-y+b=0,写成向量方程就是:

当k=1时,w(1,-1) 如下图知,w 是分割面的法向量。 

感知机--目标函数

最小化错误率:

I 函数是:当预测值 f() 与实际值 y 不相等时,I=1,相等是 I=0 。所以求和为错误的样本数。

我们可以转换成后边的函数,sign 函数是:wx+b>0 是 函数值为1,wx+b<=0 时函数值为-1.

那么如果分对:sign 与 y 符号相同,相减为 0,如果分错,sign 与 y 符号相反,那么相减为2 或者 -2 所以需要除以2,就是分错样本数了。

由于sign() 函数不是处处可导,给算法设计带来困难。所以我们换一个容易的策略。

                   函数 ①

这个函数只统计分错样本,所以如果全分对L=0,如果有分错样本时L>0  (<0,所以函数前边有个负号)

 结论:线性可分时,最小化 L 等价于最小化错误率。

注意:如果不是线性不可分时,这个结论不成立。

如:w1xi+b=0.2    分错

      w1xj+b=0.3    分错   L1=0.5

  

      w2xk+b=0.6     分错: L2=0.6

当为 w1 是有两个 样本点分错了错误率为2,L1=0.5 ,但是当为 w2 时 有一个样本点分错了错误率为1, L2=0.6>L1 

现在我们要 最小化 函数 ①,那么我对函数① 分别对w 和 b 求偏导。(-xiyi,-yi)

我们用梯度下降法来找函数① 的极值。

w = w + p*y_i*x_i

b = b + p*y_i

 是学习率。

算法步骤:

  1. 随机设定:w ,b 的值

  2. 用当前(w,b)轮流对所有的样本点分类,如果分错,更新(w,b) 的,继续。

  3. 重复步骤2直到所有的点都被分对

感知机的不足:

  1. 有无穷多个可行解

  2. 由于感知机是贪婪算法,所以结果依赖初始值和误分点的顺序。

  3. 线性限制(对于线性不可分的特征空间,线性感知机无能为力)

  

          不足 1                        不足 3

线性感知机有这些不足,接下来我们看看在支持向量中是怎么弥补的。

支持向量机(Support Vector Machine)

  1. 线性可分:硬间隔SVM

  2. 适用于线性不可分:软间隔SVM

  3. SVM对偶问题和解的性质

  4. 非线性:Kernel SVM

硬间隔 SVM

                                    

                    图 1                                                                                               图 2                                                                      图 3

看图1,这里有两个分割线,到底哪个好呢?对于新数据(哪个方框)到底应该属于哪一类呢?我看到超平面不同,对新数据的影响不同。

看图2,间隔:分界面到最近样本距离(的两倍)。

          我们认为使间隔最大的分界面是最好的分界面,因为间隔最大,将来落在间隔内的新数据更够跟准确的分到所属的类中。

          最大间隔分类器是使得间隔宽度最大的线性分类器。

看图3  要求:对正样本wx+b>=1

                    对负样本wx+b<=-1

原因:由于wx+b>0  那么肯定存在一个非常接近0的ε 使 wx+b>=ε ,两边同时除以 ε 得 wx/ε+b/ε>=1,那么我将w/ε=w,b/ε=b(先的未知数),于是就有wx+b>=1,同理wx+b<=-1

求间隔(margin):

M 由向量投影公式:投影=向量与投影方向单位向量的内积。

(第二个式子是根据直角三角形计算出来的)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         将conθ 带入二式就得到了M的值。

wx+b>=1 , y=1  

wx+b<=1 , y=-1 所以:y(wx+b)>=1 

我们要最大 ,就等价于最小化,因为:,而 是一个单调递增函数,最小化的也就是最小化 x ,同理最小化化,优化问题,前边加一个1/2 系数,对优化问题没有影响,添加一个1/2 系数是为了对二次求导有一个2系数相消。

     这样就转化为一个关于 w 和 b 的二次规划问题:

          

软间隔 SVM

     感知机是有无穷多个可行解,现在硬间隔SVM 通过最大间隔,有唯一解。那么目前还有什么缺点?对噪音的处理。现在都是要求线性可分,如果存在噪音,那么将会出现震荡。那么我们接下来,看看软间隔SVM是怎么解决噪音问题的。

 如果存在噪音点。

     软间隔SVM 通过引入松弛变量ξi,使得错分样本得到惩罚(注意:当还没有找到最优解时,一些非噪音点也会遭到惩罚)。

     最小化松弛项,同时最大化间隔。

     minimize 错分样本对应的 ξi>=1,所以:Σiξi>=错误样本个数。

硬间隔 VS 软间隔

  

                         硬间隔SVM                                                                                软间隔SVM

拉格朗日函数

为什么要引入拉格朗日函数呢?对于一般函数我们要极值,我们只需求导等于零即可。那么对于带约束的函数求导,我们怎么求他的极值。我们用拉格朗日乘子,将目标函数和约束函数写到一个新函数中,对这个新函数我们求导等于零即可。

优化问题

 对每个约束引入拉格朗日乘子 ai,ui 得到:

 且 a>=0,u>=0

这个拉个朗函数,根据 α和u 求最大,然后根据:w,b, ξ 求最小。

那么经这转换,最后求出解还是原问题的解吗?

分析:内部最大化:当不成立,也就是小于 0 ,根据式子值,α的系数是正数 且 α>=0,那么这时根据 α 求拉格朗日函数的最大值为正无穷。

                              同理当不成立时, 且 u>=0 ,拉格朗日函数最大值为正无穷。

                              当成立时,,α的系数是负数,且α>=0 ,所以只有 α=0 时,拉个朗日函数的最大值为0.

                              当成立时, ,u 的系数是负数,且u>=0 ,所以只有 u=0 时,拉个朗日函数的最大值为0.

结论:     当 成立时,拉格朗日函数 根据 a,u求得最大值为0,则此在根据w,b,ξ 求最小值,就是原函数的最小值

               当 不成立时,,拉格朗日函数 根据 a,u求得最大值为正无穷,则此在根据w,b,ξ 求最小值,没有意义。

     

          图1                                        图2

原问题就像图1

朗格朗日函数就像图2

拉个朗日的对偶问题:

 且ai>=0,ui>=0

对偶函数只是将最大化和最小化交换了一下位置。那么优化对偶函数的解和拉格朗日函数的解是一致的吗?

凸优化是一样的。因为凸规划满足KKD条件。凸规划问题就是:约束是凸集,目标函数是凸函数。

求极值问题,L对 w,b,ξ 求导等于零。

式(1)得到:,带入L:

需满足式2,3和对偶条件:

  1. ai>=0

  2. ui>=0

  3. C-ai-ui=0

  4. Σyiai=0

使用ui=C-ai  消掉ui,得到最终的对偶问题:

由于, 预测函数变为:

求b:满足 0<ai<C 的i 对应的支持向量,解yif(xi)=1得到b

对偶问题有点,只需内积,不需 x 具体值。这样也就可以用核函数了。

KKT 条件

最优化问题,最后变成求KKT条件。只要满足KKT 条件的解,就是原问题的最优解。

非线性SVM

对于线性可分数据,线性SVM表现很好了。

如果训练数据本身存在复杂非线性关系(在给定的特征空间中),很难用线性模型较好的处理。

解决办法:通过一个函数,将原来的特征空间中的样本,映射到高维的特征空间中:

 将原来的数据的平方作为第二维。

原始空间中任意形状的两个区域,总是可以在某些高维特征空间中映射成线性可分的区域。

将到原点的距离最为第四维的数据。

核函数:

之前我们讲过,SVM分类器的训练和预测都仅依赖于样本对的内积值 K(xi,xj)=xi^Txj

核函数对应某个特征空间中的内积。

核函数例子:

  1. 线性:(这就是内积定义,就是映射的还是原来的空间)

  2. p次多项式:

  3. 高斯核(RBF核)(特征空间是无限维空间,此核可以用来逼近任意复杂的分类面)(σ 参数需要自己调)

  4. Sigmoir:

注意:引入Kernel 的同时带来高计算复杂度:

  1. Kernel SVM 中,支持向量个数随样本数增多。

  2. Kernel SVM 问题求解至少是n^2 复杂度。(因为我们需要计算每个特性向量与其他特征向量的内积)

最著名的两个工具包

LIBSVM:

     http://www.csie.ntu.edu.tw/~cjlin/libsvm/

SVM Light:

     http://www.cs.cornell.edu/People/tj/svm_light/

liblinear-1.93:这个是针对线性可分的数据,做了很多优化,比libsvm-3.17 快很多。

相关文章:

机器学习-SVM

线性感知机分类 支持向量机 线性感知机&#xff08;Perceptron&#xff09; 感知机是线性二值分类器。 注意&#xff1a;什么是线性&#xff1f;线性分割面就是&#xff0c;就是在分割面中&#xff0c;任意两个的连线也在分割面中&#xff0c;这个分割面&#xff0c;就是线…...

翻译器在线翻译:开启多语言交流新时代

随着国际交流、商务合作、文化交融以及互联网的飞速发展&#xff0c;人们对于跨越语言鸿沟的需求日益迫切。翻译工具成为了我们必备的一个工具&#xff0c;这篇文章我们一起来探讨一些好用的翻译器在线翻译工具吧。 1.在线福昕翻译 链接直达>>https://fanyi.pdf365.cn/…...

网络编程(10)——json序列化

十、day10 今天学习如何使用jsoncpp将json数据解析为c对象&#xff0c;将c对象序列化为json数据。jsoncp经常在网络通信中使用&#xff0c;也就是服务器和客户端的通信一般使用json&#xff08;可视化好&#xff09;&#xff1b;而protobuf一般在服务器之间的通信中使用 json…...

基于FreeRTOS的STM32多功能手表设计

在智能穿戴设备迅速发展的今天&#xff0c;多功能手表因其便携性和实用性而受到广泛关注。本项目旨在设计一款基于FreeRTOS操作系统的STM32多功能手表&#xff0c;通过实时多任务处理&#xff0c;实现时间显示、多级菜单、万年历、模拟手电筒、温湿度显示、电子闹钟和设置等功能…...

18.Linux-配置DNF仓库

DNF仓库产生背景 在现实的场景中&#xff0c;我们经常要安装一些软件包&#xff0c;但由于现场不提供网络。 需要使用光盘或文件下载的方式去安装。 对于linux有两种离线安装方式&#xff1a;二进制文件安装和源码安装 其中二进制文件是比较简单的安装方式&#xff0c;不同的l…...

GeoPB:高效处理地理空间数据的Protobuf解决方案

在地理信息系统&#xff08;GIS&#xff09;和地理空间数据处理的领域&#xff0c;数据的交换和存储格式至关重要。随着技术的不断发展&#xff0c;如何高效、安全地处理和转换地理空间数据成为了一个核心问题。本文将详细介绍GeoPB——一个基于Protobuf&#xff08;Protocol B…...

华为仓颉语言入门(6):if条件表达式

解锁Python编程的无限可能&#xff1a;《奇妙的Python》带你漫游代码世界 仓颉语言中的 if 表达式用于根据条件的值来决定是否执行相关代码逻辑。if 表达式有三种形式&#xff1a;单分支的 if 表达式、双分支的 if 表达式和嵌套的 if 表达式。 单分支的 if 表达式 单分支的 …...

openlayers中一些问题的解决方案

一、使用地图时可能会出现的需求 1、定位&#xff1a;需要将地图的中心视野&#xff0c;定位到研究区域的中心点&#xff1b; 2、地图蒙版&#xff1a;只研究特定区域&#xff0c;将其他部分区域用蒙层遮罩&#xff0c;突显重点&#xff1b; 3、变色&#xff1a;设置整体的地图…...

java通过redis完成幂等性操作

4 幂等 产生 “重复数据或数据不一致”&#xff08; 假定程序业务代码没问题 &#xff09;&#xff0c;绝大部分就是发生了重复的请求&#xff0c;重复请求是指"同一个请求因为某些原因被多次提交"。导致这个情况会有几种场景&#xff1a; 微服务场景&#xff0c;在…...

48 旋转图像

解题思路&#xff1a; \qquad 这道题同样需要用模拟解决&#xff0c;原地算法要求空间复杂度尽量小&#xff0c;最好为 O ( 1 ) O(1) O(1)。模拟的关键是找到旋转的内在规律&#xff0c;即旋转前后的位置坐标的变化规律。 \qquad 正方形矩阵类似洋葱&#xff0c;可以由不同大小…...

TDengine 签约青山钢铁,实现冶金全流程质量管控智能化

在不锈钢生产领域&#xff0c;企业面临着信息孤岛和数据分散的挑战&#xff0c;尤其在冶炼、连铸和轧钢等关键工艺以及能源管理上&#xff0c;这种现象导致生产要素&#xff08;人、机、料、法、环&#xff09;的分析管理模型难以全面、深入地实施。为了应对这一挑战&#xff0…...

__pycache__文件夹

__pycache__ 文件夹是 Python 在运行时自动生成的目录&#xff0c;用于存储已编译的字节码文件。这些字节码文件以 .pyc 扩展名结尾&#xff0c;用于加速程序的启动时间&#xff0c;因为不需要每次运行时都重新编译源代码。 主要特点 自动生成&#xff1a;__pycache__ 文件夹…...

利用 Local Data 导入文件到 OceanBase 的方法

背景 在很多传统方法中&#xff0c;数据的传输常依赖于csv格式。为了提高传输效率&#xff0c;属于同一张表的多个csv文件往往会被打包成gz文件进行传输。 当gz文件从上游传递到下游后&#xff0c;为了将其中的csv数据导入数据库&#xff0c;一种直接的做法是&#xff1a; 1…...

改变安全策略的五大实践

随着网络威胁形势的加剧&#xff0c;网络安全计划必须不断发展以保护组织的使命。 为了管理这种持续的网络安全发展&#xff0c;应遵循五项关键的安全计划变更管理实践&#xff1a; 1. 识别并吸引受安全风险影响的业务利益相关者 随着新的网络安全风险被发现&#xff0c;受影…...

在MacOS上安装MongoDB数据库

一、安装方法 1.1 安装包安装 首先&#xff0c;打开MongoDB 官网下载安装包&#xff0c;下载链接&#xff1a;https://www.mongodb.com/try/download/community。 根据自己的系统环境自行选择下载的版本。将下载好的 MongoDB 安装包解压缩&#xff0c;并将文件夹名改为 mon…...

负载均衡--会话保持失败原因及解决方案(五)

会话保持失败可能由多种因素导致&#xff0c;以下是一些主要原因及其解释&#xff1a; 一、服务器及网络问题 服务器故障&#xff1a; 服务器出现故障或不稳定&#xff0c;导致无法正确处理会话信息。这可能是由于硬件故障、网络问题或软件错误等引起的。网络问题&#xff1a…...

24 Vue3之集成TailwindCSS

Tailwind CSS Tailwind CSS是一个由js编写的CSS 框架 他是基于postCss 去解析的 官网地址Tailwind CSS 中文文档 - Tailwind CSS - 只需书写 HTML 代码&#xff0c;无需书写 CSS&#xff0c;即可快速构建美观的网站。 | TailwindCSS中文文档 | TailwindCSS中文网 对于PostCSS…...

iOS OC 底层原理之 category、load、initialize

文章目录 category底层结构runtime 执行 category 底层原理添加成员变量 load调用形式系统调用形式的内部原理源码实现逻辑 initialize调用形式源码核心函数&#xff08;由上到下依次调用&#xff09;如果分类实现了 initialize category 底层结构 本质是结构体。struct _cat…...

另外知识与网络总结

一、重谈NAT&#xff08;工作在网络层&#xff09; 为什么会有NAT 为了解决ipv4地址太少问题&#xff0c;到了公网的末端就会有运营商路由器来构建私网&#xff0c;在不同私网中私有IP可以重复&#xff0c;这就可以缓解IP地址太少问题&#xff0c;但是这就导致私有IP是重复的…...

怎样用云手机进行TikTok矩阵运营?

在运营TikTok矩阵时&#xff0c;许多用户常常面临操作复杂、设备过多等问题。如果你也感到操作繁琐&#xff0c;不妨考虑使用云手机。云手机具备丰富的功能&#xff0c;能够帮助电商卖家快速打造高效的TikTok矩阵。接下来&#xff0c;我们将详细解析这些功能如何提升你的运营效…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

STM32标准库-ADC数模转换器

文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”&#xff1a;输入模块&#xff08;GPIO、温度、V_REFINT&#xff09;1.4.2 信号 “调度站”&#xff1a;多路开关1.4.3 信号 “加工厂”&#xff1a;ADC 转换器&#xff08;规则组 注入…...