详解机器学习经典模型(原理及应用)——支持向量机

一、什么是支持向量机

        支持向量机(Support Vector Machine, SVM)是一种强大的机器学习算法,可用于解决数据分类(二分类)和回归问题。在分类问题上,SVM的核心思想是在特征空间中找到一个最优的超平面,这个超平面能够最大化地分开不同类别的数据点,即最大化两类数据点之间的间隔;而在回归问题中,支持向量机的目标是找到一个函数,该函数在给定的数据点上有最小的预测误差,与分类问题中最大化两类数据点之间的间隔不同,回归问题关注的是找到一个合适的函数,使得实际值和预测值之间的差异最小。支持向量机与其他机器学习/深度学习不一样的地方在于,其他方法往往通过降维解决问题(比如神经网络每一层神经元数量的递减设置),而支持向量机是通过升维直至维度高到足以满足分类/回归要求来解决问题的。

二、支持向量机的原理

1、最优超平面

        SVM的目标是找到一个超平面,使得不同类别的数据点之间的间隔(margin)最大化。间隔定义为从超平面到最近的数据点(支持向量)的最短距离。对于线性可分的情况,SVM的优化问题可以表示为:

min_{w,b}\frac{1}{2}||w||^{2}

        受以下约束条件,对于所有的i,有:

y_{i}(wx_{i}+b)\geqslant 1

        其中,w是超平面的法向量,b是超平面的偏置项,x_{i}是数据点,y_{i}是数据点的标签,取值为 +1 或 -1,wx_{i}+b是数据点到超平面的距离。

2、软间隔

        在现实世界中,数据往往不是完全线性可分的。为了处理这种情况,SVM引入了软间隔(soft margin)的概念,允许一些数据点违反间隔规则。软间隔SVM的优化问题可以表示为:

min_{w,b,\varepsilon }\frac{1}{2}||w||^{2}+C\sum_{i=1}^{n}\varepsilon _{i}

        受以下条件约束,对于所有的i,有:

y_{i}(wx_{i}+b)\geqslant 1-\varepsilon _{i}

\varepsilon _{i}\geqslant 0

        其中,\varepsilon _{i}是松弛变量,用于处理间隔违规,C是惩罚参数,控制间隔违规的严重性。

3、核技巧

        当数据不是线性可分时,SVM可以使用核技巧将数据映射到高维空间,在这个空间中寻找线性分割,这就是我们前面说到的通过升维解决问题。核函数的选择取决于数据的特性和问题的需求,常见的核函数包括:

        (1)线性核

K(x_{i},x_{j}) = x_{i}x_{j}

        这里,x_{i}x_{j}是数据集中的两个特征向量,取两向量的点积(内积)。线性核相当于假设数据在原始空间中已经是线性可分的,因此不需要映射到高维空间。

        (2)径向基函数RBF核

        径向基函数(Radial Basis Function, RBF)核,也称为高斯核,是支持向量机(SVM)中常用的核函数之一。它在机器学习中的作用是将原始数据映射到高维空间,使得在原始空间中线性不可分的数据在高维空间中变得线性可分:

K(x_{i},x_{j}) = exp(-\gamma ||x_{i}-x_{j}||^{2})

        其中,x_{i}x_{j}是输入空间中的两个样本;\gamma是核函数的参数,它决定了单个训练样本的影响范围,通常需要通过交叉验证来选择;||x_{i}-x_{j}||是样本之间的欧几里得距离。

        (3)多项式核

        多项式核(Polynomial Kernel)是支持向量机中的一种核函数,它允许SVM在高维空间中处理非线性问题。多项式核通过将原始特征映射到一个更高维的空间,使得数据在这个新空间中变得线性可分:

K(x_{i},x_{j}) = (\gamma x_{i}x_{j}+r)^d

        其中,x_{i}x_{j}是数据集中的两个特征向量;\gamma是核函数的参数,也称为缩放系数或核函数的系数;r是一个常数,为偏置项;dd 是多项式的度数,它决定了多项式的阶数。

三、支持向量机求解

        SVM的优化问题通常通过拉格朗日乘子法(知道名字就行,面试官都不一定记得公式推导。。)来求解,转化为对偶问题

max_{\alpha }\sum_{i=1}^{n}\alpha _{i}-\frac{1}{2}\sum_{i,j=1}^{n}y_{i}y_{j}\alpha _{i}\alpha_{j}K(x_{i},x_{j})

        受以下约束条件,对于所有i,有:

\sum_{i=1}^{n}\alpha _{i}y_{i} = 0

0\leqslant \alpha _{i}\leqslant C

        其中,\alpha _{i}是拉格朗日乘子,K(x_{i},x_{j})是核函数。最终,模型参数w和b可以通过\alpha计算得到:

w = \sum_{i=1}^{n}\alpha_{i}y_{i}x_{i}

b = y_{i}-\sum_{j=1}^{n}\alpha_{j}y_{j}K(x_{i},x_{j})

四、支持向量机应用

1、分类

        虽然SVM是二分类模型,但是诸如scikit-learn之类的第三方库已经构建了一整套完整的代码使得我们可以直接使用SVM进行多分类。

# 导入必要的库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target# 数据预处理:标准化特征
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)# 创建 SVM 分类器实例
# 可以选择不同的核函数,如 'linear', 'poly', 'rbf', 'sigmoid'
# 在scikit-learn中,SVC类提供了decision_function_shape参数,可以用来控制决策函数的形状,从而支持多分类。默认情况下,decision_function_shape='ovr',这意味着使用一对多策略。
svm_classifier = SVC(kernel='rbf', C=1.0)  # C 是正则化参数# 训练模型
svm_classifier.fit(X_train, y_train)# 在测试集上进行预测
y_pred = svm_classifier.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')# 可打印支持向量
print("Support vectors:")
print(svm_classifier.support_vectors_)

2、回归

# 导入必要的库
from sklearn.datasets import load_boston
from sklearn.svm import SVR
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import StandardScaler# 加载波士顿房价数据集
boston = load_boston()
X = boston.data
y = boston.target# 数据预处理:标准化特征
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)# 创建 SVM 回归器实例
# 可以选择不同的核函数,如 'linear', 'poly', 'rbf'
svr = SVR(kernel='rbf', C=100, gamma=0.1, epsilon=0.1)# 训练模型
svr.fit(X_train, y_train)# 在测试集上进行预测
y_pred = svr.predict(X_test)# 计算均方误差(MSE)
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse:.2f}')# 可计算决定系数 R^2
r2 = svr.score(X_test, y_test)
print(f'R^2 Score: {r2:.2f}')

五、总结

        支持向量机在实际业务中有诸多应用,对于特征量较大、特征关系呈现非线性或者内存有限的情况,支持向量机都是常用的解决方案。

1、优点

        (1)有效的分类性能:在许多实际应用中,SVM提供了非常有效的分类性能。

        (2)核技巧:SVM的核技巧允许它在高维空间中找到复杂的决策边界。

        (3)内存效率:SVM只与支持向量有关,这使得它在内存使用上非常高效。

        (4)鲁棒性:SVM对于数据中的噪声和异常值具有一定的鲁棒性。

        (5)适用于小样本数据:SVM在小样本数据集上也能表现良好。

2、缺点

        (1)计算复杂度:SVM的计算复杂度较高(因为要不断升维计算),尤其是在处理大规模数据集时。

        (2)参数选择:SVM的性能依赖于核函数和惩罚参数的选择,这需要大量的实验来确定最佳参数。

        (3)不支持在线学习:SVM不适用于在线学习或实时更新模型的场景。

        (4)解释性差:相比于决策树等模型,SVM的决策过程较难解释。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jupyter安装与使用——Ubuntu服务器

jupyter安装与使用——Ubuntu服务器 一、安装miniconda3/anaconda31. 下载miniconda32. 安装miniconda33. 切换到bin文件夹4. 输入pwd获取路径5. 打开用户环境编辑页面6. 重新加载用户环境变量7. 初始化conda8.验证是否安装成功9.conda配置 二、安装jupyter2.1 conda安装2.2 配…

视频汇聚/视频存储/安防视频监控EasyCVR平台RTMP推流显示离线是什么原因?

视频汇聚/视频存储/安防视频监控EasyCVR视频汇聚平台兼容性强、支持灵活拓展,平台可提供视频远程监控、录像、存储与回放、视频转码、视频快照、告警、云台控制、语音对讲、平台级联等视频能力。 EasyCVR安防监控视频综合管理平台采用先进的网络传输技术&#xff0…

PHP探索校园新生态校园帮小程序系统小程序源码

探索校园新生态 —— 校园帮小程序系统,让生活更精彩! 🌱【开篇:走进未来校园,遇见新生态】🌱 你是否厌倦了传统校园的繁琐与单调?是否渴望在校园里也能享受到便捷、智能的生活体验&#xff1…

MySQL基础篇(黑马程序员2022-01-18)

1 MySQL数据库概述 1.1 MySQL数据库的下载,安装,启动停止 1.2 数据模型 (1)关系型数据库(RDBMS) 概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。 特点: A. 使用表存储数据,格式统一,便于维护。…

Windows版本下Redis安装与使用---详解

目录 1、下载Redis压缩包 2、解压到文件夹 3、启动Redis服务 4、打开Redis客户端进行连接 5、使用一些基础操作来测试 6、Redis常用的服务指令 7、C#项目使用redis 8、C#中使用StackExchange.Redis库操作Redis 9、执行 Redis 命令 10、常见报错和相关指令 1、下载Redi…

C语言——文件操作

目录 文件是什么 程序文件 数据文件 二进制文件和文本文件 文件名 文件的作用 文件的打开和关闭 流和标准流 流 标准流 文件指针 文件打开和关闭 打开文件:fopen 关闭文件:fclose 测试代码 文件具体操作 顺序读写 fputc ​编辑 fget…

【有啥问啥】 Self-Play技术:强化学习中的自我进化之道

Self-Play技术:强化学习中的自我进化之道 在人工智能的快速发展中,强化学习(Reinforcement Learning, RL)已成为推动智能体自主学习与优化的关键力量。Self-Play技术,作为强化学习领域的一项前沿创新,通过…

【智能大数据分析 | 实验一】MapReduce实验:单词计数

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML&a…

git学习报告

文章目录 git学习报告如何配置vscode终端安装PowerShell安装 Microsoft.Powershell.Preview使用 git的使用关于团队合作 git指令本地命令:云端指令 git学习报告 如何配置vscode 安装powershell调教window终端,使其像Linux一样,通过Linux命令…

现代桌面UI框架科普及WPF入门1

现代桌面UI框架科普及WPF入门 文章目录 现代桌面UI框架科普及WPF入门桌面应用程序框架介绍过时的UI框架MFC (Microsoft Foundation Class)缺点 经典的UI框架**WinForms****QT****WPF** 未来的UI框架**MAUI****AvaloniaUI** WPF相对于Winform,QT,MFC的独立…

SysML图例-病毒检测设备

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> SysML图中词汇 SiNW-FET Silicon nanowire field-effect transistors,硅纳米线-场效应晶体管 更多信息可参见: 用于新冠检测的场效应晶体管生物传…

将CSS OKLCH颜色转换为十六进制HEX颜色和十六进制整数格式

我查找了全网都查不到OKLCH()方法是颜色转换方法,那今天小编就给大家分享我的方法,可能会有点点误差,但是大体不影响。 程序员必备宝典https://tmxkj.top/#/示例:oklch(0.253267 0.015896 252.418) 得到H…

YOLOv10改进,YOLOv10主干网络替换为VanillaNet( CVPR 2023 华为提出的全新轻量化架构),大幅度涨点

摘要 基础模型的核心理念是“更多即不同”,这一理念在计算机视觉和自然语言处理领域取得了惊人的成功。然而,变压器模型的优化挑战和固有复杂性呼唤一种向简化转变的范式。在本研究中,引入了 VanillaNet,一种拥抱设计优雅的神经网络架构。通过避免高深度、快捷方式和复杂操…

多级目录SQL分层查询

需求&#xff1a;有多级目录&#xff0c;而目录的层级是不固定的&#xff0c;如下图所示&#xff1a; 数据结构&#xff1a; sql语句&#xff1a; <select id"getList" resultType"com.hikvision.idatafusion.dhidata.bean.vo.knowledgebase.KnowledgeBaseT…

瑞芯微RK3566鸿蒙开发板Android11修改第三方输入法为默认输入法

本文适用于触觉智能所有支持Android11系统的开发板修改第三方输入法为默认输入法。本次使用的是触觉智能的Purple Pi OH鸿蒙开源主板&#xff0c;搭载了瑞芯微RK3566芯片&#xff0c;类树莓派设计&#xff0c;是Laval官方社区主荐的一款鸿蒙开发主板。 一、安装输入法并查看输入…

Fyne ( go跨平台GUI )中文文档-Fyne总览(二)

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2​​​​​​​ 这是一个系列文章&#xff1a; Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne…

大数据-146 Apache Kudu 安装运行 Dockerfile 模拟集群 启动测试

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

BERT训练环节(代码实现)

1.代码实现 #导包 import torch from torch import nn import dltools #加载数据需要用到的声明变量 batch_size, max_len 1, 64 #获取训练数据迭代器、词汇表 train_iter, vocab dltools.load_data_wiki(batch_size, max_len) #其余都是二维数组 #tokens, segments, vali…

OceanBase 3.X 高可用 (一)

OceanBase 3.X 高可用&#xff08;一&#xff09; 一、分布式核心 OceanBase 3.x 采用的是paxos 协议&#xff0c;与raft协议相比。其复杂程度高&#xff0c;实现技术难度大。 Paxos 协议允许事务日志乱序发送&#xff0c;顺序提交。raft允许事务顺序发送&#xff0c;顺序提…

关于 NLP 应用方向与深度训练的核心流程

文章目录 主流应用方向核心流程&#xff08;5步&#xff09;1.选定语言模型结构2.收集标注数据3.forward 正向传播4.backward 反向传播5.使用模型预测真实场景 主流应用方向 文本分类文本匹配序列标注生成式任务 核心流程&#xff08;5步&#xff09; 基本流程实现的先后顺序…