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

news2024/10/7 5:35:31

一、引言

        支持向量机(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 np

import matplotlib.pyplot as plt

from sklearn import datasets

# 导入数据集

X, y = datasets.make_blobs(n_samples=50, centers=2, random_state=6)

        4.2 训练SVM模型
 

from sklearn.svm import SVC

from 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()]).T

Z = 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的性能受核函数和

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2193582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

watch命令:周期执行指定命令

一、命令简介 ​watch ​命令用于周期性地执行指定的命令,并显示其输出结果。 ‍ 二、命令参数 2.1 命令格式 watch [选项] 命令2.2 选项 ​-n, --interval​: 指定更新间隔时间(以秒为单位)。默认间隔时间为 2 秒。​-d, --difference…

数学与生活

多学科交叉 信号处理 小波 经济 政策 计算机 统计 信号处理与市场分析 经济与数据分析 政策与统计 过去的数学家没有一个是纯粹的数学家;生活中各方面工程的,物理的,天文,地理的,赌博,政治的&#xff1b…

删除AlibabaProtect

首先管理员运行cmd 然后执行下行 sc delete AlibabaProtect重启电脑,再删除该文件夹C:\Program Files (x86)\AlibabaProtect

prometheus学习笔记之PromQL

prometheus学习笔记之PromQL 一、PromQL语句简介 官方文档:https://prometheus.io/docs/prometheus/latest/querying/basics/ Prometheus提供⼀个函数式的表达式语⾔PromQL (Prometheus Query Language),可以使⽤户实时 地查找和聚合时间序列数据&…

vSAN04:vSAN远程数据存储挂载、双节点集群介绍/安装/组件读写/高级配置/故障处理方式

目录 vSAN远程数据存储挂载双节点vSAN集群介绍双节点vSAN集群安装双节点vSAN集群的组件读写方式双节点vSAN的高级配置双节点vSAN故障处理方式 vSAN远程数据存储挂载 在同一个vCenter下的VSAN集群可以互相挂载对方VSAN存储,以达到提高资源利用率的目的。 一个集群最…

Docker系列-5种方案超详细讲解docker数据存储持久化(volume,bind mounts,NFS等)

文章目录 Docker的数据持久化是什么?1.数据卷(Data Volumes)使用Docker 创建数据卷创建数据卷创建一个容器,将数据卷挂载到容器中的 /data 目录。进入容器,查看数据卷内容停止并重新启动容器,数据卷中的数据…

打卡第四天 P1081 [NOIP2012 提高组] 开车旅行

今天是我打卡第四天,做个省选/NOI−题吧(#^.^#) 原题链接:[NOIP2012 提高组] 开车旅行 - 洛谷 题目描述 输入格式 输出格式 输入输出样例 输入 #1 4 2 3 1 4 3 4 1 3 2 3 3 3 4 3 输出 #1 1 1 1 2 0 0 0 0 0 输入 #2 10 4 5 6 1 …

k8s 中存储之 hostPath 卷

目录 1 hostPath 卷介绍 2 hostPath 卷实际应用操作 2.1 创建 pod 资源类型 2.2 修改清单文件增加 hostPath 对应的参数配置 2.3 查看是否创建 卷 和 pod 2.4 创建发布文件测试是否正常访问 1 hostPath 卷介绍 EmptyDir中数据不会被持久化,它会随着Pod的结束而销…

每日一题|2187. 完成旅途的最少时间|二分法、计数器

本题的一个思路是从小到大遍历全部可能的t,并分别计算当前每一辆车所能够行驶的最多trips数量。 但是如果从1开始,结束在最不理想的情况是max(time) * totalTrip,在数据很大的时候很容易time out。 所以不妨对每一个可能的t重新思考性质。随…

STL的位图:bitset

引言 在C标准模板库(STL)中,bitset是一种用于表示固定大小序列的位集合的容器。每个位(bit)可以被独立地设置或清除,即它可以单独地表示0或1。bitset在处理二进制数据时非常有用,尤其是在需要节…

linux安装百度网盘

版本20.04 下载 deb:debian系列,Ubuntu下载这个 rpm:redhat系列 安装 在Downloads中找到,打开终端,使用命令安装 sudo dpkg -i 名称 //dpkg:Debian package在所有文件中找到。

Linux相关概念和易错知识点(12)(命令行参数、环境变量、本地变量)

1.命令行参数 (1)main函数的参数int argc和char* argv[]是什么? main函数可以带参数,即int main(int argc, char* argv[]),(int argc, char* argv[])叫做命令行参数列表,int argc叫参数的个数&a…

【YOLO学习】YOLOv3详解

文章目录 1. 网络结构1.1 结构介绍1.2 改进 2. 训练与测试过程3. 总结 1. 网络结构 1.1 结构介绍 1. 与 YOLOv2 不同的是,YOLOv3 在 Darknet-19 里加入了 ResNet 残差连接,改进之后的模型叫 Darknet-53。在 ImageNet上 实验发现 Darknet-53 相对于 ResN…

VSCODE驯服日记(三):配置C++环境

1. 下载mingw64,解压后把bin并添加到环境变量 1>编译器介绍 mingw:专为windowsgcc:多平台msvc :windows,且配合vs使用更佳 注意与调试器gdb和lldb的区别 2. 安装vscode插件: 安装C/C插件 安装code ru…

力扣之1322.广告效果

题目: sql建表语句: Create table If Not Exists Ads (ad_id int,user_id int,action ENUM (Clicked, Viewed, Ignored) ); Truncate table Ads; insert into Ads (ad_id, user_id, action) values (1, 1, Clicked); insert into Ads (ad_id, use…

Sublime Text 下载地址分享

Sublime Text官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘123云盘为您提供Sublime Text最新版正式版官方版绿色版下载,Sublime Text安卓版手机版apk免费下载安装到手机,支持电脑端一键快捷安装https://www.123684.com/s/kPxoTd-dCnxHSublime Text官方版下载丨最新版下…

双十一可以买什么物品?重磅推荐五款好用品牌!

距离今年的双十一盛典仅剩数十日,您是否已将心爱商品添加至购物车中了呢?还在犹豫未满载的朋友也无需焦虑,特意为您精选了五款好用的宝贝推荐,旨在为您的购物清单增添几分灵感与便捷,期待能为您的双十一购物之旅增添一…

GPU 是否有朝一日可以取代 CPU?

讨论 GPU 是否能够取代 CPU,需要从两者的基本架构、设计目的、性能表现、应用领域等多个方面进行分析。虽然你提到的4060显卡的核心频率接近服务器 CPU 的频率,这看起来似乎有一些相似性,但 GPU 和 CPU 的设计思路和适用场景差异显著&#xf…

18448 最小生成树

### 思路 使用Kruskal算法求解图的最小生成树。Kruskal算法通过对所有边按权值排序,然后逐步选择最小权值的边,确保不会形成环,直到构建出最小生成树。 ### 伪代码 1. 读取输入的结点数n和边数m。 2. 读取每条边的信息,存储在边列…

羊城杯2024WP

羊城杯-2024 web web2 进题信息搜集一下,dirsearch发现了login路由可访问,先随便点一下,发现了一个文件读取: http://139.155.126.78:30148/lyrics?lyricsRain.txt 我尝试了一下: http://139.155.126.78:30148/lyrics…