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

2023-10-27

线性可分

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

我们定义一条直线方程: ω 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_length
    if y(Vctor_index(i))==-1
        category_1 = [category_1;Vctor_index(i)];
    else
        category_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)])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【支持向量机】最大间隔超平面及Matlab代码 的相关文章

随机推荐

  • k8s-client-go源码剖析(一)

    简介 云原生社区活动 Kubernetes源码剖析第一期 有幸参与云原生社区举办的Kubernetes源码剖析活动 活动主要以书籍 Kubernetes源码剖析 为主要思路进行展开 提出在看书过程中遇到的问题 和社区成员一起讨论 最后会将结
  • 简述ospf的工作原理_全方位了解OSPF的工作原理以及涉及到的重要技术

    OSPF协议是IGP中的一种动态路由协议 它属于链路状态协议 交互的是LSA 链路状态通告 信息 对路由信息的认知很清晰 该文主要阐述了OSPF协议的工作原理 OSPF状态机以及OSPF协议中涉及到的重要技术 关键词 OSPF协议 LSA
  • 快乐数

    编写一个算法来判断一个数是不是 快乐数 一个 快乐数 定义为 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 然后重复这个过程直到这个数变为 1 也可能是无限循环但始终变不到 1 如果可以变为 1 那么这个数就是快乐数 示例
  • uni-app的生命周期

    uni app的生命周期包括应用生命周期和页面生命周期 应用生命周期涵盖了整个uni app应用的启动 运行和销毁过程 主要包括以下几个生命周期函数 onLaunch 应用初始化时触发 只触发一次 onShow 应用启动或从后台进入前台时触
  • 自动化测试 selenium 解决selenium.common.exceptions.SessionNotCreatedException: Message: session not created

    问题 selenium common exceptions SessionNotCreatedException Message session not created 原因 selenium模拟的客户端对浏览器的操作 相应浏览器的驱动版本
  • java模拟post请求发送json数据

    import com alibaba fastjson JSONObject import org apache http client methods CloseableHttpResponse import org apache htt
  • Python3中pickle模块介绍

    Pyhton3中的pickle模块用于对Python对象结构的二进制进行序列化 或pickling 和反序列化 或unpickling pickling 是将Python对象及其所拥有的层次结构转化为一个字节流 byte stream 的过
  • 首次使用计算机 鼠标没反应,鼠标没反应各种解决方法教程

    我们在使用鼠标的时候开始肯定没问题 但长期使用下来 总会出现一种故障 比如最常见的鼠标没反应的问题 也就是说不管你怎么滑动鼠标 显示器里的光标都不动了 这种问题怎么解决呢 我们要分成有线鼠标和无线鼠标两种情况 一 有线鼠标没反应 一般有线鼠
  • kalilinux搭建DCN漏洞靶场

    kalilinux系统搭建DCN漏洞靶场 前言 安装kalilinux 搭建靶场 WinSCP连接kalilinux实现文件上传 导入镜像 前言 最近想学一下WEB安全 顺便学习一下靶场环境的搭建 之前搭建过webug玩了一下 但自己电脑运
  • 编程的美学标准诌议

    编程的美学标准诌议 做了几年的程序员 虽然自己写的代码还远远没有达到要求 但在日复一日的实践过程中 我逐渐开始信奉一条标准 在实现功能的前提下 简单即是美 其实 编程的过程就好比是一个建模的过程 设计就是将一个现实问题抽象成逻辑模型 而编码
  • git命令使用上传下载详情大全...

    不罗嗦直接上内容 git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch a 查看所有的分支 git branch r 查看远程所有分支 git commit am in
  • CISCN(Web Ezpentest)GC、序列化、case when

    目录 REGEXP的一个点 正则 like 默认不区分大小写 当禁用了空格 regexp like的区分大小写的使用方法 CISCN 2022 初赛 ezpentest 卡点 2022 HFCTF babysql 最近又学到了一道新知识 c
  • attrs.xml中declare-styleable 详解(用于自定义控件的属性)

    1 框架定义
  • simulink电力电子仿真(3)单相桥式全控整流电路

    simulink电力电子仿真 3 单相桥式全控整流及有源逆变电路 返回目录 主要是赶上了疫情 然后期末要疯狂补实验报告 就索性写一下吧 万一以后再做电力电路仿真 可能会有用的 也希望可以帮助别人 器件的选择及位置 MATLAB的版本 201
  • 【k8s集群管理工具篇】云原生之部署K8s管理面板KubePi

    k8s集群管理工具篇 云原生之部署K8s管理面板KubePi 一 KubePi介绍 二 环境规划 三 检查本地环境 1 检查k8s集群状态 2 检查kubepi管理主机环境 三 部署KubePi 1 创建KubePi容器 2 检查KubeP
  • Flutter填坑 编译运行不起来

    记录下Flutter中遇到的一些问题 基本上按照Flutter中文网的教程可以完成Flutter环境的搭建 Flutter中文网 https flutterchina club Windows 环境 https flutterchina c
  • sqli-labs 靶场环境搭建

    目录 一 搭建环境所需资源 搭建sqli labs 靶场需要的运行环境 二 搭建过程 1 下载资源 2 创建网站 3 更改配置文件 4 安装数据库 不使用 php7 x 版本的原因 一 搭建环境所需资源 搭建sqli labs 靶场需要的运
  • 21计算机考研国家线,来了!21考研国家线公布!附详细解读!

    原标题 来了 21考研国家线公布 附详细解读 21考研人最近大概都在焦虑的等待国家线 昨天中国农业大学的一条消息直接将 考研国家线 顶上热搜 这不 最新出炉的国家线就来了 21考研国家线公布 21国家线学硕总分线上涨的门类有 经济学 历史学
  • 人工智能还是人工智障

    序言 有的时候感觉有脑子 有的时候感觉没有 到底是有还是没有呢 机器人 有的很智能 有的很智障 是智能的时候可爱 还是在智障的时候可爱 你是惧怕智障还是惧怕人工智能 风言风语 作为一个吵架之王 每次吵架的时候都会想 现在人工智能这么多 但是
  • 【支持向量机】最大间隔超平面及Matlab代码

    线性可分 在特征空间中 有两个训练样本可以通过一条直线区分开 则称为线性可分 而在特征空间大于等于四维时 分开训练样本的平面 称为超平面 我们定义一条直线方程 1 x 1