支持向量机(SVM): 从理论到实践的指南(2)
葡萄酒数据集经常被用于机器学习、模式识别和统计分类算法的测试中。由于其特征维度较高,非常适合于验证特征选择和降维方法,例如主成分分析(PCA)或线性判别分析(LDA)的效果。同时,由于数据集包含多个分类,它也经常被用作分类算法(如决策树、随机森林、支持向量机等)的标准测试集。
前篇我们讲述了用SVM做鸢尾花二分类识别器,本篇我们用前篇相似的代码,更换一个维度更高的数据进行测试。
葡萄酒分类:葡萄酒数据集是另一个分类问题,但特征数量增至13个。任务是根据化学组份将葡萄酒分为两个不同的类别。
数据示例:用SVM做葡萄酒二分类识别器
问题和数据说明
这里数据截取自wine数据,根据13维的描述数值,识别葡萄酒的类别。由于本文讲述二分类,我们在3种类别中选取两种类别,标签变更为1和-1,整理得到数据data/wine_data.csv。
部分数据如下:
| label | f1 | f2 | f3 | f4 | f5 | f6 | f7 | f8 | f9 | f10 | f11 | f12 | f13 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 14.23 | 1.71 | 2.43 | 15.6 | 127 | 2.8 | 3.06 | 0.28 | 2.29 | 5.64 | 1.04 | 3.92 | 1065 |
| 1 | 13.2 | 1.78 | 2.14 | 11.2 | 100 | 2.65 | 2.76 | 0.26 | 1.28 | 4.38 | 1.05 | 3.4 | 1050 |
| 1 | 13.16 | 2.36 | 2.67 | 18.6 | 101 | 2.8 | 3.24 | 0.3 | 2.81 | 5.68 | 1.03 | 3.17 | 1185 |
| … | … | … | … | … | … | … | … | … | … | … | … | … | … |
| -1 | 13.27 | 4.28 | 2.26 | 20 | 120 | 1.59 | 0.69 | 0.43 | 1.35 | 10.2 | 0.59 | 1.56 | 835 |
| -1 | 13.17 | 2.59 | 2.37 | 20 | 120 | 1.65 | 0.68 | 0.53 | 1.46 | 9.3 | 0.6 | 1.62 | 840 |
| -1 | 14.13 | 4.1 | 2.74 | 24.5 | 96 | 2.05 | 0.76 | 0.56 | 1.35 | 9.2 | 0.61 | 1.6 | 560 |
源码
MindOpt团队开发的代数建模语言MAPL(MindOpt Algebra Programming Language, MindOptAPL,简称为MAPL),可以用来编码上面的问题,并且调用求解器进行求解。
MAPL的V2.4版本上新了向量化建模的语法,可以方便地实现矩阵的转置、矩阵乘法等功能,详情>>。
完整代码如下:
clear model;####################################################
#
# Vectorization Modeling Example
# Linear SVM
#
####################################################option modelname svm_03; #定义存储文件名# ----------建模--------Start----
# svm_02.mapl# 1.读取iris的用于构建SVM模型的训练数据
param data_dir = "./data/wine_data-train.csv";
param X = read_csv( data_dir, use_col="1,2,3,4,5,6,7,8,9,10,11,12,13",skip=1);
param y = read_csv( data_dir, use_col=0,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/wine_data-test.csv";
param X_test = read_csv( data_dir_test, use_col="1,2,3,4,5,6,7,8,9,10,11,12,13",skip=1);
param y_test = read_csv( data_dir_test, use_col=0,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;
运行上述代码结果如下:
总共有87个数据,每个数据有13维
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:15).
License validation terminated. Time : 0.007sModel summary.- Num. variables : 101- Num. constraints : 87- Num. nonzeros : 1305- 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.7e-01,1.7e+03]Presolver started.
Presolver terminated. Time : 0.001sInterior point method started.Iter PrimObj DualObj PrimFea DualFea GapFea Mu Time0 +3.80399778e-01 -7.55707692e-01 1.9e-02 1.1e-02 1.1e+00 4.6e-03 0.02s1 +1.79640739e-01 -2.13996063e-01 8.2e-03 5.0e-03 3.9e-01 1.5e-03 0.03s2 +1.17952681e-01 -1.13914883e-01 5.2e-03 2.0e-02 2.3e-01 7.1e-04 0.03s3 +3.61389193e-02 -2.62084850e-02 1.5e-03 5.8e-03 6.2e-02 2.0e-04 0.04s4 +3.41691834e-02 -2.09031242e-02 1.4e-03 5.1e-03 5.5e-02 1.9e-04 0.04s5 +3.40036247e-02 +5.83432924e-02 1.3e-03 2.2e-02 4.6e-02 2.3e-04 0.04s6 +8.36408587e-02 -4.76077416e-01 8.4e-04 7.9e-02 5.6e-01 2.1e-04 0.04s7 +1.25803855e-01 +1.83665783e-01 5.0e-04 1.8e-02 5.8e-02 2.9e-04 0.05s8 +2.08232448e-01 +3.51342692e-01 1.1e-04 1.7e-02 1.4e-01 9.2e-05 0.05s9 +2.24640702e-01 +3.15349667e-01 5.2e-05 1.6e-02 9.1e-02 5.4e-05 0.05s10 +2.38702568e-01 +2.37176375e-01 1.4e-07 3.5e-04 2.6e-03 1.3e-05 0.05s11 +2.36599665e-01 +2.36546454e-01 4.5e-10 2.0e-06 6.0e-05 3.0e-07 0.05s12 +2.36550609e-01 +2.36550442e-01 1.2e-12 5.5e-09 1.8e-07 9.2e-10 0.06s13 +2.36550464e-01 +2.36550464e-01 1.5e-16 1.3e-11 4.3e-11 3.5e-14 0.06s
Terminated.- Method : Interior point method.- Primal objective : 2.3655046415330E-01- Dual objective : 2.3655046419623E-01- Num. threads : 4- Num. iterations : 13- Solver details : Solver terminated with a primal/dual optimal status.Interior point method terminated. Time : 0.046sOPTIMAL; objective 0.24
0 simplex iterationsCompleted.
- Optimal w is:
[[ 0.04857],[ 0.01247],[ 0.05512],[-0.13231],[ 0.02318],[ 0.27035],[ 0.46883],[-0.01722],[ 0.13966],[-0.17157],[ 0.06461],[ 0.32124],[ 0.00143]]
- Optimal b is:
-3.307435311971387
- eps is:
- obj of total loss is : 0.23655046415329972验证结果:-----
- Precision for train data is : 1.00导入测试数据验证效果:-----
- 总共有20个数据,每个数据有13维
|测试数据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|
结果解析
运行结果如下:
总共有87个数据,每个数据有13维 Param C is :0.2
……
- Optimal w is: [[ 0.04857], [ 0.01247], [ 0.05512], [-0.13231], [ 0.02318], [ 0.27035], [ 0.46883], [-0.01722], [ 0.13966], [-0.17157], [ 0.06461], [ 0.32124], [ 0.00143]]
- Optimal b is: -3.3074353121126
- eps is:
- obj of total loss is : 0.23655046414945333
验证结果:-----
- Precision for train data is : 1.00
导入测试数据验证效果:-----
- 总共有20个数据,每个数据有13维
| 测试数据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 |
可以看到,我们使用通用MindOpt求解器,也能实现SVM“训练”葡萄酒的分类器。
相关文章:
支持向量机(SVM): 从理论到实践的指南(2)
葡萄酒数据集经常被用于机器学习、模式识别和统计分类算法的测试中。由于其特征维度较高,非常适合于验证特征选择和降维方法,例如主成分分析(PCA)或线性判别分析(LDA)的效果。同时,由于数据集包…...
PDF格式分析(八十六)——修订注释(Redaction)
修订注释(PDF 1.7及其以上版本),该注释的做用是标识要从文档中删除的内容。 修订注释启用的步骤如下: 1、内容标识。PDF编辑器可指定应删除的文档内容片段或区域,在执行下一个步骤前,用户可以看到、移动和重新定义这些注释。 2、内容移除。PDF阅读器应删除修订注释指…...
【python】flask中Session忽然取不到存储内容怎么办?
尚未确定,后续更新,先别以此为准。 【背景】 用flask写的Web应用,运行不正常,查看原因,发现视图函数a中设定的session内容在视图函数b忽然拿不到了。 【分析】 这个应用在两个服务器间互相Hook,因此可能涉及跨域的问题。 视图函数a设置的session,再次从前端调用视图…...
05-腾讯云Copilot及 向量数据库AI套件介绍
1 Andon Copilot核心功能介绍 2 Andon Copilot覆盖腾讯云售后、售前场景 3 腾讯云向量数据库– AI套件效果 AI 套件是腾讯云向量数据库(Tencent Cloud VectorDB)提供的一站式文档检索解决方案,包含自动化文档解析、信息补充、向量化、内容检…...
软件版本库管理工具
0 Preface/Foreword 常用代码版本管理工具包括如下几种: Git,最基本管理工具,由Linux kernel开发者开发Repo,主要用于管理Android SDK,由Google开发Gerrit,代码审查软件 1 Git 最基本的代码版本库管理工…...
LVS负载均衡集群企业级应用实战-LVS/NAT模式(三)
目录 LVS/NAT模式 一. 环境准备 二. 对虚拟服务器操作 三. 对真实服务器操作 四. 打开网站验证 LVS/NAT模式 一. 环境准备 统一关闭防火墙和selinux,时间同步,配置好YUM源系统发行版选择会用就可以,这里也是两种一起使用学习。用的不同系…...
在Spring中如何手动开启事务(使用编程式事务)
这里写自定义目录标题 一、使用 transactionManager1、向容器中注入事务管理器2、使用 transactionManager 提交事务3、测试 二、使用TransactionTemplate1、向容器中注入 TransactionTemplate2、开启事务 一、使用 transactionManager 1、向容器中注入事务管理器 Configurat…...
cv的优势
计算机视觉(CV)技术是一种通过计算机对图像、视频等视觉数据进行分析和理解的技术。它在多个领域有着广泛的应用,包括图像识别、目标检测、人脸识别、无人驾驶等。下面是一些计算机视觉技术的优势和挑战的例子: 优势:…...
基于某评论的TF-IDF下的LDA主题模型分析
完整代码: import numpy as np import re import pandas as pd import jieba from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.decomposition import LatentDirichletAllocationdf1 pd.read_csv(小红书评论.csv) # 读取同目录下csv文件…...
四、Nginx配置文件-负载均衡
目录 一、负载均衡的作用 二、负载均衡状态 三、负载均衡的指令 1、upstream 指令 2、server指令 四、负载均衡几种方式 1、轮询(Round Robin 常用) 2、IP Hash (较少) 3、最少连接数(Least Connections 较少&…...
ofd文件预览
文件列表 <template><div><div classfile v-if$myUtils.coll.isNotEmpty(filesList)><div classfile-view><div classfile-view-item :style{justifyContent: align } v-for(item, index) in filesList :keyindex><img classfile-view-item-…...
浅浅了解下Spring中生命周期函数(Spring6全攻略)
你好,这里是codetrend专栏“Spring6全攻略”。 Spring框架设计生命周期回调函数的主要目的是为了提供一种机制,使开发人员能够在对象创建、初始化和销毁等生命周期阶段执行特定的操作。这种机制可以帮助开发人员编写更加灵活和可维护的代码。 举个例子…...
建议收藏!亚马逊卖家必须知道的37个常用术语解释
运营亚马逊,经常会看到很多个专业术语,想必大部分新手卖家都比较陌生,熟悉这些常用术语的含义有助于你更好地运营亚马逊。下面为各位整理了37个在亚马逊跨境电商中常见的术语及其解释,建议收藏! 1、SKU Stock Keeping…...
黑苹果睡眠总是自动唤醒(RTC)
黑苹果睡眠总是自动唤醒【RTC】 1. 问题2. 解决方案2.1. 查看重启日志2.2. 配置Disable RTC wake scheduling补丁 3. 后续4. 参考 1. 问题 黑苹果EFI 更换后,总是在手动 睡眠后,间歇性重启,然后再次睡眠,然后再重启。原因归结为&…...
【代码随想录训练营】【Day 49+】【动态规划-8】| Leetcode 121, 122, 123
【代码随想录训练营】【Day 49】【动态规划-8】| Leetcode 121, 122, 123 需强化知识点 买卖股票系列 题目 121. 买卖股票的最佳时机 动态规划贪心:记录左侧的最小值 class Solution:def maxProfit(self, prices: List[int]) -> int:# n len(prices)# # 0…...
k8s metrics-server服务监控pod 的 cpu、内存
项目场景: 需要开启指标服务,依据pod 的 cpu、内存使用率进行自动的扩容或缩容 pod 的数量 解决方案: 下载 metrics-server 组件配置文件: wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/…...
电脑自带录屏在哪?电脑录屏,4个详细方法
在现代社会中,越来越多的人需要在电脑上录制视频,比如录制游戏操作、制作教学视频、演示文稿等等。因此,电脑录屏成为了一项非常重要的功能。那么电脑自带录屏在哪?本文将带领大家看看可以使用哪些方法进行录屏。 录屏方法一&…...
[Cloud Networking] Layer3 (Continue)
文章目录 1. DHCP Protocol1.1 DHCP 三种分配方式1.2 DHCP Relay (中继) 2. 路由协议 (Routing Protocol)2.1 RIP (Routing Information Protocol)2.2 OSPF Protocol2.2.1 OSPF Area2.2.2 Route ID / DR / BDR2.2.3 LSA / OSPF 邻居表 / LSDB / OSPF路由表 2.3 BGP Protocol2.4…...
missing authentication credentials for REST request
1、报错截图 2、解决办法 将elasticsearch的elasticsearch.yml的 xpack.security.enabled: true 改为 xpack.security.enabled: false...
Unity 从0开始编写一个技能编辑器_02_Buff系统的生命周期
工作也有一年了,对技能编辑器也有了一些自己的看法,从刚接触时的惊讶,到大量工作时觉得有一些设计的冗余,在到特殊需求的修改,运行效率低时的优化,技能编辑器在我眼中已经不再是神圣不可攀的存在的…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
