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

支持向量机(SVM)基础教程

一、引言

        支持向量机(Support Vector Machine,简称SVM)是一种高效的监督学习算法,广泛应用

于分类和回归分析。SVM以其强大的泛化能力、简洁的数学形式和优秀的分类效果而备受机器学

习领域的青睐。

二、SVM基本原理

        2.1 最大间隔分类器

        SVM的核心目标是寻找一个最优的超平面,该超平面能够将不同类别的样本尽可能完美地分

开,并且最大化分类间隔。分类间隔是指超平面到最近的数据点的距离,这个距离越大,模型的泛

化能力通常越强。

        2.2 函数间隔与几何间隔

        函数间隔:一个标量,表示超平面正确分类样本的程度。

                函数间隔越大,表示分类器的信心越强。

        几何间隔:函数间隔的归一化形式,考虑了超平面的法向量。

                几何间隔更直观地反映了数据点到超平面的实际距离。

        2.3 支持向量

        支持向量是那些位于分类间隔边缘的数据点。

        在最优超平面确定后,只有支持向量对超平面的位置有影响,而其他数据点则不会影响超平

面的位置。

三、SVM算法步骤

        3.1 数据预处理

        在应用SVM之前,通常需要对数据进行预处理,包括特征缩放、去除缺失值、异常值处理

等,以确保算法的性能不受数据尺度的影响。

        3.2 构建优化问题

        SVM的优化问题可以表述为

        3.3 求解优化问题     

        3.4 计算超平面参数

        3.5 构建分类器

四、SVM应用实例

        下面是一个使用Python和scikit-learn库实现SVM分类器的示例。

        4.1 导入数据
 

import numpy as npimport matplotlib.pyplot as pltfrom sklearn import datasets# 导入数据集X, y = datasets.make_blobs(n_samples=50, centers=2, random_state=6)

        4.2 训练SVM模型
 

from sklearn.svm import SVCfrom sklearn.preprocessing import StandardScaler# 数据归一化scaler = StandardScaler()X_scaled = scaler.fit_transform(X)# 创建SVM模型clf = SVC(kernel='linear', C=1.0)# 训练模型clf.fit(X_scaled, y)

        4.3 可视化分类结果

# 绘制数据点plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=y, cmap=plt.cm.Paired,edgecolors='k')# 绘制超平面ax = plt.gca()xlim = ax.get_xlim()ylim = ax.get_ylim()xx = np.linspace(xlim[0], xlim[1], 30)yy = np.linspace(ylim[0], ylim[1], 30)YY, XX = np.meshgrid(yy, xx)xy = np.vstack([XX.ravel(), YY.ravel()]).TZ = clf.decision_function(xy).reshape(XX.shape)ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])# 绘制支持向量ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100,facecolors='none', edgecolors='k')plt.title('SVM with Linear Kernel')plt.show()

        4.4 结果分析

        运行上述代码,我们可以得到如下分类结果图:

        从图中可以看出,SVM成功地将两类数据分开,并且找到了最大间隔的超平面。

        黑色实线表示最优超平面,黑色虚线表示分类间隔。

        红色和蓝色点表示不同类别的样本点,黑色圆圈表示支持向量。

五、SVM的核技巧

        当数据不是线性可分时,SVM可以通过引入核技巧来处理非线性问题。

        核技巧允许SVM在原始特征空间中非线性地映射数据到高维特征空间,然后在高维空间中寻

找最优超平面。

        5.1 常见的核函数       

        5.2 选择合适的核函数

        选择合适的核函数对于SVM的性能至关重要。

        通常,我们可以通过交叉验证和网格搜索来找到最优的核函数和参数。

六、SVM参数选择

        在实现支持向量机(SVM)时,参数的选择对模型的性能有着决定性的影响。

        下面是一些关键的SVM参数及其详细说明:

        1. 正则化参数 C

        定义:C是SVM中的一个正则化参数,它控制着模型对误分类的容忍度。

        在SVM中,我们希望找到一个既能最大化分类间隔又能最小化误分类的决策边界。

        作用

        当C值较大时,模型会尝试将所有训练样本正确分类,这可能会导致模型过于复杂,从而产生

过拟合。过拟合意味着模型在训练数据上表现很好,但在未见过的新数据上表现不佳。

        当C值较小时,模型允许更多的误分类,这可能会导致欠拟合。欠拟合的模型过于简单,无法

捕捉数据的真实结构。

        调整建议

                如果训练误差远低于验证误差,可能是因为模型过拟合,此时应减小C值。

                如果训练误差和验证误差都很高,可能是因为模型欠拟合,此时应增大C值。

                通常,通过交叉验证来选择合适的C值,以找到泛化能力最强的模型。

2. 核函数参数

        定义:核函数参数决定了核函数的形状和映射方式,这些参数对于处理非线性问题至关重

要。

        常见的核函数参数有:

        调整建议

        核函数参数的选择通常依赖于数据集的特性。

        可以通过网格搜索和交叉验证来找到最优的参数组合。 

        3. 核函数类型

        定义:核函数类型决定了数据在特征空间中的映射方式。

        选择合适的核函数

                对于线性可分的数据,线性核函数通常是最佳选择,因为它简单且计算效率高。

                对于非线性问题,可以选择多项式核、RBF核或sigmoid核。

                选择核函数时,需要考虑数据的分布和问题的复杂性。

        通常,RBF核是一个通用的选择,因为它可以映射到无限维的特征空间。

七、总结

        本文详细介绍了支持向量机(SVM)的基本原理、算法步骤、核技巧以及在Python中的实

现。

        SVM是一种强大的机器学习算法,适用于多种分类和回归问题。但是SVM的性能受核函数和

参数选择的影响较大,因此在实际应用中,需要根据具体问题进行适当的调整和优化。

相关文章:

支持向量机(SVM)基础教程

一、引言 支持向量机(Support Vector Machine,简称SVM)是一种高效的监督学习算法,广泛应用 于分类和回归分析。SVM以其强大的泛化能力、简洁的数学形式和优秀的分类效果而备受机器学 习领域的青睐。 二、SVM基本原理 2.1 最大间…...

Python小示例——质地不均匀的硬币概率统计

在概率论和统计学中,随机事件的行为可以通过大量实验来研究。在日常生活中,我们经常用硬币进行抽样,比如抛硬币来决定某个结果。然而,当我们处理的是“质地不均匀”的硬币时,事情就变得复杂了。质地不均匀的硬币意味着…...

京东web 京东e卡绑定 第二部分分析

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 有相关问题请第一时间头像私信联系我删…...

【数据结构与算法】Greedy Algorithm

1) 贪心例子 称之为贪心算法或贪婪算法,核心思想是 将寻找最优解的问题分为若干个步骤每一步骤都采用贪心原则,选取当前最优解因为没有考虑所有可能,局部最优的堆叠不一定让最终解最优 贪心算法是一种在每一步选择中都采取在当前状态下最好…...

Ubuntu22.04之mpv播放器高频快捷键(二百七十)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…...

新闻推荐系统:Spring Boot的可扩展性

6系统测试 6.1概念和意义 测试的定义:程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为: 目的:发现程序的错误; 任务:通过在计算机上执行程序,暴露程序中潜在的错误。 另一个…...

目录工具类 - C#小函数类推荐

此文记录的是目录工具类。 /***目录工具类Austin Liu 刘恒辉Project Manager and Software DesignerE-Mail: lzhdim163.comBlog: http://lzhdim.cnblogs.comDate: 2024-01-15 15:18:00***/namespace Lzhdim.LPF.Utility {using System.IO;/// <summary>/// The Objec…...

速盾:如何判断高防服务器的防御是否真实?

随着网络攻击日益增多和攻击手段的不断升级&#xff0c;保护网络安全变得越来越重要。高防服务器作为一种提供网络安全保护的解决方案&#xff0c;受到了越来越多的关注。然而&#xff0c;对于用户来说&#xff0c;如何判断高防服务器的防御是否真实&#xff0c;是否能够真正保…...

MySQL连接查询:联合查询

先看我的表结构 emp表 联合查询的关键字&#xff08;union all, union&#xff09; 联合查询 基本语法 select 字段列表 表A union all select 字段列表 表B 例子&#xff1a;将薪资低于5000的员工&#xff0c; 和 年龄大于50 岁的员工全部查询出来 第一种 select * fr…...

Gitea 数据迁移

一、从 Windows 迁移 Gitea 1. 备份 Gitea 数据 1.1 备份仓库文件 在 Windows 中&#xff0c;Gitea 仓库文件通常位于 C:\gitea\data\repositories。你可以使用压缩工具将该目录打包&#xff1a; 1.&#xff09;右键点击 C:\gitea\data\repositories 目录&#xff0c;选择 “…...

MySQL 绪论

数据库相关概念 数据库&#xff08;DB&#xff09;&#xff1a;存储数据的仓库数据库管理系统&#xff08;DBMS&#xff09;&#xff1a;操纵和管理数据库的大型软件SQL&#xff1a;操纵关系型数据库的编程语言&#xff0c;定义了一套操作关系型数据库的统一标准主流的关系型数…...

什么是 HTTP Get + Preflight 请求

当在 Chrome 开发者工具的 Network 面板中看到 GET Preflight 的 HTTP 请求方法时&#xff0c;意味着该请求涉及跨域资源共享 (CORS)&#xff0c;并且该请求被预检了。理解这种请求的背景&#xff0c;主要在于 CORS 的工作机制和现代浏览器对安全性的管理。 下面是在 Chrome …...

(JAVA)开始熟悉 “二叉树” 的数据结构

1. 二叉树入门 ​ 符号表的增删查改操作&#xff0c;随着元素个数N的增多&#xff0c;其耗时也是线性增多的。时间复杂度都是O(n)&#xff0c;为了提高运算效率&#xff0c;下面将学习 树 这种数据结构 1.1 树的基本定义 ​ 树是我们计算机中非常重要的一种数据结构&#xf…...

【Linux】Linux命令与操作详解(一)文件管理(文件命令)、用户与用户组管理(创建、删除用户/组)

文章目录 一、前言1.1、Linux的文件结构是一颗从 根目录/ 开始的一个多叉树。1.2、绝对路径与相对路径1.3、命令的本质是可执行文件。1.4、家目录 二、文件管理2.1、文件操作1、pwd2、ls3、cd4、touch5、mkdir6、cp7、rm8、mv9、rmdir 2.2、查看文件1、cat2、more3、less4、hea…...

Hadoop大数据入门——Hive-SQL语法大全

Hive SQL 语法大全 基于语法描述说明 CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION] path; SELECT expr, ... FROM tbl ORDER BY col_name [ASC | DESC] (A | B | C)如上语法&#xff0c;在语法描述中出现&#xff1a; []&#xff0c;表示可选&#xff0c;如上[LOCATI…...

个人开发主页

网站 GitHubCSDN知乎豆包Google百度 多媒体 ffmpeg媒矿工厂videolanAPPLE开发者官网华为开发者官网livevideostack高清产业联盟github-xhunmon/VABloggithub-0voice/audio_video_streamingdoom9streamingmediaFourCC-wiki17哥Depth.Love BlogOTTFFmpeg原理介绍wowzavicuesof…...

思维+数论,CF 922C - Cave Painting

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 922C - Cave Painting 二、解题报告 1、思路分析 诈骗题 我们发现 n mo…...

如何下单PCB板和STM贴片服务- 嘉立创EDA

1 PCB 下单 1.1 PCB 设计好&#xff0c;需要进行DRC 检查。 1.2 生成gerber文件、坐标文件和BOM文件 1.3 打开嘉立创下单助手 上传gerber文件 1.4 选择下单数量 1.5 选择板材&#xff0c; 一般常用板材 PR4 板材。 1.6 如果需要阻抗匹配&#xff0c;需要选择设计的时候阻抗叠…...

MySQL连接查询:外连接

先看我的表结构 dept表 emp表 外连接分为 1.左外连接 2.右外连接 1.左外连接 基本语法 select 字段列表 FORM 表1 LEFT [OUTER] JOIN 表2 ON 条件;例子&#xff1a;查询emp表的所有数据&#xff0c;和对应部门的员工信息&#xff08;左外连接&#xff09; select e.*, d.n…...

108页PPT丨OGSM战略规划框架:实现企业目标的系统化方法论

OGSM战略规划框架是一种实现企业目标的系统化方法论&#xff0c;它通过将组织的目标&#xff08;Objectives&#xff09;、目标&#xff08;Goals&#xff09;、策略&#xff08;Strategies&#xff09;和衡量指标&#xff08;Measures&#xff09;进行系统化整合&#xff0c;确…...

ArcSWAT建模踩坑记:你的土壤数据库参数算对了吗?聊聊SPAW的那些默认值和单位陷阱

ArcSWAT土壤参数校准实战&#xff1a;避开SPAW计算中的5个致命误区 当水文模拟结果与实测数据出现系统性偏差时&#xff0c;经验丰富的建模者会首先检查土壤参数——这个隐藏在界面背后的"沉默变量"往往是误差的最大来源。SPAW作为ArcSWAT推荐的土壤参数计算工具&…...

STM32F407移植QP状态机踩坑实录:从编译报错到成功运行,我解决了这三个关键问题

STM32F407移植QP状态机踩坑实录&#xff1a;从编译报错到成功运行&#xff0c;我解决了这三个关键问题 在嵌入式开发中&#xff0c;状态机是一种极其重要的编程范式&#xff0c;它能有效管理复杂系统的行为逻辑。QP&#xff08;Quantum Platform&#xff09;作为一款轻量级的状…...

从内存视角拆解float和double:用C语言和调试器带你‘看见’IEEE754的二进制世界

从内存视角拆解float和double&#xff1a;用C语言和调试器带你‘看见’IEEE754的二进制世界 在计算机科学中&#xff0c;浮点数的表示和处理是一个既基础又关键的话题。对于从事系统编程、性能优化或逆向工程的开发者来说&#xff0c;理解浮点数在内存中的实际存储形式不仅能帮…...

从零构建现代化Web控制面板:安全架构与实时监控实践

1. 项目概述&#xff1a;一个为开发者设计的现代化控制面板最近在GitHub上看到一个挺有意思的项目&#xff0c;叫clawpanel&#xff0c;作者是kweephyo-pmt。光看名字&#xff0c;你可能会联想到“爪子”和“面板”&#xff0c;感觉像是个带点攻击性或工具属性的管理界面。实际…...

城通网盘解析工具终极指南:免费获取高速直连下载地址

城通网盘解析工具终极指南&#xff1a;免费获取高速直连下载地址 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否厌倦了城通网盘那令人抓狂的下载速度&#xff1f;每次下载文件都要面对漫长的等待…...

终极指南:如何为PotPlayer配置百度翻译插件实现实时字幕翻译

终极指南&#xff1a;如何为PotPlayer配置百度翻译插件实现实时字幕翻译 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu PotPlayer_Sub…...

终极指南:如何在Mac上免费快速导出微信聊天记录

终极指南&#xff1a;如何在Mac上免费快速导出微信聊天记录 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因误删重要微信聊天记录而焦虑&#xff1f;或需要查找…...

Docker化OpenOffice部署:文档自动化转换服务实战指南

1. 项目概述与核心价值最近在折腾一个老项目&#xff0c;需要处理一批.odt格式的文档&#xff0c;这让我想起了那个曾经在开源办公软件领域与微软Office分庭抗礼的“老将”——OpenOffice。虽然现在LibreOffice的风头更盛&#xff0c;但OpenOffice依然有其独特的生态位和用户群…...

怎么判断一家工厂还在不在正常生产?6 类活跃度信号,从纸面到现场

跑工厂的销售员都遇到过这种事&#xff1a;手机里存着一份名单&#xff0c;导航开两小时&#xff0c;到门口才发现卷帘门焊死、车间长草、保安说"厂子去年就搬了"。 问题出在哪&#xff1f;大多数人判断"这家工厂在不在"&#xff0c;靠的是工商登记——执照…...

Tea印相失效诊断清单:从--v 6.2到--v 6.6,6个版本兼容性断点及降级回滚方案(含JSON config快照备份包)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Tea印相失效诊断清单&#xff1a;从--v 6.2到--v 6.6&#xff0c;6个版本兼容性断点及降级回滚方案&#xff08;含JSON config快照备份包&#xff09; Tea印相&#xff08;TeaYinXiang&#xff09;在 v…...