支持向量机 (support vector machine,SVM)

支持向量机 (support vector machine,SVM)

flyfish

支持向量机是一种用于分类和回归的机器学习模型。在分类任务中,SVM试图找到一个最佳的分隔超平面,使得不同类别的数据点在空间中被尽可能宽的间隔分开。

超平面方程和直线方程

超平面(hyperplane)是一个在高维空间中将空间分成两个部分的几何对象。它的方程可以在不同维度的空间中有不同的形式。

一维空间中的“超平面”

在一维空间中,超平面就是一个点。假设我们在一维空间中有一个超平面,它可以表示为:
x = a x = a x=a
其中, a a a 是某个常数。这表示一维空间中的一个特定点,将空间分成两个部分: x < a x < a x<a x > a x > a x>a

二维空间中的超平面(直线)

在二维空间中,超平面就是一条直线。直线的方程可以表示为:
y = k x + b y = kx + b y=kx+b
其中, k k k 是斜率, b b b 是截距。或者,可以表示为标准形式:
a x + b y + c = 0 ax + by + c = 0 ax+by+c=0
其中, a a a b b b c c c 是常数。
这条直线将二维空间分成两个半平面。

三维空间中的超平面(平面)

在三维空间中,超平面是一个平面。平面的方程可以表示为:
a x + b y + c z + d = 0 ax + by + cz + d = 0 ax+by+cz+d=0
其中, a a a b b b c c c d d d 是常数。
这个平面将三维空间分成两个半空间。

一般形式的超平面方程

在更高维度的空间中,超平面的方程一般可以表示为:
w ⋅ x + b = 0 \mathbf{w} \cdot \mathbf{x} + b = 0 wx+b=0
其中:

  • w = ( w 1 , w 2 , … , w n ) \mathbf{w} = (w_1, w_2, \ldots, w_n) w=(w1,w2,,wn) 是一个权重向量,定义了超平面的方向。

  • x = ( x 1 , x 2 , … , x n ) \mathbf{x} = (x_1, x_2, \ldots, x_n) x=(x1,x2,,xn) 是一个点的坐标向量。

  • b b b 是偏置。
    这个超平面将 n n n 维空间分成两个半空间。

直线方程是超平面方程在二维空间中的一种特例。一般来说,超平面是 n n n 维空间中的一个 ( n − 1 ) (n-1) (n1) 维的对象:

  • 在一维空间中,超平面是一个点。

  • 在二维空间中,超平面是一个直线。

  • 在三维空间中,超平面是一个平面。

  • 在四维及更高维空间中,超平面是一个 ( n − 1 ) (n-1) (n1) 维的对象。

示例和理解

一维空间中的超平面

x = 2 x = 2 x=2
这是在一维空间中的一个点,将空间分为 x < 2 x < 2 x<2 x > 2 x > 2 x>2 两部分。

二维空间中的超平面

标准形式:
2 x + 3 y − 6 = 0 2x + 3y - 6 = 0 2x+3y6=0
或者:
y = − 2 3 x + 2 y = -\frac{2}{3}x + 2 y=32x+2
这是在二维空间中的一条直线。

三维空间中的超平面

2 x + 3 y + 4 z − 5 = 0 2x + 3y + 4z - 5 = 0 2x+3y+4z5=0
这是在三维空间中的一个平面。
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm# 生成一些数据
np.random.seed(0)
X = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2, 2]]
Y = [0] * 20 + [1] * 20# 拟合模型
clf = svm.SVC(kernel='linear')
clf.fit(X, Y)# 绘制数据点和分类超平面
plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired)
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, linewidth=1, facecolors='none', edgecolors='k')
plt.show()

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from mpl_toolkits.mplot3d import Axes3D# 生成三维数据
np.random.seed(0)
X = np.r_[np.random.randn(20, 3) - [2, 2, 2], np.random.randn(20, 3) + [2, 2, 2]]
Y = [0] * 20 + [1] * 20# 拟合模型
clf = svm.SVC(kernel='linear')
clf.fit(X, Y)# 创建一个网格来绘制分类平面
xx, yy = np.meshgrid(np.linspace(-5, 5, 50), np.linspace(-5, 5, 50))
zz = (-clf.intercept_[0] - clf.coef_[0][0] * xx - clf.coef_[0][1] * yy) / clf.coef_[0][2]# 绘制数据点和分类平面
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')ax.scatter(X[:20, 0], X[:20, 1], X[:20, 2], color='b', marker='o', label='Class 0')
ax.scatter(X[20:, 0], X[20:, 1], X[20:, 2], color='r', marker='^', label='Class 1')ax.plot_surface(xx, yy, zz, color='g', alpha=0.5, rstride=100, cstride=100)ax.set_xlabel('X1')
ax.set_ylabel('X2')
ax.set_zlabel('X3')plt.legend()
plt.show()

最大间隔解释

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVC
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 生成一个简单的二维分类数据集
X, y = datasets.make_blobs(n_samples=50, centers=2, random_state=6)# 训练一个线性支持向量机
clf = SVC(kernel='linear', C=1000)
clf.fit(X, y)# 获取分隔超平面
w = clf.coef_[0]
b = clf.intercept_[0]# 计算分隔超平面的两个端点
x = np.linspace(-10, 10, 100)
y_hyperplane = -w[0]/w[1] * x - b/w[1]# 计算间隔边界
margin = 1 / np.sqrt(np.sum(w ** 2))
y_margin_up = y_hyperplane + margin
y_margin_down = y_hyperplane - margin# 绘制数据点、分隔超平面及其间隔边界
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='coolwarm')
plt.plot(x, y_hyperplane, 'k-', label='分隔超平面')
plt.plot(x, y_margin_up, 'k--', label='上间隔边界')
plt.plot(x, y_margin_down, 'k--', label='下间隔边界')# 绘制支持向量
plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100, facecolors='none', edgecolors='k', label='支持向量')plt.legend()
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('最大化间隔的 SVM')
plt.show()

拉格朗日乘子法

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

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

相关文章

MMGPL: 多模态医学数据分析与图提示学习| 文献速递-基于深度学习的多模态数据分析与生存分析

Title 题目 MMGPL: Multimodal Medical Data Analysis with Graph Prompt Learning MMGPL: 多模态医学数据分析与图提示学习 01 文献速递介绍 神经学障碍&#xff0c;包括自闭症谱系障碍&#xff08;ASD&#xff09;&#xff08;Lord等&#xff0c;2018年&#xff09;和阿…

kafka的副本replica

指定topic的分区和副本 通过kafka命令行工具 kafka-topics.sh --create --topic myTopic --partitions 3 --replication-factor 1 --bootstrap-server localhost:9092 执行代码时指定分区个数

基于Spring Boot框架的EAM系统设计与实现

摘 要&#xff1a;文章设计并实现一个基于Spring Boot框架的EAM系统&#xff0c;以应对传统人工管理模式存在的低效与信息管理难题。系统利用Java语言、JSP技术、MySQL数据库等技术栈&#xff0c;构建了一个B/S架构的高效管理平台&#xff0c;提升了资产管理的信息化水平。该系…

大小端详解

引例 我们知道整形(int)是4个字节&#xff0c;例如随便举个例子&#xff1a;0x01020304&#xff0c;它一共占了四个地址位&#xff0c;01,02,03,04分别占了一个字节&#xff08;一个字节就对应了一个地址&#xff09;。 那么就会有个问题&#xff1a;我们的01到底是存储在高地…

STM32的 DMA(直接存储器访问) 详解

STM32的DMA&#xff08;Direct Memory Access&#xff0c;直接存储器存取&#xff09;是一种在单片机中用于高效实现数据传输的技术。它允许外设设备直接访问RAM&#xff0c;不需要CPU的干预&#xff0c;从而释放CPU资源&#xff0c;提高CPU工作效率&#xff0c;本文基于STM32F…

C++基础(1)

目录 C的输入输出&#xff1a; 命名空间域&#xff1a; 缺省&#xff08;默认&#xff09;参数&#xff1a; 函数重载&#xff1a; 引用&#xff1a; 内联函数inline&#xff1a; 指针空值nullptr&#xff1a; C的输入输出&#xff1a; 输入&#xff1a; int a; char …

社交论坛圈子系统APP开发社交圈子小程序系统源码开源,带语音派对聊天室/圈子社交论坛及时聊天

功能// 首页左右滑动切换分类 使用资讯类app常见的滑动切换分类&#xff0c;让用户使用更方便。 2信息卡片流展示 每条信息都是一个卡片&#xff0c;头像展示会员标签&#xff0c;单图自动宽度&#xff0c;多图九宫格展示&#xff0c;底部展示信息发布地址&#xff0c;阅读量、…

采用3种稀疏降噪模型对心电信号进行降噪(Matlab R2021B)

心电信号采集自病人体表&#xff0c;是一种无创性的检测手段。因此&#xff0c;心电信号采集过程中&#xff0c;本身也已经包含了机体内部其他生命活动带来的噪声。同时&#xff0c;由于采集设备和环境中存在电流的变化&#xff0c;产生电磁发射等物理现象&#xff0c;会对心电…

Java项目:基于SSM框架实现的中小型企业财务管理系统【ssm+B/S架构+源码+数据库+答辩PPT+开题报告+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的中小型企业财务管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单…

浅谈VPS主机上的数据库性能优化

如何提高网站性能&#xff1f;一个显而易见的解决方案是升级托管账户。您的网站将拥有更多硬件资源&#xff0c;因此可以同时处理更多请求并更快地传递数据。 无论如何&#xff0c;人们都是这么认为的。但事实总是不一样。 现代网站是一个复杂的系统&#xff0c;包含许多必须…

效果惊人!LivePortrait开源数字人技术,让静态照片生动起来

不得了了,快手已经不是众人所知的那个短视频娱乐平台了。 可灵AI视频的风口尚未过去,又推出了LivePortrait--开源的数字人项目。LivePortrait让你的照片动起来,合成逼真的动态人像视频,阿里通义EMO不再是唯一选择。 让图像动起来 LivePortrait 主要提供了对眼睛和嘴唇动作的…

实体构件库设计说明方案

实体构件库设计说明方案 一、引言 在数字化设计与制造日益普及的今天&#xff0c;实体构件库作为连接设计创意与物理实现的关键桥梁&#xff0c;其重要性不言而喻。实体构件库不仅存储了各类标准化、参数化的零部件模型&#xff0c;还提供了便捷的检索、配置、优化及自动化生…

昇思MindSpore学习总结十二 —— ShuffleNet图像分类

当前案例不支持在GPU设备上静态图模式运行&#xff0c;其他模式运行皆支持。 1、ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一样主要应用在移动端&#xff0c;所以模型的设计目标就是利用有限的计算资源来达…

信创:鲲鹏(arm64)+麒麟(kylin v10)离线部署k8s和kubesphere(含离线部署新方式)

本文将详细介绍&#xff0c;如何基于鲲鹏CPU(arm64)和操作系统 Kylin V10 SP2/SP3&#xff0c;利用 KubeKey 制作 KubeSphere 和 Kubernetes 离线安装包&#xff0c;并实战部署 KubeSphere 3.3.1 和 Kubernetes 1.22.12 集群。 服务器配置 主机名IPCPUOS用途master-1192.168.10…

变长输入神经网络设计

我对使用 PyTorch 可以轻松构建动态神经网络的想法很感兴趣&#xff0c;因此我决定尝试一下。 我脑海中的应用程序具有可变数量的相同类型的输入。对于可变数量的输入&#xff0c;已经使用了循环或递归神经网络。但是&#xff0c;这些结构在给定行的输入之间施加了一些顺序或层…

7.9实验室总结 SceneBuilder的使用方法+使用javafx等

由于下错了东西&#xff0c;所以一直运行不出来&#xff0c;今天一直在配置环境&#xff0c;配置好了才学&#xff0c;所以没学多少&#xff0c;看了网课学习了SceneBuilder的使用方法还有了解了javafx是怎么写项目的&#xff0c;&#xff0c; 学习了怎么跳转页面&#xff1a;…

html H5 dialog弹窗学习,实现弹窗显示内容 替代confirm、alert

html H5 dialog弹窗学习,实现弹窗内容 替代confirm 框架使用的mui,使用mui.confirm() 弹窗内容过多时,弹窗被撑的到屏幕外去了,使用H5 dialog 标签自定义一个固定大小的弹窗,内容过多时可下拉显示 效果展示 隐私政策内容很多,可以下拉显示 代码 myDialog.css dialog{p…

【光伏仿真系统】光伏设计的基本步骤

随着全球对可再生能源需求的不断增长&#xff0c;光伏发电作为一种清洁、可再生的能源形式&#xff0c;正日益受到重视。光伏设计是确保光伏系统高效、安全、经济运行的关键环节&#xff0c;它涉及从选址评估到系统安装与维护的全过程。本文将详细介绍光伏设计的基本步骤&#…

【RHCE】转发服务器实验

1.在本地主机上操作 2.在客户端操作设置主机的IP地址为dns 3.测试,客户机是否能ping通

LLM应用构建前的非结构化数据处理(三)文档表格的提取

1.学习内容 本节次学习内容来自于吴恩达老师的Preprocessing Unstructured Data for LLM Applications课程&#xff0c;因涉及到非结构化数据的相关处理&#xff0c;遂做学习整理。 本节主要学习pdf中的表格数据处理 2.环境准备 和之前一样&#xff0c;可以参考LLM应用构建前…