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

一、什么是支持向量机

        支持向量机(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.xdnf.cn/news/149808.html

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

相关文章

思维导图在线工具哪家强?2024年最新评测

你用过思维导图工具吗?如果品尝需要对事情进行逻辑理顺操作或者需要增强记忆点那我比较推荐使用思维导图在线工具来解决这些问题。这篇文章我将介绍几款思维导图工具来提高我们的效率。 1.福晰思维导图 链接一下:https://www.pdf365.cn/naotu/ 这款思…

C++网络编程之网络模型

概述 所谓网络模型,是指一组定义了网络通信功能和行为的规则和标准。这些模型通过将网络通信功能分解成不同的层次,使得网络通信更加模块化,也更易于理解和实施。每一层都有其特定的功能,通过层与层之间的交互,确保数据…

基于Qt5.12.2开发 MQTT客户端调试助手

项目介绍 该项目是一个基于 Qt 框架开发的桌面应用程序,主要用于与 MQTT 服务器进行连接和通信。通过该应用,用户可以连接到 MQTT 服务器,订阅主题、发布消息并处理接收到的消息。项目使用 QMqttClient 类来实现 MQTT 协议的客户端功能&…

代码随想录Day17 图论-2

103. 水流问题 本题思路很简单 要求我们找到可以满足到达两个边界的单元格的坐标 有一个优化的思路就是 我们从边界的节点向中间遍历 然后用两个数组表示 一个是第一组边界的数组 一个是第二边界的数组 如果两个数组都遍历到了某一个单元格 就说明该单元格时满足题目要求的 #…

初识Java(六)(一维数组)(自己学习整理的资料)

目录 一.复习题 二.数组 三.一维数组 四.数组排序 五.数组的插入和删除 1.插入元素 插入元素案例 2.删除元素 删除元素案例 六.顺序查找 顺序查找案例 七.二分查找 二分查找案例 八.冒泡排序 笔记 一.复习题 (一)求S1!2&#x…

微软宣称其新工具可纠正人工智能幻觉 但专家依然对此表示怀疑

人工智能经常胡言乱语,微软现在说它有办法解决这个问题,但我们有理由对此持怀疑态度。微软今天发布了一项名为"更正"(Correction)的服务,它可以自动修改人工智能生成的与事实不符的文本。Correction 首先会标…

Golang | Leetcode Golang题解之第435题无重叠区间

题目&#xff1a; 题解&#xff1a; func eraseOverlapIntervals(intervals [][]int) int {n : len(intervals)if n 0 {return 0}sort.Slice(intervals, func(i, j int) bool { return intervals[i][1] < intervals[j][1] })ans, right : 1, intervals[0][1]for _, p : ra…

js实现多行文本控件textarea,根据文本内容自适应窗口全部显示

概述 本人在使用html控件textarea&#xff0c;多行显示的时候&#xff0c;希望根据后台实际的文本&#xff0c;来全部显示文本内容&#xff0c;而不用再去操作滚动条查看全部文本。 本功能实现的难点在于&#xff0c;计算当前文本显示有多少行。 软件环境 编辑器&#xff1a…

使用 UWA Gears 测试小游戏性能

UWA Gears 是UWA最新发布的无SDK性能分析工具。针对移动平台&#xff0c;提供了实时监测和截帧分析功能&#xff0c;帮助您精准定位性能热点&#xff0c;提升应用的整体表现。 随着小游戏的规模和用户量持续增长&#xff0c;玩家对于小游戏的性能要求也越来越高。为了能够给玩…

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

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

1.1 elasticsearch分布式集群基本搭建(centos7.x + elaticsearch7.11.1)

【1】分布式分片集群基础概念 【1.1】ES的分布式集群有什么用&#xff1f; 高可用 高可用(High Availability)是分布式系统架构设计中必须考虑的因素之一&#xff0c;它通常是指&#xff0c;通过设计减少系统不能提供服务的时间。如果系统每运行100个时间单位&#xff0c;会有…

ubuntu22.04磁盘挂载(多磁盘和单磁盘挂载)

多磁盘挂载到同一个目录 # 如果没有安装逻辑卷管理系统工具sudo apt install lvm2 # 查看磁盘分区sudo fdisk -l # 新建物理卷sudo pvcreate /dev/nvme0n1 /dev/nvme1n1 # 查看现有物理卷信息sudo pvdisplay # 新建物理卷sudo vgcreate dnyjy_vg /dev/nvme0n1 /dev/nvme1n1…

微服务之服务保护

Sentinel引入Java项目中 一&#xff1a;安装Sentinel 官网地址&#xff1a;https://github.com/alibaba/Sentinel/releases 二&#xff1a;安装好后在sentinel-dashboard.jar所在目录运行终端 三&#xff1a;运行命令&#xff0c;端口自己指定 java -Dserver.port8090 -Dcs…

Unity 热更新(HybridCLR+Addressable)-资源更新

七、资源更新 创建一个叫Aot的文件夹&#xff0c;用来存放不会热更新的资源 这个修改为第三个 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b8be5e6465184ad5ad6173c6870bfa06.png 这个是更新 在更新或者打包时遇到端口被占的报错&#xff0c;不用理会&#xf…

frp内网穿透常见问题

Frp编译和部署比较复杂&#xff0c;多端口映射时或者连接数多的情况下会出现不稳定的现象&#xff0c;不适合小白使用&#xff0c;而且仅是上一代的内网穿透技术&#xff0c;生产环境使用建议选择稳定性比较高的产品&#xff0c;如神卓互联、花生壳等&#xff0c;都是采用C语言…

Springboot原理之bean的依赖功能、自动配置

1. Bean管理 Spring 当中提供的注解 Component 以及它的三个衍 生注解&#xff08; Controller 、 Service 、 Repository &#xff09;来声明 IOC 容器中的 bean 对象&#xff0c;同时我们也学 习了如何为应用程序注入运行时所需要依赖的 bean 对象&#xff0c;也就是依赖注…

电池快充协议芯片

1&#xff1a;18650充电快充规则 电池知识 | 东莞市恒帝电子科技有限公司 (heldee.com) 锂电池快速充电知识【钜大锂电】 (juda.cn)18 锂电池和18650锂电池能不能快速充电&#xff0c;四种充电方式讲解 | 东莞市恒帝电子科技有限公司 (heldee.com) 2&#xff1a;国产厂家 …

光子架与电子架 -- 主从子架

主从子架模式可以实现物理上的多个子架在网管上作为一个网元统一管理&#xff0c;这样可以节省IP资源与管理开销&#xff0c;方便维护。 主从子架级联模式 在主从子架模式下&#xff0c;仅主子架可以和网管相连。和网管相连的主子架所在网元为网关网元。主从子架支持树型级联和…

node-rtsp-stream、jsmpeg.min.js实现rtsp视频在web端播放

1. 服务地址&#xff08;私有&#xff09;&#xff1a;https://gitee.com/nnlss/video-node-server 2.node-rtsp-stream 需要安装FFMPEG&#xff1b; 3.给推拉流做了开关&#xff0c;可借助http请求&#xff0c;有更好方式可联系&#xff1b; 4.存在问题&#xff1a; 1&…

浅谈提示工程之In-context learning技术

提示工程之In-context learning技术&#xff1b; 通过一张图片围绕下边几个方面进行简单说明 概念起因本质结构注意事项 日常总结