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

支持向量机(SVM): 从理论到实践的指南(1)

支持向量机(SVM)被誉为数据科学领域的重量级算法,是机器学习中不可或缺的工具之一。SVM以其优秀的泛化能力和对高维数据的管理而备受推崇。本文旨在梳理SVM的核心概念以及其在实际场景中的应用。

SVM的核心理念

SVM专注于为二分类问题找到最佳决策边界,即超平面,该平面能最大化两类数据之间的空隙或间隔。线性SVM假设用一个直线(或高维空间中的超平面)足以有效地分隔数据。当遇到重叠或杂乱无章散布的数据时,软间隔SVM允许某些点位于错误的边界一侧,这通过引入松弛变量与罚项系数C来实现,从而提供一个稳健的平衡方案。

算法实现

SVM通过转化优化问题为其对偶形式并使用拉格朗日乘子法来解决。这不仅简化了求解过程,还能自然地加入核技巧(Kernel trick)来处理非线性可分的数据集。
详细算法描述>>>>

一个经典案例

为了具体说明SVM的应用,我们考虑了一个著名的数据集。

  1. 鸢尾花分类:鸢尾花数据集由三个品种的鸢尾花构成,每一种都有50个样本和4个特征。对于二分类任务,我们专注于将Setosa从Versicolour中区分出来。

实践应用

利用MindOpt APL,一种强大的代数建模语言和求解器,我们可以更高效地构建和解决SVM优化问题。在训练阶段,算法学习数据的模式,并找到分隔不同类别的最优决策边界。一旦模型确定,我们便可用其做出预测并评估其在未见数据上的性能。

clear model;####################################################
#
#   Vectorization Modeling Example
#   Linear SVM
#
####################################################option modelname svm_02; #定义存储文件名# ----------建模--------Start----
# svm_02.mapl# 1.读取iris的用于构建SVM模型的训练数据
param data_dir = "./data/iris_data-train.csv";
param X = read_csv( data_dir, use_col="0,1,2,3",skip=1);
param y = read_csv( data_dir, use_col=4,skip=1);
param dataNum = X.row;
param dataDim = X.col;
print "总共有{}个数据,每个数据有{}维"%dataNum,dataDim;# 2.LinearSVM问题建模
param C_rho = 0.2;
print "Param C is :{}"%C_rho;print "Start modeling-------";var w(dataDim) >= -1 <= 1; # Bounded Model Parameter
var b; #
var eps(dataNum) >= 0;minimize 1/2 * w' * w + C_rho * sum(eps); #'是转置,目标函数subto constraint:eps >= 1 - (X*w +b).*y; #注意是向量化建模,因此相当于多条维度的约束# 3.调用求解器求解
print "Start solving-------";
option solver mindopt;
solve;# 4. 超平面的w取值
print "- Optimal w is:";
print w;
print "- Optimal b is:";
print b;
print "- eps is:";
forall { i in 0..dataNum-1 with eps[i] > 0.001}print "  - eps[{}] = {} "%i,eps[i];param obj_total_loss =  1/2 * w' * w + C_rho * sum(eps); #'是转置
print "- obj of total loss is : {}"%obj_total_loss;# 5.验证并分析结果print "";
print "验证结果:-----";param correctNum = sum{i in 0..dataNum-1} if((sum{j in 0..dataDim-1}w[j]*X[i, j]) +b )* y[i] > 0 then 1 else 0 end;
param precision = correctNum / dataNum;
print "- Precision for train data is : {:.2f}" % precision;#
print "";
print "导入测试数据验证效果:-----";param data_dir_test = "./data/iris_data-test.csv";
param X_test = read_csv( data_dir_test, use_col="0,1,2,3",skip=1);
param y_test = read_csv( data_dir_test, use_col=4,skip=1);
param dataNum_test = X_test.row;
param dataDim_test = X_test.col;
print "- 总共有{}个数据,每个数据有{}维"%dataNum_test,dataDim_test;print "|测试数据ID|实际标签|SVM预测标签是|";
print "|--|--|--|";
forall {i in 0..dataNum_test-1}
print "|{}|{}|{}|"%i,y_test[i], if((sum{j in 0..dataDim_test-1}w[j]*X_test[i, j]) +b ) > 0 then 1 else -1 end;

运行上述代码结果如下:

总共有80个数据,每个数据有4维
Param C is :0.2
Start modeling-------
Start solving-------
Running mindoptampl
wantsol=1
MindOpt Version 1.2.1 (Build date: 20240428)
Copyright (c) 2020-2024 Alibaba Cloud.Start license validation (current time : 29-APR-2024 17:51:11).
License validation terminated. Time : 0.007sModel summary.- Num. variables     : 85- Num. constraints   : 80- Num. nonzeros      : 480- Bound range        : [1.0e+00,1.0e+00]- Quad. bound range  : [1.0e+00,1.0e+00]- Objective range    : [2.0e-01,2.0e-01]- Quad. obj. range   : [1.0e+00,1.0e+00]- Matrix range       : [1.0e-01,7.0e+00]Presolver started.
Presolver terminated. Time : 0.000sInterior point method started.Iter         PrimObj         DualObj PrimFea DualFea  GapFea      Mu   Time0 +1.56581101e+01 -1.06624290e+01 2.0e-01 2.6e-01 2.5e+00 6.2e-01   0.02s1 +8.56566249e+00 -7.16779185e-01 5.4e-04 7.6e-03 9.3e+00 6.5e-02   0.04s2 +9.75513434e-01 +2.94267093e-01 2.7e-05 1.4e-03 6.8e-01 4.1e-03   0.05s3 +5.98630319e-01 +4.50898225e-01 4.2e-06 1.5e-04 1.5e-01 8.9e-04   0.05s4 +5.12227038e-01 +4.88329845e-01 1.1e-08 1.2e-03 2.5e-02 1.5e-04   0.05s5 +5.04653750e-01 +5.01437631e-01 9.7e-10 2.0e-04 3.2e-03 1.9e-05   0.06s6 +5.02835294e-01 +5.02808740e-01 2.7e-12 5.4e-07 2.7e-05 1.6e-07   0.06s7 +5.02821164e-01 +5.02821090e-01 7.1e-15 1.5e-09 7.3e-08 4.4e-10   0.06s8 +5.02821125e-01 +5.02821124e-01 1.9e-16 4.1e-12 2.0e-10 1.2e-12   0.06s
Terminated.- Method             : Interior point method.- Primal objective   : 5.0282112458779E-01- Dual objective     : 5.0282112438583E-01- Num. threads       : 4- Num. iterations    : 8- Solver details     : Solver terminated with a primal/dual optimal status.Interior point method terminated. Time : 0.046sOPTIMAL; objective 0.50
0 simplex iterationsCompleted.
- Optimal w is:
[[-0.16610],[ 0.35465],[-0.75422],[-0.32403]]
- Optimal b is:
2.038087831121987
- eps is:- eps[23] = 0.08284647160625058 - eps[24] = 0.05118542249112839 - eps[47] = 0.26241815907236044 - eps[69] = 0.04962685713002854 
- obj of total loss is : 0.5028211245877855验证结果:-----
- Precision for train data is : 1.00导入测试数据验证效果:-----
- 总共有20个数据,每个数据有4|测试数据ID|实际标签|SVM预测标签是|
|--|--|--|
|0|1|1|
|1|1|1|
|2|1|1|
|3|1|1|
|4|1|1|
|5|1|1|
|6|1|1|
|7|1|1|
|8|1|1|
|9|1|1|
|10|-1|-1|
|11|-1|-1|
|12|-1|-1|
|13|-1|-1|
|14|-1|-1|
|15|-1|-1|
|16|-1|-1|
|17|-1|-1|
|18|-1|-1|
|19|-1|-1|

结果

上面的程序运行结果如下:
其中,小数后几位是精度影响,每次会有变化,不影响结果。


总共有80个数据,每个数据有4维
Param C is :0.2
……

  • Optimal w is: [[-0.16610], [ 0.35465], [-0.75422], [-0.32403]]
  • Optimal b is: 2.038087831122001
  • eps is:
    • eps[23] = 0.08284647160625147
    • eps[24] = 0.051185422491125426
    • eps[47] = 0.26241815907236443
    • eps[69] = 0.049626857130028075
  • obj of total loss is : 0.5028211245877853

验证结果:-----

  • Precision for train data is : 1.00

导入测试数据验证效果:-----

  • 总共有20个数据,每个数据有4维
  • 测试数据ID实际标签SVM预测标签是
    011
    111
    211
    311
    411
    511
    611
    711
    811
    911
    10-1-1
    11-1-1
    12-1-1
    13-1-1
    14-1-1
    15-1-1
    16-1-1
    17-1-1
    18-1-1
    19-1-1

可以看到,对于这份数据,计算的超平面能很好地进行二分类,在测试集合上也有100%的正确率,证实了SVM在实际问题中的有效性。

相关文章:

支持向量机(SVM): 从理论到实践的指南(1)

支持向量机&#xff08;SVM&#xff09;被誉为数据科学领域的重量级算法&#xff0c;是机器学习中不可或缺的工具之一。SVM以其优秀的泛化能力和对高维数据的管理而备受推崇。本文旨在梳理SVM的核心概念以及其在实际场景中的应用。 SVM的核心理念 SVM专注于为二分类问题找到最…...

万字长文|OpenAI模型规范(全文)

本文是继《OpenAI模型规范概览》之后对OpenAI Model Spec的详细描述&#xff0c;希望能对各位从事大模型及RLHF研究的朋友有帮助。万字长文&#xff0c;建议收藏后阅读。 一、概述 在AI的世界里&#xff0c;确保技术的行为符合我们的期望至关重要。OpenAI最近发布了一份名为Mo…...

微服务架构-正向治理与治理效果

目录 一、正向治理 1.1 概述 1.2 效率治理 1.2.1 概述 1.2.2 基于流量录制和回放的测试 1.2.3 基于仿真环境的测试 1.3 稳定性治理 1.3.1 概述 1.3.2 稳定性治理模型 1.3.3 基于容器化的稳定性治理 1.3.3.1 概述 1.3.3.2 测试 1.3.3.3 部署 1.3.3.3.1 概述 1.3.3…...

normalizing flows vs 直方图规定化

normalizing flows名字的由来 The base density P ( z ) P(z) P(z) is usually defined as a multivariate standard normal (i.e., with mean zero and identity covariance). Hence, the effect of each subsequent inverse layer is to gradually move or “flow” the da…...

vite打包优化常用的技巧及思路

面试题&#xff1a;vitevue项目如何进行优化&#xff1f; 什么情况下会去做打包优化&#xff1f;一种是在搭建项目的时候就根据自己的经验把vite相关配置给处理好&#xff0c;另外一种是开发的过程中发现打包出来的静态资源越来越大&#xff0c;导致用户访问的时候资源加载慢&a…...

k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)HPA详细解释与案例应用

文章目录 前言HPA简介简单理解详细解释HPA 的工作原理监控系统负载模式HPA 的优势使用 HPA 的注意事项应用类型 应用环境1.metircs-server部署2.HPA演示示例&#xff08;1&#xff09;部署一个服务&#xff08;2&#xff09;创建HPA对象&#xff08;3&#xff09;执行压测 前言…...

台式机ubuntu22.04安装nvidia驱动

总结一个极简易的安装方法 正常安装ubuntu 22.04正常更新软件 sudo apt update sudo apt upgrade -y参考ubuntu官方网站的说明https://ubuntu.com/server/docs/nvidia-drivers-installation#/ # 首先检查系统支持驱动的版本号 sudo ubuntu-drivers list我显示的内容如下&…...

C++ 11 【线程库】【包装器】

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;C修炼之路⏪   &#x1f69a;代码仓库:C高阶&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多C知识   &#x1f51d;&#x1f51d; 目录 前言 一、thread类的简单介绍 get_id…...

可视化数据科学平台在信贷领域应用系列四:决策树策略挖掘

信贷行业的风控策略挖掘是一个综合过程&#xff0c;需要综合考虑风控规则分析结果、效果评估、线上实时监测和业务管理需求等多个方面&#xff0c;以发现和制定有效的信贷风险管理策略。这些策略可能涉及贷款审批标准的调整、贷款利率的制定、贷款额度的设定等&#xff0c;在贷…...

数据查询深分页优化方案

大家好&#xff0c;我是冰河~~ 最近不少小伙伴在实际工作过程中&#xff0c;遇到了单表大数据量分页的问题&#xff0c;问我怎么优化分页查询。其实&#xff0c;这就是典型的深分页问题。今天趁着周末&#xff0c;给大家整理一些在深分页场景的简单处理方案。 一、普通分页查…...

Redis的主从复制

Redis主从复制是 Redis 内置的⼀种数据冗余和备份⽅式&#xff0c;同时也是分发读查询负载的⼀种⽅法。通过主从复制&#xff0c;可以有多个从服务器&#xff08;Slave &#xff09;复制⼀个主服务器&#xff08;Master &#xff09;的数据。在这个系统中&#xff0c;数据的复制…...

网络安全实战基础——实战工具与攻防环境介绍

一、实战集成工具 1. 虚拟机 VMware Workstation&#xff1a;大家熟知的虚拟机 Virtual Box&#xff1a;开源免费、轻量级 2. Kali Linux 工具集 信息收集 Nmap&#xff1a;免费开放的网络扫描和嗅探包&#xff0c;可探测主机是否在线&#xff0c;扫描主机端口和嗅探网络…...

vue2组件封装实战系列之tag组件

作为本系列的第一篇文章&#xff0c;不会过于的繁杂&#xff0c;并且前期的组件都会是比较简单的基础组件&#xff01;但是不要忽视这些基础组件&#xff0c;因为纵观elementui、elementplus还是其他的流行组件库&#xff0c;组件库的封装都是套娃式的&#xff0c;很多复杂组件…...

VBA实战(Excel)(4):实用功能整理

1.后台打开Excel 用于查数据&#xff0c;工作中要打开多个表获取数据再关闭的场景&#xff0c;利用此函数可以将excel表格作为后台数据库查询&#xff0c;快速实现客户要求&#xff0c;缺点是运行效率不够高。 Sub openexcel(exl_name As String)If Dir(addr, 16) Empty Then…...

nginx mirror流量镜像详细介绍以及实战示例

nginx mirror流量镜像详细介绍以及实战示例 1.nginx mirror作用2.nginx安装3.修改配置3.1.nginx.conf3.2.conf.d目录下添加default.conf配置文件3.3.nginx配置注意事项3.3.nginx重启 4.测试 1.nginx mirror作用 为了便于排查问题&#xff0c;可能希望线上的请求能够同步到测试…...

Android14 WMS-窗口添加流程(二)-Server端

Android14 WMS-窗口添加流程(一)-Client端-CSDN博客 本文接着上文"Android14 WMS-窗口添加流程(一)-Client端"往下讲。也就是WindowManagerService#addWindow流程。 目录 一. WindowManagerService#addWindow 标志1&#xff1a;mPolicy.checkAddPermission 标志…...

【传知代码】DETR[端到端目标检测](论文复现)

前言&#xff1a;想象一下&#xff0c;当自动驾驶汽车行驶在繁忙的街道上&#xff0c;DETR能够实时识别出道路上的行人、车辆、交通标志等目标&#xff0c;并准确预测出它们的位置和轨迹。这对于提高自动驾驶的安全性、减少交通事故具有重要意义。同样&#xff0c;在安防监控、…...

Edge浏览器十大常见问题,一次性解决!

Edge曾被称为最好用的浏览器&#xff0c;拳打Chrome脚踢firefox, 可如今却隐藏着像是播放卡顿、下载缓慢、广告繁多等诸多问题&#xff0c;不知道各位还在用吗&#xff1f; 今天小编收集整理了Edge浏览器十大烦人问题&#xff0c;并提供简单有效的解决办法&#xff0c;让你的E…...

lubuntu / ubuntu 配置静态ip

一、查看原始网络配置信息 1、获取网卡名称 ifconfig 2、查询网关IP route -n 二、编辑配置文件 去/etc/netplan目录找到配置文件&#xff0c;配置文件名一般为01-network-manager-all.yaml sudo vim /etc/netplan/01-network-manager-all.yaml文件打开后内容如下 # This …...

15、matlab绘图汇总(图例、标题、坐标轴、线条格式、颜色和散点格式设置)

1、plot()函数默认格式画图 代码&#xff1a; x0:0.1:20;%绘图默认格式 ysin(x); plot(x,y) 2、X轴和Y轴显示范围/axis()函数 代码&#xff1a; x0:0.1:20;%绘图默认格式 ysin(x); plot(x,y) axis([0 21 -1.1 1.1])%设置范围 3、网格显示/grid on函数 代码&#xff1a; …...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...