当前位置: 首页 > 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;确…...

文件查找与打包压缩,文件发送

grep&#xff1a;文件内容过滤 [roothostname ~]# grep root /etc/passwd从/etc/passwd文件中过滤root字段 root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [roothostname ~]# grep nologin$ /etc/passwd //$以..结尾 ^以..开头 b…...

sv标准研读第十二章-过程性编程语句

书接上回&#xff1a; sv标准研读第一章-综述 sv标准研读第二章-标准引用 sv标准研读第三章-设计和验证的building block sv标准研读第四章-时间调度机制 sv标准研读第五章-词法 sv标准研读第六章-数据类型 sv标准研读第七章-聚合数据类型 sv标准研读第八章-class sv标…...

MySQL-联合查询

1.简介 1.1为什么要使用联合查询 在数据设计时由于范式的要求&#xff0c;数据被拆分到多个表中&#xff0c;那么要查询⼀个条数据的完整信息&#xff0c;就 要从多个表中获取数据&#xff0c;如下图所⽰&#xff1a;要获取学⽣的基本信息和班级信息就要从学⽣表和班级表中获…...

突触可塑性与STDP:神经网络中的自我调整机制

突触可塑性与STDP&#xff1a;神经网络中的自我调整机制 在神经网络的学习过程中&#xff0c;突触可塑性&#xff08;Synaptic Plasticity&#xff09;是指神经元之间的连接强度&#xff08;突触权重&#xff09;随着时间的推移而动态变化的能力。这种调整机制使神经网络能够通…...

【小沐学GIS】QGIS导出OpenStreetMap数据(QuickOSM、OSM)

文章目录 1、简介1.1 OSM1.2 QuickOSM1.3 Overpass Turbo 2、插件安装3、插件使用3.1 快速查询&#xff08;boundary边界&#xff09;3.2 快速查询&#xff08;railway铁路&#xff09;3.3 快速查询&#xff08;boundaryadmin_level行政边界&#xff09;3.4 快速查询&#xff0…...

推荐一款强大的书签管理工具,让你的网址不在落灰

在信息爆炸的互联网时代&#xff0c;我们每天都会浏览大量的网页&#xff0c;收藏各种各样的网址。然而&#xff0c;随着时间的推移&#xff0c;这些杂乱无章的书签往往让我们感到头疼。别担心&#xff0c;今天我要向你推荐一款强大的书签管理工具&#xff0c;它将帮助你轻松整…...

Python 工具库每日推荐 【Matplotlib】

文章目录 引言Python数据可视化库的重要性今日推荐:Matplotlib工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:数据分析可视化案例分析高级特性自定义样式动画效果3D绘图性能优化技巧扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 T…...

在远程非桌面版Ubuntu中使用Qt5构建Hello World项目

在 Linux 下运行 Qt 应用程序&#xff0c;需要完成以下几个步骤&#xff0c;包括安装 Qt 工具、设置开发环境以及编译和运行项目。下面是详细的步骤&#xff1a; 1. 安装 Qt 1.1使用系统包管理器 sudo apt update 和 sudo apt install qt5-default qtcreator 命令用于更新 U…...

netty之基础aio,bio,nio

前言 在Java中&#xff0c;提供了一些关于使用IO的API&#xff0c;可以供开发者来读写外部数据和文件&#xff0c;我们称这些API为Java IO。IO是Java中比较重要知识点&#xff0c;且比较难学习的知识点。并且随着Java的发展为提供更好的数据传输性能&#xff0c;目前有三种IO共…...

在找工作吗?给你一个AI虚拟面试官助力你提前准备面试

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 让AI点亮我们的生活&#xff0c;是Shelly对…...