机器学习之SVM支持向量机

2023-11-16

目录

经典SVM

软间隔SVM

核SVM

SVM分类器应用于人脸识别

SVM优点

SVM缺点 


经典SVM

支持向量机(Support Vector Machine,SVM)是一种二分类模型,其基本思想是在特征空间中找到一个最优的超平面,使得正负样本点到该超平面的距离最大化,从而实现对样本的分类。

软间隔SVM

核SVM

SVM分类器应用于人脸识别

经典SVM为二分类模型,对于多分类模型,可以通过以下两种方法实现:

①One-vs-One(OVO):将每个类别之间的所有可能组合都训练一个二元分类器,然后通过投票或者加权投票来决定最终的分类结果。

②One-vs-All(OVA):将一个类别作为正例,其余所有类别作为负例,训练一个二元分类器,然后重复这个过程,直到每个类别都有一个分类器。最后通过投票或者加权投票来决定最终的分类结果。

对于人脸识别,SVM是用来分类的,我们可以使用像PCA、LDA、LPP、NPE等降维算法先进行数据降维再分类。

 SVM二分类代码,即文章开头的图片示例matlab代码:

% 生成随机数据
X = [randn(20,2)-2; randn(20,2)+2]; % 生成20个标签为-1的点和20个标签为1的点,分别在(-4,-4)和(4,4)的区域内
Y = [-1*ones(20,1); ones(20,1)]; % 将标签存入列向量y中

% 拟合SVM模型
svmModel = fitcsvm(X,Y); % 拟合线性SVM模型

% 绘制决策边界
w = svmModel.Beta; % 获取模型的权重向量w
b = svmModel.Bias; % 获取模型的偏置项b
a = -w(1)/w(2); % 计算决策边界的斜率
xx = linspace(-5,5); % 生成x坐标
yy = a*xx - b/w(2); % 计算决策边界的y坐标
margin = 1/sqrt(sum(w.^2)); % 计算间隔边界的宽度
yy_down = yy - sqrt(1+a^2)*margin; % 计算下界的y坐标
yy_up = yy + sqrt(1+a^2)*margin; % 计算上界的y坐标

% 绘制数据点和支持向量
figure; % 创建新的图形窗口
gscatter(X(:,1),X(:,2),Y,'br','x+'); % 绘制数据点,标签为-1的点用蓝色表示,标签为1的点用红色表示
hold on; % 将图形保持在当前状态,以便绘制其他图形
plot(xx,yy,'k-'); % 绘制决策边界
plot(xx,yy_down,'k--'); % 绘制间隔边界下界
plot(xx,yy_up,'k--'); % 绘制间隔边界上界
plot(svmModel.SupportVectors(:,1),svmModel.SupportVectors(:,2),'go','MarkerSize',10); % 绘制支持向量,用黑色圆点表示
axis([-5 5 -5 5]); % 设置坐标轴范围
legend('Class A','Class B','Decision boundary','Margin','Margin','Support vectors'); % 设置图例
hold off; % 关闭当前图形的保持状态,以便绘制其他图形

人脸识别多分类,使用OVO模式训练SVM模型,构建标签矩阵后进行模型训练,然后将数据写入excel表格,我这里的代码例子是先用PCA进行降维的,所以写入PCA.xlsx文件中。

halfDataNumber=pictureNumber/2;
Y=zeros(halfDataNumber,1);
for i=1:halfDataNumber
    Y(i)=floor((i-1)/testNumber)+1;
end

for dimension=5:5:160
    egienvector=egienvectors(:,1:dimension);
    trainDataTemp=egienvector'*trainData;
    testDataTemp=egienvector'*testData;
    right=0;
    model=fitcecoc(trainDataTemp',Y);
    YPredicted=predict(model,testDataTemp');
    for i=1:halfDataNumber
        if Y(i)==YPredicted(i)
            right=right+1;
        end
    end
    rate=right/halfDataNumber;
    SVMresult=[SVMresult,rate];
end

X=5:5:160;
plot(X,SVMresult);
writematrix(SVMresult,'PCA.xlsx');

SVM优点

优点:

  1. 高效性:SVM在处理高维度数据和样本数量较少的情况下表现出色,因为它只关注支持向量,而不受非支持向量的影响。
  2. 可解释性:SVM提供了对分类结果的良好解释能力。支持向量可以帮助我们了解决策边界及分类结果的原因。
  3. 鲁棒性:SVM对于处理输入空间中的噪音和异常值具有较好的鲁棒性。由于它的决策函数只依赖于支持向量,所以局部的扰动并不会对整体模型产生很大影响。
  4. 泛化能力:SVM通过最大化间隔来选择最优决策边界,从而提高了模型的泛化能力。这种特性使得SVM在处理未见过的数据时表现较好。

SVM缺点 

缺点:

  1. 参数调优困难:SVM中的核函数和正则化参数需要事先进行合理设置,而且对于不同的问题,最优的参数往往是不同的,因此调优可能需要耗费大量的时间和计算资源。
  2. 计算复杂度高:当样本量很大时,SVM的计算复杂度会显著增加,尤其是在使用非线性核函数时。这可能导致训练时间较长,并且在大规模数据集上的应用受到限制。
  3. 对缺失数据敏感:SVM对于缺失数据较为敏感,因为它主要依赖于支持向量,如果包含缺失值的样本成为支持向量,则可能会影响模型的性能。
  4. 难以处理多分类问题:原始的SVM算法是二分类算法,要将其扩展到多类别问题,通常需要借助一些技巧,如一对多(One-vs-Rest)或一对一(One-vs-One)策略。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习之SVM支持向量机 的相关文章

随机推荐

  • Python糖尿病人预测是否患癌症

    Python糖尿病人预测是否患癌症 统计回归分析的任务 就在于根据x1 x2 x3 xp线性回归和Y的观察值 去估计函数f 寻求变量之间近似的函数关系 我们常用的是 假定f函数的数学形式已知 其中若干个参数未知的观察值去估计未知的参数值 这
  • 网马解密初级篇

    一 网页挂马的概念 网页挂马是指 在获取网站或者网站服务器的部分或者全部权限后 在网页文件中插入一段恶意代码 这些恶意代码主要是一些包括IE等漏洞利用代码 用户访问被挂马的页面时 如果系统没有更新恶意代码中利用的漏洞补丁 则会执行恶意代码程
  • nodejs egg框架统一错误信息返回封装

    use strict app middleware error handler js module exports gt return async function errorHandler ctx next try await next
  • ubuntu内网安装软件

    在生产环境中很少有连接外网的服务器 这里以ansible内网安装为例来介绍 1 安装ansible 有外网 1 ansible的安装包存在于ansible的PPA中 如果要下载PPA 个人软件包存档 就必须要使用apt add reposi
  • C++三角函数计算及弧度制角度制转换

    c 中所有三角函数计算里都是弧度制 用acos算出的弧度t转化为角度的时候 需要t 180 Pi 相对应的 角度换弧度需要t Pi 180 反三角函数 double acos double asin double atan
  • linux怎么看sdb1里面的文件,linux – 什么是sda,sdb,dm-0,dm-1的文档

    如果我运行iostat 我得到了 sda0 sda1 我知道那些是 硬盘 那么有dm 0 dm 1 我想查看文档 我的mount命令也显示了这个 dev mapper VolGroup lv root ext4 usrjquota quot
  • 数据库系统概论(章节重点)

    单词错误 有些地方说的也不是很严谨 大家稍微参考一下即可 祝大家期末顺利 数据库考试重点 题型 30分客观题 20选择10填空或反过来 覆盖面大 关系代数 70分主观题 简答 4 6个理论部分例如简述数据库设计步骤 编程 20 30分 设计
  • input的onchange事件实际触发条件与解决方法

    input中onchange事件已经属于元老级别了 并且现在同onclick一样使用频率很高 然而onchange的机制实际上有很多童鞋并不清楚 我们通过实例来分析这个事件的特征 触发onchange 首先页面有一个input标签 并且已绑
  • python 多线程 线程池的四种实现方式

    python 线程池的四种实现方式 线程简述 一个程序运行起来后 一定有一个执行代码的东西 这个东西就是线程 一般计算 CPU 密集型任务适合多进程 IO密集型任务适合多线程 一个进程可拥有多个并行的 concurrent 线程 当中每一个
  • 【转】开发基于ASP.NET WebService的图片验证码服务

    原文地址 http www webjx com htmldata 2006 01 21 1137824356 html 最近 工作中接到一项任务 开发一个页面验证码功能 查阅了一些网上的资料 并结合以前的绘图方面的知识 实现了如下的解决方案
  • CodeFun如期而至

    背景 将设计稿转代码是前端工程师日常不断重复的工作 这部分工作复杂度较低但工作占比较高 往往又比较枯燥繁琐 有时候开发迭代周期短 静态页面又多 常常让有些前端开发苦不堪言 那么 有没有一款设计稿自动生成代码的工具 减少前端工程师的工作量 提
  • node.js

    node js 关于报错及解决方案 问题一 问题二 问题三 一 Node js基础 1 认识Node js 2 开发环境搭建 3 模块 包 commonJS 4 Npm Yarn 5 内置模块 6 路由 二 Express 1 特色 2 安
  • hadoop 学习笔记

    基于hadoop的贝叶斯文本分类器实现过程 贝叶斯基础理论 这个东西的项目概览 对这个工程总体的流程可以参考这个文献里面的做法即可 参考文献1 远程原件目录 user coderlau input hadoop文件系统命令行主要是hdfs
  • android 电视安装apk文件夹,智能电视无法识别apk文件怎么办?简单几招教你搞定...

    在双十一购买完智能电视后 安装自己喜欢的软件 或许是在正常不过的事情了 但有时候我们会碰到一些APK无法识别 这个时候还以为会认为自己买的是假货 但实际上 这并不是电视的问题 而今天小编就教大家 一旦碰倒APK无法识别时应该如何解决 帮助你
  • 常用语言单元测试框架入门

    本文主要介绍Python java go C OC常用单元测试框架 用于了解各种语言单测 一 python单元测试Pytest 1 Pytest主要功能 pytest是python的一种单元测试框架 同自带的Unittest测试框架类似 相
  • 2023 最新互联网大厂Java面经分享:25 分类、1000 道 Java 面试真题(50w 字解析)

    作为 Java 程序员 选择学习什么样的技术 什么技术该不该学 去招聘网站上搜一搜 看看岗位要求就十分清楚了 自己具备的技术和能力 直接影响到你工作选择范围和能不能面试成功 如果想进大厂 那就需要在 Java 核心技术栈上面好好准备了 具体
  • 通过增加模型的大小来加速Transformer的训练和推理

    点击上方 AI公园 关注公众号 选择加 星标 或 置顶 作者 Eric Wallace 编译 ronghuaiyang 导读 你没有看错 确实是通过增大模型的大小 大家别忘了 在训练的时候 有个隐含条件 那就是模型需要训练到收敛 模型训练会
  • SQL Server 变量

    变量的种类 在T SQL中 变量按照生存范围分为 局部变量和 全局变量 1 全局变量是由系统定义的 在整个SQL Server实例内都能访问到的变量 以 作为第一个字符 用户只能访问 不可以赋值 2 局部变量由用户定义 生命周期只在一个批处
  • 哈希函数的特征_哈希函数及其特征

    哈希函数的特征 Prerequisite Hashing data structure 先决条件 哈希数据结构 The hash function is the component of hashing that maps the keys
  • 机器学习之SVM支持向量机

    目录 经典SVM 软间隔SVM 核SVM SVM分类器应用于人脸识别 SVM优点 SVM缺点 经典SVM 支持向量机 Support Vector Machine SVM 是一种二分类模型 其基本思想是在特征空间中找到一个最优的超平面 使得