当前位置: 首页 > news >正文

基于matlab的SVM支持向量机分类仿真,核函数采用RBF函数(提供matlab仿真录像)

目录

1.源码获取方式

2.算法描述

3.部分程序

4.部分仿真图预览


1.源码获取方式

使用版本matlab2022a

获取方式1:

点击下载链接(解压密码C+123456):

基于matlab的SVM支持向量机分类仿真,核函数采用RBF函数

获取方式2:

如果下载链接失效,加博主微信联系,或私信联系。

2.算法描述

        支持向量机(support vector machines, SVM)是二分类算法,所谓二分类即把具有多个特性(属性)的数据分为两类,目前主流机器学习算法中,神经网络等其他机器学习模型已经能很好完成二分类、多分类,学习和研究SVM,理解SVM背后丰富算法知识,对以后研究其他算法大有裨益;在实现SVM过程中,会综合利用之前介绍的一维搜索、KKT条件、惩罚函数等相关知识。本篇首先通过详解SVM原理,后介绍如何利用python从零实现SVM算法。
         实例中样本明显的分为两类,黑色实心点不妨为类别一,空心圆点可命名为类别二,在实际应用中会把类别数值化,比如类别一用1表示,类别二用-1表示,称数值化后的类别为标签。每个类别分别对应于标签1、还是-1表示没有硬性规定,可以根据自己喜好即可,需要注意的是,由于SVM算法标签也会参与数学运算,这里不能把类别标签设为0。
 

 


线性核:
主要用于线性可分的情况,我们可以看到特征空间到输入空间的维度是一样的,其参数少速度快,对于线性可分数据,其分类效果很理想
通常首先尝试用线性核函数来做分类,看看效果如何,如果不行再换别的
优点:方案首选、简单、可解释性强:可以轻易知道哪些feature是重要的
缺点:只能解决线性可分的问题

高斯核:

通过调控参数,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。
如果σ \sigmaσ选得很大的话,高次特征上的权重实际上衰减得非常快,所以实际上(数值上近似一下)相当于一个低维的子空间;
如果σ \sigmaσ选得很小,则可以将任意的数据映射为线性可分——当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题。
优点:可以映射到无限维、决策边界更为多维、只有一个参数
缺点:可解释性差、计算速度慢、容易过拟合

多项式核

多项式核函数可以实现将低维的输入空间映射到高纬的特征空间,
但是多项式核函数的参数多
当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。
优点:可解决非线性问题、主观设置
缺点:多参数选择、计算量大
sigmoid核

采用sigmoid核函数,支持向量机实现的就是只包含一个隐层,激活函数为 Sigmoid 函数的神经网络。
应用SVM方法,隐含层节点数目(它确定神经网络的结构)、隐含层节点对输入节点的权值都是在设计(训练)的过程中自动确定的。
而且支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部最小值,也保证了它对于未知样本的良好泛化能力而不会出现过学习现象。
如图, 输入层->隐藏层之间的权重是每个支撑向量,隐藏层的计算结果是支撑向量和输入向量的内积,隐藏层->输出层之间的权重是支撑向量对应的

3.部分程序

 
clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
 

 
load('example1.mat');
plotData(X, y);
title('Traning Dataset');
 
 
C = 1;
model = svmTrain(X, y, C, @linearKernel, 1e-3, 20);
figure;
visualizeBoundaryLinear(X, y, model);
title('Decision Boundary');
 
 
load('example2.mat'); 
 
figure,
plotData(X, y);
title('Traning Dataset');
 
C = 1; sigma = 0.1;
 
figure,
visualizeBoundary(X, y, model);
title('Decision boundary with RBF kernel');
 
 
load('example3.mat'); 
% Plot training data
figure,
plotData(X, y);
 


% Training SVM with RBF Kernel (Dataset 3)
load('example3.mat');
 
[C, sigma] = example3parameters(X, y, Xval, yval);
% Train the SVM
model= svmTrain(X, y, C, @(x1, x2) gaussianKernel(x1, x2, sigma));
figure,
visualizeBoundary(X, y, model);
title('Decision boundary with RBF kernel');

4.部分仿真图预览

 

 

 

 A97

相关文章:

  • 机器学习基础:拉格朗日乘子法
  • Matlab 与 Python 基于窗函数的滤波器设计对比 之 凯瑟窗
  • java web开发(从spring boot到spring cloud)
  • 看呆了!二面高德 Java 岗,问了一堆源码,微服务,分布式,Redis,心累
  • 2022华为杯研究生数学建模竞赛B题思路解析
  • 2022华为杯研究生数学建模竞赛E题思路解析
  • 【C语言】学生考勤管理系统
  • 常用的调试技巧(如何检测bug)
  • SpringBoot二十六课大纲和目录
  • 2022年中国研究生数学建模竞赛C题-汽车制造涂装-总装缓存调序区调度优化问题
  • 2022研究生数模A题——移动场景超分辨定位问题
  • vue2脚手架之全局事件总线
  • spring boot学生社团管理系统的设计与实现毕业设计源码151109
  • STM32CUBEMX开发GD32F303(15)----外部中断EXTI
  • 算法竞赛Java选手的语言快速熟悉指南
  • 【5+】跨webview多页面 触发事件(二)
  • 5、React组件事件详解
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • CODING 缺陷管理功能正式开始公测
  • CSS中外联样式表代表的含义
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • github从入门到放弃(1)
  • go append函数以及写入
  • Linux各目录及每个目录的详细介绍
  • python 装饰器(一)
  • ubuntu 下nginx安装 并支持https协议
  • windows下如何用phpstorm同步测试服务器
  • 从零搭建Koa2 Server
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 关于使用markdown的方法(引自CSDN教程)
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 批量截取pdf文件
  • 主流的CSS水平和垂直居中技术大全
  • 函数计算新功能-----支持C#函数
  • 交换综合实验一
  • #13 yum、编译安装与sed命令的使用
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (4) PIVOT 和 UPIVOT 的使用
  • (C语言)共用体union的用法举例
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (实战篇)如何缓存数据
  • (一)u-boot-nand.bin的下载
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)负载均衡,回话保持,cookie
  • *2 echo、printf、mkdir命令的应用
  • .bat批处理出现中文乱码的情况
  • .Net Redis的秒杀Dome和异步执行
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args