支持向量机(SVM,Support Vector Machines)是一种用于分类和回归的监督学习算法。目的是在特征空间中找到间隔最大的超平面。
这里的超平面就是将所有类别划分开的那条线,当数据特征是二维时,此超平面是一条线;当数据特征是多维时,它就变成了面,如下图所示。超平面与最近的样本点保持一定的距离。
回答这个问题前,得先知道什么是间隔。如上图所示,间隔(margin)就是指决策面(y=0)与任意训练数据点之间的最小距离。
硬间隔是指SVM在分类中不允许出现分类错误。通俗点,硬间隔就是训练集中的任何数据点不允许出现在间隔内,即两条蓝线之间,但数据点可以出现在蓝色线上,这些点叫支持向量。
软间隔是指SVM在分类中允许出现分类错误的点,如下图所示。这些圈出的数据点都是支持向量,但是其中两个点不在蓝线上,一个在间隔内,另一个被分类错误(黑色直线所指的两个点)。软间隔允许这种情况存在,硬间隔则不允许。
上图是一个二分类且线性可分的实例,阈值为0。大于0,目标值(tnt_ntn)属于类别1,小于0,目标值(tnt_ntn)属于类别-1,可用线性模型y(x)=wTϕ(x)+by(x)=w^T\phi (x)+by(x)=wTϕ(x)+b表示。
间隔最大化就是让决策面与任意数据点的最小距离最大。SVM 通过间隔最大化可以将优化问题转换成一个凸优化问题,这时解是唯一的。而感知机根据误分类最小进行优化,可得到多个分离超平面,解有多个,如下图所示。
分类中的主要问题之一是类不平衡问题。当采用误分类作为损失函数时,容易受到类不平衡问题的影响,如二分类中有90%的数据属于A类,10%的数据属于B类,误分类是10%,这时的这个决策面是好还是不好?但是SVM采用间隔最大化就可以避免这类问题,因为它只受支持向量影响,鲁棒性强,不易过拟合。
相同点:都是用于分类的监督学习算法
异同点:
支持向量是指训练样本中,与分类超平面最近的数据点。其是训练数据的子集同时也是最难分类的点。
支持向量直接关系到决策面所在的位置。如下图所示,圆圈内的数据点便是支持向量,若从训练数据中删除圆圈内的点,则分类决策面会改变,若删除非圆圈内的点,则分类决策面不会改变。
主要是根据训练数据集是否线性可分以及是否允许出现分类错误进行划分的。主要包含以下三种模型:
支持向量机本质上是一个两类分类器,但通过组合可以处理多分类问题(多分类支持向量机)。
直接法:修改损失函数比如使用softmax,但这样复杂度高,实现起来比较麻烦,适合于小型问题。
间接法:
核函数主要是将数据映射到更高维度的空间,这个空间叫作特征空间。
在特征空间中,数据能够更容易地分离或更好地结构化。
这种映射的形式也没有限制,甚至可以形成无限维空间。核函数表示特征空间的内积,通常表示为:
K(x,y)=<x,y>=ϕ(x)Tϕ(y)K(x,y)=<x,y>=\phi(x)^T\phi(y)K(x,y)=<x,y>=ϕ(x)Tϕ(y)
核函数通过内积计算,避免了直接计算映射。
假设存在二维向量x=[x1,x2],y=[y1,y2]x=[x_1,x_2],y=[y_1,y_2]x=[x1,x2],y=[y1,y2],将其升维(ϕ\phiϕ)到高维空间,则:
升维到三维空间:
ϕ(x)=[x12,x22,2x1x2],ϕ(y)=[y12,y22,2y1y2]\phi(x)=[x_1^2,x_2^2,\sqrt{2}x_1x_2],\phi(y)=[y_1^2,y_2^2,\sqrt{2}y_1y_2]ϕ(x)=[x12,x22,2x1x2],ϕ(y)=[y12,y22,2y1y2]
则核函数的值为:
K(x,y)=ϕ(x)Tϕ(y)=x12y12+x22y22+2x1x2y1y2=(x1y1+x2y2)2=(xTy)2=f(x,y)\begin{aligned} K(x,y)&=\phi(x)^T\phi(y)\\ &=x_1^2y_1^2+x_2^2y_2^2+2x_1x_2y_1y_2\\ &=(x_1y_1+x_2y_2)^2\\ &=(x^Ty)^2\\ &=f(x,y) \end{aligned}K(x,y)=ϕ(x)Tϕ(y)=x12y12+x22y22+2x1x2y1y2=(x1y1+x2y2)2=(xTy)2=f(x,y)
fff表示函数,在这里代表多项式核函数。在其他条件下,fff可以为任何函数形式。
升维到四维空间:
ϕ(x)=[x12,x22,x1x2,x1x2],ϕ(y)=[y12,y22,y1y2,y1y2]\phi(x)=[x_1^2,x_2^2,x_1x_2,x_1x_2],\phi(y)=[y_1^2,y_2^2,y_1y_2,y_1y_2]ϕ(x)=[x12,x22,x1x2,x1x2],ϕ(y)=[y12,y22,y1y2,y1y2]
则核函数的值为:
K(x,y)=ϕ(x)Tϕ(y)=x12y12+x22y22+2x1x2y1y2=f(x,y)K(x,y)=\phi(x)^T\phi(y)=x_1^2y_1^2+x_2^2y_2^2+2x_1x_2y_1y_2=f(x,y)K(x,y)=ϕ(x)Tϕ(y)=x12y12+x22y22+2x1x2y1y2=f(x,y)
这里要注意一个问题,当ϕ(x),ϕ(y)\phi(x),\phi(y)ϕ(x),ϕ(y)是三维时,f(x,y)f(x,y)f(x,y)可以化为三项的和;当ϕ(x),ϕ(y)\phi(x),\phi(y)ϕ(x),ϕ(y)是四维时,fff可以化为四项的和。所以fff可以转化成多少项的和,ϕ(x),ϕ(y)\phi(x),\phi(y)ϕ(x),ϕ(y)就有多少维,即当fff可以化成无限的项相加时,ϕ(x),ϕ(y)\phi(x),\phi(y)ϕ(x),ϕ(y)也可以是无限维的。高斯核可以数据扩展到无限维就是利用这个原理。
核函数的意义在于做到了没有真正映射到高维空间却达到了映射的作用,减少了大量的映射计算。
SVM核函数的引用主要将非线性分类问题转换为线性分类问题。因为存在一个假设,就是数据在低维空间不可分,但在高维空间可分。
高斯核:k(x,y)=exp(−∣∣x−y∣∣22σ2)k(x,y)=exp(- \frac{||x-y||^2}{2\sigma^2})k(x,y)=exp(−2σ2∣∣x−y∣∣2)
根据泰勒展开式:
ex≈1+x+x22!+x33!+...+xnn!e^x \approx 1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+...+\frac{x^n}{n!}ex≈1+x+2!x2+3!x3+...+n!xn
将泰勒展开式带入高斯核,将得到一个无穷维度的映射:
k(x,y)=exp(−∣∣x−y∣∣22σ2)≈1+(−∣∣x−y∣∣22σ2)+(−∣∣x−y∣∣22σ2)22!+(−∣∣x−y∣∣22σ2)33!+...+(−∣∣x−y∣∣22σ2)nn!\begin{aligned} k(x,y)&=exp(- \frac{||x-y||^2}{2\sigma^2})\\ & \approx 1+(- \frac{||x-y||^2}{2\sigma^2}) +\frac{(- \frac{||x-y||^2}{2\sigma^2}) ^2}{2!}+\frac{(- \frac{||x-y||^2}{2\sigma^2}) ^3}{3!}+...+\frac{(- \frac{||x-y||^2}{2\sigma^2}) ^n}{n!} \end{aligned}k(x,y)=exp(−2σ2∣∣x−y∣∣2)≈1+(−2σ2∣∣x−y∣∣2)+2!(−2σ2∣∣x−y∣∣2)2+3!(−2σ2∣∣x−y∣∣2)3+...+n!(−2σ2∣∣x−y∣∣2)n
可以对特征进行归一化,这样就可以用新的特征建模。但在类别变量中,特征归一化有时是不可行的,比如类别变量用one-hot编码,则只有0和1两个数字,此时就没有必要进行归一化,所以归一化并不总是有效的。
RBF核:k(x,y)=exp(−γ∣∣x−y∣∣2)k(x,y)=exp(-\gamma ||x-y||^2)k(x,y)=exp(−γ∣∣x−y∣∣2)
SVM调优中的参数γ\gammaγ表示超平面附近或远离超平面的点的影响。
当γ\gammaγ越小,模型建模时将考虑训练集中的所有点,无法捕捉真正的超平面形状;γ\gammaγ越大,模型建模时只考虑超平面附近的点,将能够捕捉到数据集的形状。
在后面会给大家介绍SVM中对偶性以及损失函数方面的问题。
本片文章主要分享一下我们进行面试时被遇到的接口测试一些问题,例:如何定位bug属于前端还是后端?平时你是怎么做接口测试的?接口自动化的具体步骤?cookie和session的区别?平时用什么工具测试接口的?如何验库?什么是unittest?什么是pytest?unittest和pytest的使用步骤是什么?测试用例的设计方法?列举一些最常用的HTTP方法?接口组成有哪些?为什么进行接口测试?你在接口测试中使用过哪些工具和框架?什么时候用fiddler抓包?接口测试的基本步骤?
一、Redis做什么的,在哪些场景下使用Redis是一个开源的内存数据存储系统,它被广泛用于缓存、消息队列、实时统计分析、任务队列等场景。以下是一些常见的使用场景:缓存:Redis的主要用途之一是作为缓存层。它可以将经常访问的数据存储在内存中,以提高读取速度。常见的应用场景包括页面缓存、对象缓存、查询结果缓存等。消息队列:Redis的发布/订阅功能使其成为一个简单而强大的消息队列系统。它可以用于处
本文主要总结了一些常见的C++面试题,主要是面试过程中遇到以及网上收集,全部是以自己理解进行了作答,如有不明确的地方,欢迎大家前来学习指正,会不定期去更新面试内容。1、回调函数的了解?回调函数和c++中多态类似,主要功能是,对同一个消息,做出不同的响应,使用的是函数指针实现,通过传递函数指针类型,相同的函数地址实现动态绑定,实现对消息体的不同响应。2、递归算法解释?递归的基本思想是某个函数直接或者
序号题目难度ABCDEF正确答案1关于 Logit 回归和 SVM 不正确的是简单Logit 回归目标函数是最小化后验概率Logit 回归可泛化能力Hinge 损失函数,作用是最小...
前端部分1、 colspan,rolspan,cellpadding,tableborder等css属性作用2、 a=(b>c)?d:e 逻辑表达式转换3、 如何提高页面响应速度,前端常用开发技术了解后台部分1、 知道几种安全验证机制?并简要说明其实现方式2、 设计部门表并设计方法实现部门下所有下级部门搜索功能3、 sql语句实现删除多条重复记录(根据关键字段)并只保留一条4、 Arra
常见数据结构与算法学习目录––大公司笔试面试有哪些经典算法题目?二叉树打印参考:链接–––剑指offer-数据结构与算法LeetCode刷题题解答案.pdfLeetCode刷题–––十大算法精讲:(面试题1)剑指offer之赋值运算符函数–––––––––算法高级实战:––漫画:什么是B+树,B+树层数计算(面试官直呼内行)
(1) 无监督和有监督算法的区别?
基础部分1.大数据的文件读取利用生成器generator迭代器进行迭代遍历:forlineinfile2.迭代器和生成器的区别1.迭代器是一个更抽象的概念,任何对象,如果它的类有next方法和iter方法返回自己本身。对于string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数,iter()是python的内置函数。i
简单的面试题总结
概念什么是微服务?你是怎么理解微服务的?微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分为一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API),每个服务都围绕着具体的业务进行构建,并且能够被独立的构建在生产环境、类生产环境等。另外,应避免统一的、集中
<>1、面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可
“link.h”#ifndef __LINK_LIST_H__#define __LINK_LIST_H__#include <stdio.h>#include <assert.h>#include <stdlib.h>#include <malloc.h>typedef int DataType;typedef struct LinkNode{ D
21、谈谈你对镜像的理解 相当于容器的源代码,是一个只读层,镜像由dockerfile 编写生成,用于构建容器。镜像运行起来之后就是 容器。镜像相当于类,容器相当于对象。22、dockerfile 中 add 和 copy 的区别 ADD和COPY相同点:只复制目录中得内容而不包含目录自身 ADD和COPY不同点:当要读取URL远程资源的时候,并不推荐使用ADD指令,而是建议使用RUN指令,在RU
1、Js的原型和原型链怎么理解?原型链有什么应用? 答:js原型以及原型链是js面向对象编程的基础和重点,这个也是笔试和面试常问到的问题。 每一个构造函数都有一个属性prototype,这个属性他指向就是我们常说的构造函数的原型。每当我们通过构造函数要去new一个实例的时候,new操作符会做些事情,
一、Spring的AOP理解 OOP面向对象,允许开发者定义
前言随着移动互联网科技不断的发展和创新,如今无论是公司还是开发者或设计师个人而言,面试都是一项耗时耗钱的项目,而面对iOS开发者及设计师在面试时可能会遇到的问题进行了筛选与汇总。下面我们一起来一下看看吧。一、如何绘制UIView?绘制一个UIView最灵活的方法就是由它自己完成绘制。实际上你不是绘制一个UIView,而是子类化一个UIView并赋予绘制自己的能力。当一个UIView需要执行绘制操作
简要介绍外观模式,因为内容较为简单,没有太大的理解难度,所以课件内容居多
Part one :论文概述 论文标题: SAM3: Segment Anything with Concepts 作者团队: Anonymous authors 发布时间: ICLR2026 一键直达论文 Lab4AI大模型实验室论文阅读 01 摘要解析 SAM3(SegmentAnyth ...
给定一个字符串s,请你找出其中不含有重复字符的的长度。3因为无重复字符的最长子串是"abc",所以其长度为 3。注意 "bca" 和 "cab" 也是正确答案。1因为无重复字符的最长子串是"b",所以其长度为 1。3因为无重复字符的最长子串是"wke",所以其长度为 3。请注意,你的答案必须是的长度,"pwke"是一个子序列,不是子串。
本文介绍了有关C、C++中大小端机的问题,快来检测一下你的机器是大端机还是小端机!
编辑:llB5819WT 0.35A-ASEMI可直接替代安世PMEG4002EBASEMI首芯半导体可替代安氏半导体功率器件型号:B5819WT 0.35A品牌:ASEMI封装:SOD-523特性:肖特基二极管正向电流:0.35A反向耐压:40V恢复时间:35ns引脚数量:2芯片个数:1芯片尺寸: ...