【支持向量机】最大间隔超平面及Matlab代码

article/2025/9/17 6:05:40

线性可分

在特征空间中,有两个训练样本可以通过一条直线区分开,则称为线性可分。而在特征空间大于等于四维时,分开训练样本的平面,称为超平面。
在这里插入图片描述

我们定义一条直线方程: ω 1 x 1 + ω 2 x 2 + b = 0 ω_1x_1+ω_2x_2+b=0 ω1x1+ω2x2+b=0
权重: ω 1 , ω 2 ω_1,ω_2 ω1ω2 偏置: b b b
⇒ { ω 1 x 1 + ω 2 x 2 + b > 0 ( i ∈ 1 ~ n , y i > 1 ) ω 1 x 1 + ω 2 x 2 + b < 0 ( i ∈ 1 ~ n , y i < 1 ) ⇒ \left\{ \begin{array}{c} ω_1x_1+ω_2x_2+b>0 &(i∈1~n,y_i>1) \\ ω_1x_1+ω_2x_2+b<0 &(i∈1~n,y_i<1)\\ \end{array} \right. {ω1x1+ω2x2+b>0ω1x1+ω2x2+b<0(i1nyi>1)(i1nyi<1)
我们规定 y y y为训练样本的标签。
⇒ { y i = { − 1 , + 1 } x i = [ x i 1 , x i 2 ] T ⇒ \left\{ \begin{array}{c} y_i=\{ -1,+1 \}\\ x_i=\begin{gathered} \begin{bmatrix} x_{i1} , x_{i2} \end{bmatrix}^T \end{gathered}\\ \end{array} \right. {yi={1,+1}xi=[xi1,xi2]T
假设:
x = [ x i 1 x i 2 ] T ω = [ ω i 1 ω i 2 ] T x=\begin{bmatrix} x_{i1}\\ x_{i2} \end{bmatrix}^Tω=\begin{bmatrix} ω_{i1}\\ ω_{i2} \end{bmatrix}^T x=[xi1xi2]Tω=[ωi1ωi2]T
上述样本关系即可转化为:
⇒ { ω T x i + b > 0 ( i ∈ 1 ~ n , y i > 1 ) ω T x i + b < 0 ( i ∈ 1 ~ n , y i < 1 ) ⇒ \left\{ \begin{array}{c} ω^Tx_i+b>0 &(i∈1~n,y_i>1) \\ ω^Tx_i+b<0 &(i∈1~n,y_i<1)\\ \end{array} \right. {ωTxi+b>0ωTxi+b<0(i1nyi>1)(i1nyi<1)

我们可以得到一个严格的数学定义来判断训练样本是否线性可分:
y i ( ω T x i + b ) > 0 y_i(ω^Tx_i+b)>0 yi(ωTxi+b)>0

最大间隔

在二分类的情况下,如果一个数据集是线性可分的,即存在一个超平面将两个类别完全分开,那么一定存在无数多个超平面将这两个类别完全分开。
在机器学习中,我们不仅得关注训练误差,而且需要关注期望损失。在下图中,靠近训练样本的超平面,对噪声的影响是非常敏感的。如果噪声大于最小距离,那么分类就会出错。我们称:这个超平面的鲁棒性较差。
为了使这个超平面更具鲁棒性,我们会去找最佳超平面,以最大间隔把两类样本分开的超平面,也称之为最大间隔超平面。
在这里插入图片描述

最优化问题

SVM 想要的就是找到各类样本点到超平面的距离最远,也就是找到最大间隔超平面。通过上述条件可以得知,分开训练样本的最优超平面需具有三个特性:

  1. 可以分开两类训练样本;
  2. 平移这个超平面,使它刚好擦过特征空间中的样本点时,这些样本点称为支撑向量,且支持向量到超平面有最大化间隔(margin);
  3. 最大间隔的超平面应处于间隔中心,到所有支持向量距离相等。

任意超平面可以用下面这个线性方程来描述:
ω T x + b = 0 ω^Tx+b=0 ωTx+b=0

二维空间点 ( x , y ) (x,y) x,y到直线 A x + B y + C = 0 Ax+By+C=0 Ax+By+C=0的距离公式是:
∣ A x + B y + C ∣ A 2 + B 2 \frac{|Ax+By+C|}{\sqrt{A^2+B^2}} A2+B2 Ax+By+C

根据 ∣ y i ∣ = 1 ⇒ y ( ω T x + b ) = ∣ ω T + b ∣ |y_i|=1⇒y(ω^Tx+b)=|ω^T+b| yi=1y(ωTx+b)=ωT+b,拓展到n维空间后,点 x = ( x 1 , x 2 … x n ) x=(x_1,x_2…x_n) x=(x1,x2xn)到直线 ω T x + b = 0 ω^Tx+b=0 ωTx+b=0的距离为:

d = y ( ω T x + b ) ∣ ∣ ω ∣ ∣ = ∣ ω T x + b ∣ ∣ ∣ ω ∣ ∣ d=\frac{y(ω^Tx+b)}{|{|ω||}}\\=\frac{|ω^Tx+b|}{|{|ω||}} d=ω∣∣y(ωTx+b)=ω∣∣ωTx+b
其中
∣ ∣ ω ∣ ∣ = ω 1 2 + … ω n 2 ||ω||=\sqrt{ω^2_1+…ω^2_n} ∣∣ω∣∣=ω12+ωn2

根据:
s . t . : y i ( ω T x i + b ) > 0 s.t. :y_i(ω^Tx_i+b)>0 s.t.:yi(ωTxi+b)>0

⇒ ∃ γ > 0 , y i ( ω T x i + b ) = γ ⇒\exists \gamma >0,y_i(ω^Tx_i+b)=\gamma γ>0,yi(ωTxi+b)=γ
对超平面进行缩放:
∃ ( ω , b ) ⇒ ( α ω , α b ) \exists (ω,b)⇒(\alpha ω,\alpha b) ωbαωαb
缩放对于超平面并无影响,规定 γ = 1 \gamma =1 γ=1,使 ∣ ω T x + b ∣ = 1 |ω^Tx+b|=1 ωTx+b=1
⇒ { 1 ∣ ∣ ω ∣ ∣ = d y i ( ω T x i + b ) = 1 ⇒ \left\{ \begin{array}{c} \frac{1}{||ω||}=d \\ y_i(ω^Tx_i+b)=1 \end{array} \right. {∣∣ω∣∣1=dyi(ωTxi+b)=1
再做一个变化:
m a x 1 ∣ ∣ ω ∣ ∣ ⇔ m i n ∣ ∣ ω ∣ ∣ 2 2 max\frac{1}{||ω||}⇔min\frac{||ω||^2}{2} max∣∣ω∣∣1min2∣∣ω2
所以得到最优化问题是:
⇒ { m i n ∣ ∣ ω ∣ ∣ 2 2 y i ( ω T x i + b ) > 1 ⇒ \left\{ \begin{array}{c} min\frac{||ω||^2}{2} \\ y_i(ω^Tx_i+b)>1 \end{array} \right. {min2∣∣ω2yi(ωTxi+b)>1

Matlab代码

%% 线性可分数据用支持向量机分类,其求解采用二次规划函数
clc;clear;
% 初始化数据集
random_1 = unifrnd(8,12,100,2);
random = [random_1(1:50,:);random_1(51:100,:)+4];
y = [zeros(50,1)-1;ones(50,1)]; % 标签数据
X = random; % 特征数据
% 可视化
scatter(random(1:50,1),random(1:50,2),'red')
hold on
grid on
scatter(random(51:100,1),random(51:100,2),'blue')%% 采用Matlab自带的二次规划函数求解问题
% 构建二次系数矩阵H
H = [];
for i =1:length(X)for j = 1:length(X)H(i,j) = X(i,:)*(X(j,:))'*y(i)*y(j);end
end
% 构造一次项系数f
f = zeros(length(X),1)-1;
A = [];b = []; % 不等式约束
Aeq = y';beq = 0; % 等式约束
ub = [];lb = zeros(length(X),1); % 自变量范围
[x,fval] = quadprog(H,f,A,b,Aeq,beq,lb,ub);
% x表示自变量的解,以及在x处的函数值
% 将很小的x直接赋值为0
x(x < 1e-5) = 0;% 利用求解得到x求解系数w
w = [0,0];
[a,~] = find(x~=0); % 找到可以求解b的值
temp = 0;
for i = 1:length(X)w = w + x(i)*y(i)*X(i,:);temp = temp + x(i)*y(i)*X(i,:)*X(a(1),:)';
end
% 计算偏置系数
b = y(a(1)) - temp;% 数据可视化
k = - w(1)/w(2); % 构造截距式
b_ = -b/w(2); % 构造系数b
m = 8:2:16; % 生成一些点
n = k*m+b_;
plot(m,n,'--')
n_2 = k*m+b_+1/w(2);
hold on
plot(m,n_2,'--')
n_3 = k*m+b_-1/w(2);
plot(m,n_3,'--');
grid on
title('支持向量机二分类')
legend('样本1','样本2','分界线')% 添加文本说明可视化
% 获取支持向量下标
Vctor_index = find(x~=0);
% 对下标进行分类
Vctor_length = length(Vctor_index); % 获取支持向量的个数
category_1 = []; % 定义第一类
category_2 = []; % 定义第二类
% 对支持向量的下标进行遍历然后一一分类
for i =1:Vctor_lengthif y(Vctor_index(i))==-1category_1 = [category_1;Vctor_index(i)];elsecategory_2 = [category_2;Vctor_index(i)];end
end
% 分类进行可视化
%绘制第一类category_1,用红色填充
scatter(X(category_1,1),X(category_1,2),'filled','r','HandleVisibility','off')
t1 = text(X(category_1,1)+0.1,X(category_1,2)-0.1,'支持向量','Color','red');
t1.Color = 'red';% 绘制第二类category_2,用蓝色填充
scatter(X(category_2,1),X(category_2,2),'filled','blue','HandleVisibility','off')
t2 = text(X(category_2,1)+0.1,X(category_2,2)-0.1,'支持向量','Color','blue');% 计算支持向量到超平面的距离
D_1 = abs(w*X(category_1(1),:)'+ b)/norm(w,2);
D_2 = abs(w*X(category_2(1),:)'+ b)/norm(w,2);
disp(['正类支持向量到超平面的距离为',num2str(D_1)])
disp(['负类支持向量到超平面的距离为',num2str(D_2)])

http://chatgpt.dhexx.cn/article/YyMh8f3O.shtml

相关文章

第三节- 超平面

这一节我们来讲一个新的东西&#xff0c;叫做 超 平面( hyper-plane)。 其实这个东西本身并不难理解。 只是我们在三维直角坐标系里面习惯了 直线 平面什么的&#xff0c;可能有些疑惑而已。 老规矩&#xff0c;我们先甩出定义&#xff1a; 超平面 hyperplane 看起来&am…

躺平国历险记:两个超平面之间距离的计算

王二麻听说躺平国是一个非常神奇的地方。在躺平国里&#xff0c;有各种神奇的东西。比如&#xff1a;会说话的铁片&#xff0c;能够分拣垃圾的小狗&#xff0c;还有会唱京剧的电线杆子。 王二麻的表哥张三李是一个糙汉子&#xff0c;他前几年在国内混不下去了&#xff0c;一个…

SVM超平面的理解

超平面的理解 超平面的定义 超平面是n维欧氏空间中(n-1)维度的子空间&#xff0c;例如3维空间的“超平面”就是一个面&#xff0c;但通常超过3维空间之后我们才称之为超平面&#xff0c;是纯粹的数学概念&#xff0c;不是现实的物理概念。公式表示为1-1&#xff0c;W、x是一个…

SVM原理:超平面方程

&#xff08;1&#xff09;超平面方程 3维空间中平面方程的一般形式&#xff1a; (1) 我们都知道为平面到原点的距离。这里简单证明超平面的法向量为。 d维空间平面方程的一般形式&#xff1a; (2) 平面的法向量为&#xff0c;&#xff08;分号表示列向量&#xff09;。 &…

SVM——超平面

转载出处&#xff1a;超平面是什么&#xff1f;——理解超平面&#xff08;SVM开篇之超平面详解&#xff09; 引入 n维空间的超平面由下面的方程确定&#xff1a; w T x b 0 w^Tx b 0 wTxb0 其中&#xff0c; w w w和 x x x都是n维列向量&#xff0c; x x x为平面上的点…

超平面详解

学习SVM绕不开超平面的概念。先复习一些基础的概念&#xff08;平面方程&#xff09;&#xff0c;帮助理解。 1. 平面及其方程&#xff1a; 因为平面与空间直线分别是曲面与空间曲线的特例&#xff0c;所以在讨论平面与空间直线以前&#xff0c;先引入有关曲面方程与空间曲线方…

轻松理解超平面

前言 定义&#xff1a; 1、超平面是指n维线性空间中维度为n-1的子空间。它可以把线性空间分割成不相交的两部分。比如二维空间中&#xff0c;一条直线是一维的&#xff0c;它把平面分成了两块&#xff1b;三维空间中&#xff0c;一个平面是二维的&#xff0c;它把空间分成了两块…

SVM理论疏导——什么是超平面

超平面概念 超平面是一种数学上的概念&#xff0c;它是线上的一个点&#xff0c;也是平面上的一条直线&#xff0c;也是三维空间的一张平面。前面说的点、线、平面都可以是超平面&#xff0c;但一般都不叫为超平面&#xff0c;因为超平面是点、线、平面的推广&#xff0c;即大于…

3、如何理解超平面?

参考&#xff1a;https://zhuanlan.zhihu.com/p/145706435 首先明确几个定义&#xff1a;(1) 超平面是指n维线性空间中维度为n-1的子空间。它可以把线性空间分割成不相交的两部分。比如二维空间中&#xff0c;一条直线是一维的&#xff0c;它把平面分成了两块&#xff1b;三维…

计算机内存与主存的关系(内存是主存吗?内存和主存有什么关系?)

在80386以上档次的微机中配置了高速缓冲存储器(Cache)&#xff0c;这时内存包括主存与高速缓存两部分。 计算器内存条采用的是DRAM(动态随机存储器)&#xff0c;即计算机的主存。通常所说的内存容量即指内存条DRAM的大小。 高速缓冲存储器Cache主要是为了解决CPU和主存速度不匹…

计算机内存图解

《电脑高手》也都是一笔带过。作为电脑中必不可少的三大件之一&#xff08;其余的两个是主板与CPU&#xff09;&#xff0c;内存是决定系统性能的关键设备之一&#xff0c;它就像一个临时的仓库&#xff0c;负责数据的中转、暂存…… 不过&#xff0c;虽然内存对系统性能的至关…

计算机操作系统_内存管理

内存管理 设计程序模拟内存的动态分区内存管理方法。内存空闲区使用空闲分区表进行管理&#xff0c;采用最先适应算法从空闲分区表中寻找空闲区进行分配&#xff0c;内存回收时不考虑与相邻空闲区的合并。 假定系统的内存共640K&#xff0c;初始状态为操作系统本身占用40K。 …

关于计算机中内存的分类

**关于计算机中内存的分类&#xff08;栈区&#xff0c;堆区&#xff0c;静态区&#xff09;**1、栈区&#xff1a;主要用于函数的存储&#xff0c;从主函数开始&#xff0c;依次加入所引用的主函数。新加入的函数优先运行&#xff08;类似于数据结构的栈&#xff09;当一个函数…

计算机内存数值存储方式进制

进制概念 进制也就是进位制&#xff0c;是人们规定的一种进位方法。对于任何一种进制&#xff0c;x进制表示某一位置上的数运算时是逢x进一位。十进制是逢十进一、十六进制是逢十六进一、二进制是逢二进一。 各进制数表示 八进制是逢8进1&#xff0c;所以到8的时候向前进一位…

计算机内存结构!

变量的三大特点&#xff1a; 数据类型、作用域、存储类型 计算机的三大组成: 1.CPU 2.内存 3.硬盘 内存与硬盘的区别&#xff1a; 1.内存中保存动态数据&#xff0c;硬盘中保存静态数据。 2.断电后内存中的数据丢失&#xff0c;硬盘中的数据不会丢失。 3.执行程序时&#xff0c…

内存管理计算

一、补充概念 为了保证CPU执行指令时可正确访问存储单元&#xff0c;需将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址&#xff0c;这一过程称为地址映射。地址映射一般是由硬件完成的&#xff1b;页表项的相关状态位由硬件确定。 最佳适应算法&#xff08;空闲内…

计算机内存和磁盘的关系

计算机内存和磁盘的关系 前言 上篇文章详细讲了计算机内存的物理结构&#xff0c;逻辑结构以及在内存的基础上理解几种常见的数据结构。但是&#xff0c;计算机系统出了内存之外&#xff0c;还有一个非常重要的硬件&#xff0c;那就是磁盘。他们都是用于计算机存储&#xff0…

电脑硬件——内存

内存是一台电脑CPU与硬盘间进行数据传输的中转站&#xff0c;内存会影响着电脑的稳定性&#xff0c;不稳定的内存可能会导致蓝屏、黑屏、死机甚至电脑无法亮机等故障。 内存的作用&#xff1a; 在我们的电脑工作时&#xff0c;CPU和硬盘之间会无时不刻地进行大量的数据交换&am…

计算机(二):计算机存储系统(内存、外存)。

前言&#xff1a;我总结了汇编语言课本和通信书上的知识点给大家呈现。 一、计算机存储系统&#xff08;文解&#xff09;&#xff1a; 存储分为&#xff1a;内存&#xff08;内部存储器&#xff09;、外存&#xff08;外部存储器&#xff09;。 内存分为&#xff1a;CPU上的寄…

计算机内存介绍

我们这里说的内存啊&#xff0c;其实就是说的我们电脑里面的内存条&#xff0c;所以嘞&#xff0c;内存就是内存条&#xff0c;数据要放在这上面才能被cpu读取从而做运算&#xff0c;还有硬盘&#xff0c;就是电脑中的C盘啥的&#xff0c;一个程序需要运行的话需要向内存申请一…