【机器学习】支持向量机(SVM)的基本概念、如何选择向量机(SVM)的参数以及在python中使用向量机的实例

news2024/9/29 19:13:17

引言

支持向量机(SVM)是一种在机器学习中广泛应用的二分类模型。它的核心思想是寻找一个最优的超平面,将不同类别的样本分隔开来。这个过程涉及到最大化间隔,即找到那些最接近分隔超平面的样本点,这些点被称为支持向量。SVM的目标是确保这些支持向量与分隔超平面的距离尽可能大,从而提高分类的准确性

文章目录

  • 引言
  • 一、支持向量机(SVM)的基本概念
    • 1.1 超平面
    • 1.2 间隔
    • 1.3 支持向量
    • 1.4 训练算法
      • 1.4.1 最优化问题
      • 1.4.2 拉格朗日乘子法
    • 1.5 优点和局限性
      • 1.5.1 优点
      • 1.5.2 局限性
    • 1.6 应用
    • 1.7 总结
  • 二、向量机(SVM)不同的类型
    • 2.1 线性支持向量机
      • 2.1.1 线性可分SVM
      • 2.1.2 线性不可分SVM
    • 2.2 非线性支持向量机
      • 2.2.1 核函数
  • 三、如何选择向量机(SVM)的参数
    • 3.1 选择核函数
    • 3.2 调整参数
      • 3.2.1 C(惩罚参数)
      • 3.2.2 c(RBF核的参数)
      • 3.2.3 degree(多项式核的参数)
    • 3.3 调参技巧
    • 3.4 考虑计算资源
    • 3.5 避免过拟合
    • 3.6 总结
  • 四、在python中使用向量机的实例
    • 4.1 代码
  • 4.2 代码解释

在这里插入图片描述

一、支持向量机(SVM)的基本概念

支持向量机(Support Vector Machine,简称SVM)是一种监督学习算法,用于分类和回归分析

在这里插入图片描述

1.1 超平面

在二维空间中,一条直线可以划分两个类别;在三维空间中,一个平面可以划分两个类别。这种划分的边界被称为超平面。在更高维的空间中,超平面是划分数据的一种线性边界

1.2 间隔

间隔是指超平面与最近的训练样本之间的距离。支持向量机的基本目标是最大化这个间隔,这样可以提高模型的泛化能力

1.3 支持向量

支持向量是指那些位于间隔边界上的样本点。在确定了最优超平面之后,只有支持向量对超平面的位置有影响,其他样本点则没有影响

1.4 训练算法

1.4.1 最优化问题

SVM的训练过程可以看作是一个最优化问题,目标是找到使得间隔最大化的超平面。这通常转化为一个凸二次规划问题

1.4.2 拉格朗日乘子法

为了解决这个最优化问题,通常使用拉格朗日乘子法。通过引入拉格朗日乘子,将原始问题转化为对偶问题,这样可以更容易地求解

1.5 优点和局限性

1.5.1 优点

  • 效果好:在多种不同的应用领域中表现出色
  • 可以处理高维数据:通过核函数,无需直接在高维空间中进行计算
  • 泛化能力强:由于最大化间隔,通常具有良好的泛化能力

1.5.2 局限性

  • 计算复杂度高:对于大规模数据集,SVM的训练时间可能会很长
  • 只适用于二分类:传统的SVM是为二分类问题设计的,虽然可以通过一对多或一对一的方法扩展到多分类问题,但这会使得计算复杂度增加

1.6 应用

SVM在多种领域都有应用,包括文本分类、图像识别、生物信息学等

1.7 总结

支持向量机是一个强大的机器学习工具,特别是当数据集相对较小且特征维度较高时。通过适当选择核函数和调整参数,SVM可以在多种不同的学习任务中取得良好的效果

二、向量机(SVM)不同的类型

2.1 线性支持向量机

2.1.1 线性可分SVM

当数据集是线性可分的,即存在一个超平面可以完美地将两类数据分开时,我们可以使用硬间隔最大化来找到最优超平面

2.1.2 线性不可分SVM

当数据集不是线性可分的时,可以使用软间隔最大化。这涉及到引入松弛变量,允许一些样本点不满足严格的分类条件

2.2 非线性支持向量机

2.2.1 核函数

对于线性问题,SVM通过使用核函数将数据映射到高维空间,在这个高维空间中寻找最优超平面。常用的核函数包括:

  • 线性核
  • 多项式核
  • 径向基函数(RBF)
  • Sigmoid核

三、如何选择向量机(SVM)的参数

选择支持向量机(SVM)的参数是模型调优的关键步骤,这些参数会影响模型的性能和泛化能力。选择支持向量机(SVM)的参数是模型调优的关键步骤,这些参数会影响模型的性能和泛化能力

3.1 选择核函数

首先,需要决定是否使用核技巧以及选择哪种核函数

  • 线性核:如果数据是线性可分的,或者特征维度很高,使用线性核通常是一个好的起点,因为它简单且计算效率高
  • 多项式核:如果数据不是线性可分的,可以尝试多项式核。需要选择合适的次数d
  • 径向基函数(RBF)核:这是最常用的核函数,适用于各种不同的数据集。RBF核包含一个参数γ
  • Sigmoid核:这个核函数较少使用,但在某些特定问题上可能有效

3.2 调整参数

其次,是一些关键参数及其调整方法

3.2.1 C(惩罚参数)

  • 目的C参数用于控制误分类的惩罚程度。C值大意味着分类器会选择一个较小的间隔,以减少训练样本上的错误分类;C值小则意味着分类器会选择一个较大的间隔,允许更多的错误分类
  • 调整方法:使用交叉验证来找到最优的C值。通常,可以在一个较大的范围内进行搜索,例如从0.11000

3.2.2 c(RBF核的参数)

  • 目的c参数定义了单一训练样本的影响范围,即它与超平面的距离。c值大意味着影响范围小,模型复杂度较高;c值小则意味着影响范围大,模型复杂度较低
  • 调整方法:同样,可以使用交叉验证来选择cc的值通常在0.00110之间搜索

3.2.3 degree(多项式核的参数)

  • 目的degree定义了多项式核的次数
  • 调整方法:通常,从较小的值开始(例如23),并根据模型性能逐渐增加

3.3 调参技巧

  • 网格搜索(Grid Search):这是一种常用的方法,通过系统地遍历参数的所有组合来找到最优参数
  • 随机搜索(Random Search):与网格搜索不同,随机搜索在参数空间中随机选取参数组合,这通常比网格搜索更高效
  • 交叉验证:使用交叉验证来评估参数组合的性能。K-折交叉验证是最常用的方法
  • 模型选择准则:除了交叉验证误差,还可以使用AIC、BIC等准则来选择模型

3.4 考虑计算资源

参数的选择也应考虑计算资源。高复杂度的模型可能需要更长的训练时间,且可能需要更多的内存

3.5 避免过拟合

选择参数时,要注意避免过拟合。一个过于复杂的模型可能在训练数据上表现很好,但在未见过的数据上表现不佳

3.6 总结

通过这些步骤,你可以为SVM选择合适的参数,从而构建一个既准确又具有良好泛化能力的模型

四、在python中使用向量机的实例

4.1 代码

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import classification_report, accuracy_score

# 加载乳腺癌数据集
breast_cancer = datasets.load_breast_cancer()
X = breast_cancer.data
y = breast_cancer.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 数据标准化
scaler = StandardScaler()
X_train_std = scaler.fit_transform(X_train)
X_test_std = scaler.transform(X_test)

# 创建SVM分类器实例,这里使用径向基函数(RBF)核
svm = SVC(kernel='rbf', C=10.0, gamma=0.1, random_state=42)

# 训练模型
svm.fit(X_train_std, y_train)

# 测试模型
y_pred = svm.predict(X_test_std)

# 输出分类报告和准确率
report = classification_report(y_test, y_pred)
accuracy = accuracy_score(y_test, y_pred)

print("分类报告:\n", report)
print("准确率:", accuracy)

输出结果:
在这里插入图片描述

4.2 代码解释

  1. 首先加载乳腺癌数据集
  2. 然后将其划分为训练集和测试集
  3. 接下来,对数据进行标准化处理,这是使用SVM时的一个常见步骤
  4. 之后,创建了一个SVM分类器实例,使用RBF核,并设置了C和gamma参数
  5. 最后,训练模型并在测试集上进行评估,打印出分类报告和准确率

使用了径向基函数(RBF)核的SVM分类器,并设置了C和gamma参数

  • C参数控制了误分类的惩罚程度
  • gamma参数定义了单一训练样本的影响范围
  • C和gamma参数的值需要根据具体的数据集进行调整,通常通过交叉验证来选择合适的参数值

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

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

相关文章

3秒AI写真出图,Stable Diffusion2024升级版+使用教程来了!(无需安装,解压即用

前言 要说今年摄影圈最大的新秀 那妥妥的就Stable Diffusion 比如下面的写真照片 你敢信这是SD绘画生成的? 本次教程将使用AI绘画工具 Stable Diffusion 进行讲解,如还未安装SD的小伙伴可以扫描免费获取哦~ 就在刚刚它又全面升级了 新版无需安装&a…

插入移动硬盘后【提示需要格式化】,如何修复?

遇到格式化问题,又想要找回数据,怎么办? 我们只需要一个数据恢复软件就能解决所有数据丢失问题 1、转转大师数据恢复 点击直达链接>>https://www.huifuzhinan.com 恢复数据类型超全面的一个软件,包括但不限于以下几种&…

Python开发者必备利器之Gooey使用详解

概要 在Python开发中,命令行程序是一种常见的方式来与用户交互,但有时候用户更喜欢使用图形界面来操作程序。 为了实现这一转变,我们可以使用非标准模块Gooey,它可以帮助我们将命令行程序快速转换为具有图形用户界面(GUI)的应用程序。 本文将介绍Gooey的基本概念、使用…

矩阵分析 学习笔记2 线性子空间 线性映射

子空间是啥: 平凡子空间:{0}(只有一个0元素)和V(原本的子空间) 向量组生成的子空间: 比如说,我们的三维空间就是由三个标准基组成的向量组“张”成的空间,而标准基组成的…

基于Pytorch框架的深度学习DeepLabv3+网络头发语义分割系统源码

第一步:准备数据 头发分割数据,总共有1050张图片,里面的像素值为0和1,所以看起来全部是黑的,不影响使用 第二步:搭建模型 DeepLabV3的网络结构如下图所示,主要为Encoder-Decoder结构。其中&am…

深度学习基础--模型拟合

模型拟合 损失与网络参数有关,本章着重于探讨如何确定能使损失最小化的参数值。这个过程称为网络参数的学习,或更通俗地说,是模型的训练或拟合。该过程首先是选取一组初始参数值,随后重复执行两个步骤: (i) 计算损失…

张驰咨询:新界泵业六西格玛设计DFSS项目出成果

近日,新界泵业六西格玛设计项目通过专家评审,新界泵业石总等领导、六西格玛设计项目组成员、张驰咨询首席顾问张驰、首席六西格设计顾问赵老师共同出席项目评审会。 (顾问老师致辞) 本期项目涉及多款新产品开发,本期…

Java新手零基础教程!Java 异常详解.^◡^.

Java 异常 Java教程 - Java异常 异常是在运行时在代码序列中出现的异常状况。例如,读取一个不存在的文件。 Java异常是描述异常条件的对象发生在一段代码中。 关键词 Java异常处理通过五个关键字管理: try,catch,throw,throws…

优思学院|质量工程师常用英语【客户投诉篇】

作为质量工程师,你是否曾因国外客户的投诉而不知如何用英语回应,感到困扰? 质量工程师常常面对各种挑战。即使你解决问题的能力很强,但由于不熟悉使用英语,可能会影响客户对你的印象和信任。 接下来,让我…

C#面试题系列--动态更新

C#面试题系列 排版排了半天,也是不好看,那就不排版了,尽量由易到难 高级一些 什么是MVC模式C#中特性是什么?如何使用?C#中什么是反射?C#中的委托是什么 事件是不是一种委托C# 不安全代码C# 隐式类型 varC# linqC# 匿名…

在centos中安装 --nmon性能系统监控工具

参考资料 CentOS安装nmon-CSDN博客 Jmeter(十九):nmon性能系统监控工具_jmeter nmon(1)_jmeter nmon性能系统监控工具详解-CSDN博客 Linux性能监控命令_nmon 安装与使用_nmon安装方法linux-CSDN博客 资源监控工具nmon安装及使用 – TestGo 下载启宏插件 https…

学习日志8.21--防火墙NAT

在学习过基于路由器的NAT网络地址转换,现在学习基于防火墙NAT的网络地址转换,防火墙的NAT配置和路由器的NAT配置还是有比较大的区别。 防火墙NAT是通过NAT策略实现的,在创建防火墙NAT之前需要先创建防火墙的安全策略。防火墙是不能直接在接口…

i2c-tool工具

i2c-tool工具的使用方法 包括i2cdetect、i2cget、i2cset、i2cdump、i2ctransfer i2cdetect命令 该命令用于扫描I2C总线上的设备。 语法:i2cdetect [-y] [-a] [-q|-r] i2cbus [first last]:参数说明:参数y:关闭交互模式&#xf…

GEE 教程:如何实现对指定矢量集合的归一化操作(以北京市各区县面积和边长为例)

简介 数据归一化处理是指将数据按照一定的规则进行变换,使数据落入一个特定的区间范围内。数据归一化处理的目的是消除数据之间的量纲差异,同时保留数据的分布特征,以便更好地进行数据分析和建模。 常见的数据归一化方法有如下几种&#xf…

快讯 | 谷歌AI引擎GameNGen颠覆游戏产业:0代码生成《毁灭战士》

硅纪元快讯栏目,每日追踪AI领域的最新动态,快速汇总最新科技新闻,助您时刻紧跟行业趋势。简明扼要的呈现资讯概要,让您快速了解前沿资讯。 1分钟速览新闻 ChatGPT用户翻倍突破2亿,AI工具融入日常生活 智谱AI发布尖端语…

电工手册 v77.9 — 专业电气知识与实用工具(Mod版)

电工手册是一款专门为电力领域从业者及爱好者设计的知识普及与技能提升应用。无论你是专业电工、DIY爱好者,还是对电力领域有兴趣的学生,这款应用都能为你提供大量实用的资源和工具。内容涵盖电气理论、接线图和计算器等多个方面,旨在帮助用户…

(echarts)散点图怎么给横坐标添加单位

(echarts)散点图怎么给横坐标添加单位 效果: 代码: 拓展-给值加

类在JVM中的工作原理

文章目录 引言I 类在JVM中的工作原理class文件的结构类的生命周期II JVM运行时数据区堆栈的意义栈帧内部结构堆III 在JIT中比较常见的优化手段引言 类是一种抽象概念,它是一种模板,用来定义一类事物的属性和行为。类是面向对象编程的基础,它是一种抽象的概念,代表一类事物…

Java 魔法类 Unsafe 源码解读(一)

Java 魔法类 Unsafe 源码解读(一) 前言 阅读过 JUC 源码的同学,一定会发现很多并发工具都调用了一个叫做 Unsafe 的类。 那这个类的作用是什么呢?有什么使用场景呢?底层源码是什么样呢?这篇文章笔者就带…

uni-app商城小程序+后台管理系统,手把手教你搭建

uni-app商城小程序是一种通过uni-app框架开发的,可以在微信、支付宝、字节跳动等多个平台上运行的轻量级电商应用。 一、特点 跨平台兼容:基于uni-app框架,一次开发,可同时适配微信小程序、支付宝小程序、H5、App等多个平台&…