【机器学习】机器学习的基本分类-监督学习-支持向量机(Support Vector Machine, SVM)

支持向量机是一种强大的监督学习算法,主要用于分类问题,但也可以用于回归和异常检测。SVM 的核心思想是通过最大化分类边界的方式找到数据的最佳分离超平面。


1. 核心思想

目标

给定训练数据 (x_i, y_i),其中 x_i \in \mathbb{R}^n 是特征向量,y_i \in \{-1, 1\} 是标签,SVM 的目标是找到一个超平面将数据分开,同时最大化分类边界的间隔。

决策函数

超平面可以表示为:

f(x) = w^T x + b

其中:

  • w 是超平面的法向量。
  • b 是偏置项,决定超平面与原点的距离。

分类条件

  • f(x) > 0 \Rightarrow y = 1
  • f(x) < 0 \Rightarrow y = -1

优化目标

最大化边界的间隔(Margin),即:

\max \frac{2}{\|w\|}

同时满足分类条件:

y_i (w^T x_i + b) \geq 1, \quad \forall i

通过拉格朗日对偶问题,最终转化为凸优化问题求解。


2. 线性 SVM

损失函数

对线性可分的数据,优化问题为:

\min \frac{1}{2} \|w\|^2 \quad \text{subject to } y_i (w^T x_i + b) \geq 1

当数据不可完全分离时,引入松弛变量 \xi_i

\min \frac{1}{2} \|w\|^2 + C \sum_{i=1}^n \xi_i \quad \text{subject to } y_i (w^T x_i + b) \geq 1 - \xi_i

  • C 是正则化参数,控制对误分类的容忍度。

3. 非线性 SVM

对于线性不可分的数据,SVM 使用核技巧(Kernel Trick)将数据映射到高维特征空间,使其在高维空间中线性可分。

核函数

核函数 K(x_i, x_j) 表示输入数据在高维空间的内积:

K(x_i, x_j) = \phi(x_i)^T \phi(x_j)

常用核函数:

  1. 线性核

K(x_i, x_j) = x_i^T x_j

  1. 多项式核

K(x_i, x_j) = (\gamma x_i^T x_j + r)^d

  1. 高斯核(RBF)

K(x_i, x_j) = \exp\left(-\gamma \|x_i - x_j\|^2\right)

  1. Sigmoid 核

K(x_i, x_j) = \tanh(\gamma x_i^T x_j + r)


4. SVM 的分类过程

  1. 训练阶段:通过优化问题学习权重 w 和偏置 b。
  2. 预测阶段:计算输入数据到超平面的距离,决定类别标签。

5. 优势与劣势

优势

  1. 适合高维数据:在高维数据中仍表现良好。
  2. 非线性处理能力强:通过核技巧解决非线性问题。
  3. 全局最优解:优化问题是凸的,不容易陷入局部最优。

劣势

  1. 效率问题:对大规模数据或高维特征数据训练速度较慢。
  2. 参数敏感性:核函数和正则化参数 C、核参数(如 \gamma)需要精心调试。
  3. 对噪声敏感:容易受到噪声数据的影响。

6. 代码示例

以下是使用 sklearn 实现 SVM 的分类示例。

分类示例

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score# 加载数据
iris = datasets.load_iris()
X = iris.data[:, :2]  # 取前两个特征
y = (iris.target != 0).astype(int)  # 二分类任务# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 训练 SVM 模型
model = SVC(kernel='linear', C=1.0)
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估
print("Accuracy:", accuracy_score(y_test, y_pred))

输出结果

Accuracy: 1.0

核函数示例

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score# 加载数据
iris = datasets.load_iris()
X = iris.data[:, :2]  # 取前两个特征
y = (iris.target != 0).astype(int)  # 二分类任务# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 使用 RBF 核
model_rbf = SVC(kernel='rbf', gamma=0.7, C=1.0)
model_rbf.fit(X_train, y_train)# 预测与评估
y_pred_rbf = model_rbf.predict(X_test)
print("Accuracy with RBF kernel:", accuracy_score(y_test, y_pred_rbf))

输出结果

Accuracy with RBF kernel: 1.0

7. 应用场景

  1. 文本分类与情感分析:如垃圾邮件分类。
  2. 图像分类:如手写数字识别。
  3. 生物信息学:如基因分类。
  4. 异常检测:如检测网络入侵。

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

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

相关文章

Linux命令进阶·如何切换root以及回退、sudo命令、用户/用户组管理,以及解决创建用户不显示问题和Ubuntu不显示用户名只显示“$“符号问题

目录 1. root用户&#xff08;超级管理员&#xff09; 1.1 用于账户切换的系统命令——su 1.2 退回上一个用户命令——exit 1.3 普通命令临时授权root身份执行——sudo 1.3.1 为普通用户配置sudo认证 2. 用户/用户组管理 2.1 用户组管理 2.2 用户管理 2.2.1 …

Zero to JupyterHub with Kubernetes中篇 - Kubernetes 常规使用记录

前言&#xff1a;纯个人记录使用。 搭建 Zero to JupyterHub with Kubernetes 上篇 - Kubernetes 离线二进制部署。搭建 Zero to JupyterHub with Kubernetes 中篇 - Kubernetes 常规使用记录。搭建 Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s。 参考&…

《Python基础》之Python中可以转换成json数据类型的数据

目录 一、JSON简介 JSON有两种基本结构 1、对象&#xff08;Object&#xff09; 2、数组&#xff08;Array&#xff09; 二、将数据装换成json数据类型方法 三、在Python中&#xff0c;以下数据类型可以直接转换为JSON数据类型 1、字典&#xff08;Dictionary&#xff09…

若依项目源码阅读

源码阅读 前端代码分析 代码生成器生成的前端代码有两个&#xff0c;分别是course.js用于向后端发送ajax请求的接口代码&#xff0c;另一个是index.vue&#xff0c;用于在浏览器展示课程管理的视图组件。前端的代码是基于vue3elementplus。 template用于展示前端组件别的标签…

C#tabcontrol如何指定某个tabItem为默认页

// Selects tabPage2 using SelectedTab.this.tabControl1.SelectedTab tabPage2; 参考链接 TabControl.SelectedTab 属性 (System.Windows.Forms) | Microsoft Learnhttps://learn.microsoft.com/zh-cn/dotnet/api/system.windows.forms.tabcontrol.selectedtab?viewnetfr…

速盾:高防 CDN 可以配置客户端请求超时配置?

在高防 CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;的运行管理中&#xff0c;客户端请求超时配置是一项重要的功能设定&#xff0c;它对于优化网络资源分配、保障服务质量以及维护系统稳定性有着关键意义。 一、客户端请求超时配置的概念 …

文件比较和文件流

文件比较和文件流 一、文本比较工具 diff1.基本用法1.1输出格式 2.常用选项 二、文件流1.文件的打开模式2.文件流的分类ifstreamofstreamfstrem区别 3.文件流的函数1. 构造函数2. is_open 用于判断文件是否打开3. open4. getline5. close6. get()7. read8. write9. put10. gcou…

【网络篇】HTTP知识

键入网址到网页显示&#xff0c;期间发生了什么&#xff1f; 浏览器第一步是解析URL&#xff0c;这样就得到了服务器名称和文件的路径名&#xff0c;然后根据这些信息生成http请求&#xff0c;通过DNS查询得到我们要请求的服务器地址&#xff0c;然后添加TCP头、IP头以及MAC头&…

【解决安全扫描漏洞】---- 检测到目标站点存在 JavaScript 框架库漏洞

1. 漏洞结果 JavaScript 框架或库是一组能轻松生成跨浏览器兼容的 JavaScript 代码的工具和函数。如果网站使用了存在漏洞的 JavaScript 框架或库&#xff0c;攻击者就可以利用此漏洞来劫持用户浏览器&#xff0c;进行挂马、XSS、Cookie劫持等攻击。 1.1 漏洞扫描截图 1.2 具体…

互联网基础

TCP/IP协议&#xff08;协议组&#xff09; 分层名称TCP/IP协议应用层HTTP,FTP,mDNS,WebSocket,OSC...传输层TCP&#xff0c;UDP网络层IP链路层&#xff08;网络接口层&#xff09;Ethernet&#xff0c;Wi-Fi... 链路层&#xff08;网络接口层&#xff09; 链路层的主要作用…

【分组去重】.NET开源 ORM 框架 SqlSugar 系列

&#x1f4a5; .NET开源 ORM 框架 SqlSugar 系列 &#x1f389;&#x1f389;&#x1f389; 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列…

hdlbits系列verilog解答(Exams/m2014 q4d)-89

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 本节实现以下电路。 模块声明 module top_module ( input clk, input in, output out); 思路: 它的输入是一个组合逻辑异或门,将输入和输出异或后输入D触发器,这意味着输出与历史输出及当前输入都有关系,…

Cesium K-means自动聚合点的原理

Cesium K-means自动聚合点的原理 Cesium 是一个开源的 JavaScript 库&#xff0c;用于在 Web 环境中创建 3D 地球和地图应用。它能够处理地理空间数据&#xff0c;并允许开发者对大规模的地理数据进行可视化展示。在一些应用中&#xff0c;尤其是当处理大量地理坐标点时&#…

计算机网络课程设计:理论与实践全解析

标题&#xff1a;计算机网络课程设计&#xff1a;理论与实践全解析 计算机网络课程设计是计算机专业培养学生动手能力和理论联系实际的重要环节。通过设计并实现实际项目&#xff0c;学生能够更深刻地理解网络协议、网络通信及应用开发的核心技术。本文将从课程设计的选题、实施…

【代码随想录|贪心算法02】

122.买股票的最佳时机 题目链接https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii 好巧妙的一道题啊&#xff0c;做之前完全不会想到这种解法。 局部最优&#xff1a;收集每天正利润 全局最优&#xff1a;求得最大利润 这道题只让你返回最大的利润和&…

网络安全开源组件

本文只是针对开源项目进行收集&#xff0c;如果后期在工作中碰到其他开源项目将进行更新。欢迎大家在评论区留言&#xff0c;您在工作碰到的开源项目。 祝您工作顺利&#xff0c;鹏程万里&#xff01; 一、FW&#xff08;防火墙&#xff09; 1.1 pfSense pfSense项目是一个免费…

将面具贴到人脸上的过程

使用OpenCV进行人脸面具贴合和变形以适应人脸的3D透视角度&#xff0c;通常需要以下步骤&#xff1a; 人脸检测&#xff1a;首先需要检测图像中的人脸位置。特征点检测&#xff1a;在检测到的人脸区域中&#xff0c;找到关键特征点&#xff0c;如眼睛、鼻子、嘴巴等。透视变换…

Kafka如何保证消息可靠?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka如何保证消息可靠&#xff1f;】面试题。希望对大家有帮助&#xff1b; Kafka如何保证消息可靠&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Kafka通过多种机制来确保消息的可靠性&#xff0c;主要包…

yolov5 解决:export GIT_PYTHON_REFRESH=quiet

当我们在第一次运行YOLOv5中的train.py程序时&#xff1a;可能会出现以下报错&#xff1a; This initial warning can be silenced or aggravated in the future by setting the $GIT_PYTHON_REFRESH environment variable. Use one of the following values: - quiet|q|silen…

vue学习12.1

1.绑定style样式 <template><div><button click"increaseFontSize">增大字体</button><div v-bind:style"{ color: activeColor, fontSize: fontSize px }">动态样式示例</div></div> </template><s…