支持向量机SVM详细原理,Libsvm工具箱详解,svm参数说明,svm应用实例,神经网络1000案例之15

news2024/11/27 14:51:35

目录

支持向量机SVM的详细原理
SVM的定义
SVM理论
Libsvm工具箱详解
简介
参数说明
易错及常见问题
SVM应用实例,基于SVM的股票价格预测

支持向量机SVM的详细原理

SVM的定义

支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。
(1)支持向量机(Support Vector Machine, SVM)是一种对数据进行二分类的广义线性分类器,其分类边界是对学习样本求解的最大间隔超平面。

(2)SVM使用铰链损失函数计算经验风险并在求解系统中加入了正则化项以优化结构风险,是一个具有稀疏性和稳健性的分类器 。

(3)SVM可以通过引入核函数进行非线性分类。

SVM理论

1,线性可分性

在这里插入图片描述
2,损失函数
在这里插入图片描述

在这里插入图片描述

3,核函数

在这里插入图片描述
在这里插入图片描述

Libsvm工具箱详解

简介

LIBSVM是台湾大学林智仁(Lin Chih-Jen)教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进、修改以及在其它操作系统上应用;该软件对SVM所涉及的参数调节相对比较少,提供了很多的默认参数,利用这些默认参数可以解决很多问题;并提供了交互检验(Cross Validation)的功能。该软件可以解决C-SVM、ν-SVM、ε-SVR和ν-SVR等问题,包括基于一对一算法的多类模式识别问题。

主要参数说明

Options:可用的选项即表示的涵义如下
  -s svm类型:SVM设置类型(默认0)
  0 – C-SVC
  1 --v-SVC
  2 – 一类SVM
  3 – e -SVR
  4 – v-SVR
  -t 核函数类型:核函数设置类型(默认2)
  0 – 线性:u’v
  1 – 多项式:(ru’v + coef0)^degree
  2 – RBF函数:exp(-r|u-v|^2)
  3 –sigmoid:tanh(r
u’v + coef0)
  -d degree:核函数中的degree设置(针对多项式核函数)(默认3)
  -g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)(默认1/ k)
  -r coef0:核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)
  -c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1)
  -n nu:设置v-SVC,一类SVM和v- SVR的参数(默认0.5)
  -p p:设置e -SVR 中损失函数p的值(默认0.1)
  -m cachesize:设置cache内存大小,以MB为单位(默认40)
  -e eps:设置允许的终止判据(默认0.001)
  -h shrinking:是否使用启发式,0或1(默认1)
  -wi weight:设置第几类的参数C为weight*C(C-SVC中的C)(默认1)
  -v n: n-fold交互检验模式,n为fold的个数,必须大于等于2
  其中-g选项中的k是指输入数据中的属性数。option -v 随机地将数据剖分为n部分并计算交互检验准确度和均方根误差。以上这些参数设置可以按照SVM的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。
具体对应解释如下:

svm类别

指定SVM的类型,下面是可能的取值:

CvSVM::C_SVC C类支持向量分类机。 n类分组 (n \geq 2),允许用异常值惩罚因子C进行不完全分类。
CvSVM::NU_SVC \nu类支持向量分类机。n类似然不完全分类的分类器。参数为 \nu 取代C(其值在区间【0,1】中,nu越大,决策边界越平滑)。
CvSVM::ONE_CLASS 单分类器,所有的训练数据提取自同一个类里,然后SVM建立了一个分界线以分割该类在特征空间中所占区域和其它类在特征空间中所占区域。
CvSVM::EPS_SVR \epsilon类支持向量回归机。训练集中的特征向量和拟合出来的超平面的距离需要小于p。异常值惩罚因子C被采用。
CvSVM::NU_SVR \nu类支持向量回归机。 \nu 代替了 p。
kernel_type –
SVM的内核类型,下面是可能的取值:

CvSVM::LINEAR 线性内核。没有任何向映射至高维空间,线性区分(或回归)在原始特征空间中被完成,这是最快的选择。K(x_i, x_j) = x_i^T x_j.
CvSVM::POLY 多项式内核: K(x_i, x_j) = (\gamma x_i^T x_j + coef0)^{degree}, \gamma > 0.
CvSVM::RBF 基于径向的函数,对于大多数情况都是一个较好的选择: K(x_i, x_j) = e^{-\gamma ||x_i - x_j||^2}, \gamma > 0.
CvSVM::SIGMOID Sigmoid函数内核:K(x_i, x_j) = \tanh(\gamma x_i^T x_j + coef0).
degree – 内核函数(POLY)的参数degree。
gamma – 内核函数(POLY/ RBF/ SIGMOID)的参数\gamma。
coef0 – 内核函数(POLY/ SIGMOID)的参数coef0。
Cvalue – SVM类型(C_SVC/ EPS_SVR/ NU_SVR)的参数C。
nu – SVM类型(NU_SVC/ ONE_CLASS/ NU_SVR)的参数 \nu。
p – SVM类型(EPS_SVR)的参数 \epsilon。
class_weights – C_SVC中的可选权重,赋给指定的类,乘以C以后变成 class_weights_i * C。所以这些权重影响不同类别的错误分类惩罚项。权重越大,某一类别的误分类数据的惩罚项就越大。
term_crit – SVM的迭代训练过程的中止条件,解决部分受约束二次最优问题。您可以指定的公差和/或最大迭代次数。

易错及调参注意事项

1,分类和回归容易搞错,分类-s参数为1,回归-s参数为1
2,bestc参数分类的时候调小,回归的时候调大。
3,安装libsvm参数的时候,工具箱自带的参数容易和matlab自带的冲突,要做好协调

SVM应用实例

基于SVM的股票价格预测MATLAB代码

tic;
close all;
clear;
clc;
format compact;
%% 数据的提取和预处理

% 载入测试数据上证指数(1990.12.19-2009.08.19)
% 数据是一个4579*6的double型的矩阵,每一行表示每一天的上证指数
% 6列分别表示当天上证指数的开盘指数,指数最高值,指数最低值,收盘指数,当日交易量,当日交易额.
load chapter14_sh.mat;

% 提取数据
[m,n] = size(sh);
ts = sh(2:m,1);
tsx = sh(1:m-1,:);

% 画出原始上证指数的每日开盘数
figure;
plot(ts,‘LineWidth’,2);
title(‘上证指数的每日开盘数(1990.12.20-2009.08.19)’,‘FontSize’,12);
xlabel(‘交易日天数(1990.12.19-2009.08.19)’,‘FontSize’,12);
ylabel(‘开盘数’,‘FontSize’,12);
grid on;

% 数据预处理,将原始数据进行归一化
ts = ts’;
tsx = tsx’;

% mapminmax为matlab自带的映射函数
% 对ts进行归一化
[TS,TSps] = mapminmax(ts,1,2);

% 画出原始上证指数的每日开盘数归一化后的图像
figure;
plot(TS,‘LineWidth’,2);
title(‘原始上证指数的每日开盘数归一化后的图像’,‘FontSize’,12);
xlabel(‘交易日天数(1990.12.19-2009.08.19)’,‘FontSize’,12);
ylabel(‘归一化后的开盘数’,‘FontSize’,12);
grid on;
% 对TS进行转置,以符合libsvm工具箱的数据格式要求
TS = TS’;

% mapminmax为matlab自带的映射函数
% 对tsx进行归一化
[TSX,TSXps] = mapminmax(tsx);
% 对TSX进行转置,以符合libsvm工具箱的数据格式要求
TSX = TSX’;

%% 选择回归预测分析最佳的SVM参数c&g

% 首先进行粗略选择:
[bestmse,bestc,bestg] = SVMcgForRegress(TS,TSX,-8,8,-8,8);

% 打印粗略选择结果
disp(‘打印粗略选择结果’);
str = sprintf( ‘Best Cross Validation MSE = %g Best c = %g Best g = %g’,bestmse,bestc,bestg);
disp(str);

% 根据粗略选择的结果图再进行精细选择:
[bestmse,bestc,bestg] = SVMcgForRegress(TS,TSX,-4,4,-4,4,3,0.5,0.5,0.05);

% 打印精细选择结果
disp(‘打印精细选择结果’);
str = sprintf( ‘Best Cross Validation MSE = %g Best c = %g Best g = %g’,bestmse,bestc,bestg);
disp(str);

%% 利用回归预测分析最佳的参数进行SVM网络训练
cmd = ['-c ', num2str(bestc), ’ -g ‘, num2str(bestg) , ’ -s 3 -p 0.01’];
model = svmtrain(TS,TSX,cmd);

%% SVM网络回归预测
[predict,mse] = svmpredict(TS,TSX,model);
predict = mapminmax(‘reverse’,predict’,TSps);
predict = predict’;

% 打印回归结果
str = sprintf( ‘均方误差 MSE = %g 相关系数 R = %g%%’,mse(2),mse(3)*100);
disp(str);

%% 结果分析
figure;
hold on;
plot(ts,‘-o’);
plot(predict,‘r-^’);
legend(‘原始数据’,‘回归预测数据’);
hold off;
title(‘原始数据和回归预测数据对比’,‘FontSize’,12);
xlabel(‘交易日天数(1990.12.19-2009.08.19)’,‘FontSize’,12);
ylabel(‘开盘数’,‘FontSize’,12);
grid on;

figure;
error = predict - ts’;
plot(error,‘rd’);
title(‘误差图(predicted data - original data)’,‘FontSize’,12);
xlabel(‘交易日天数(1990.12.19-2009.08.19)’,‘FontSize’,12);
ylabel(‘误差量’,‘FontSize’,12);
grid on;

figure;
error = (predict - ts’)./ts’;
plot(error,‘rd’);
title(‘相对误差图(predicted data - original data)/original data’,‘FontSize’,12);
xlabel(‘交易日天数(1990.12.19-2009.08.19)’,‘FontSize’,12);
ylabel(‘相对误差量’,‘FontSize’,12);
grid on;
snapnow;
toc;

%% 子函数 SVMcgForRegress.m
% function [mse,bestc,bestg] = SVMcgForRegress(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,msestep)
% %SVMcg cross validation by faruto
%
% %
% % by faruto
% %Email:patrick.lee@foxmail.com QQ:516667408 http://blog.sina.com.cn/faruto BNU
% %last modified 2010.01.17
% %Super Moderator @ www.ilovematlab.cn
%
% % 若转载请注明:
% % faruto and liyang , LIBSVM-farutoUltimateVersion
% % a toolbox with implements for support vector machines based on libsvm, 2009.
% % Software available at http://www.ilovematlab.cn
% %
% % Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for
% % support vector machines, 2001. Software available at
% % http://www.csie.ntu.edu.tw/~cjlin/libsvm
%
% % about the parameters of SVMcg
% if nargin < 10
% msestep = 0.06;
% end
% if nargin < 8
% cstep = 0.8;
% gstep = 0.8;
% end
% if nargin < 7
% v = 5;
% end
% if nargin < 5
% gmax = 8;
% gmin = -8;
% end
% if nargin < 3
% cmax = 8;
% cmin = -8;
% end
% % X:c Y:g cg:acc
% [X,Y] = meshgrid(cmin:cstep:cmax,gmin:gstep:gmax);
% [m,n] = size(X);
% cg = zeros(m,n);
%
% eps = 10^(-4);
%
% bestc = 0;
% bestg = 0;
% mse = Inf;
% basenum = 2;
% for i = 1:m
% for j = 1:n
% cmd = [‘-v ‘,num2str(v),’ -c ‘,num2str( basenum^X(i,j) ),’ -g ‘,num2str( basenum^Y(i,j) ),’ -s 3 -p 0.1’];
% cg(i,j) = svmtrain(train_label, train, cmd);
%
% if cg(i,j) < mse
% mse = cg(i,j);
% bestc = basenum^X(i,j);
% bestg = basenum^Y(i,j);
% end
%
% if abs( cg(i,j)-mse )<=eps && bestc > basenum^X(i,j)
% mse = cg(i,j);
% bestc = basenum^X(i,j);
% bestg = basenum^Y(i,j);
% end
%
% end
% end
% % to draw the acc with different c & g
% [cg,ps] = mapminmax(cg,0,1);
% figure;
% [C,h] = contour(X,Y,cg,0:msestep:0.5);
% clabel(C,h,‘FontSize’,10,‘Color’,‘r’);
% xlabel(‘log2c’,‘FontSize’,12);
% ylabel(‘log2g’,‘FontSize’,12);
% firstline = ‘SVR参数选择结果图(等高线图)[GridSearchMethod]’;
% secondline = [‘Best c=’,num2str(bestc),’ g=‘,num2str(bestg), …
% ’ CVmse=’,num2str(mse)];
% title({firstline;secondline},‘Fontsize’,12);
% grid on;
%
% figure;
% meshc(X,Y,cg);
% % mesh(X,Y,cg);
% % surf(X,Y,cg);
% axis([cmin,cmax,gmin,gmax,0,1]);
% xlabel(‘log2c’,‘FontSize’,12);
% ylabel(‘log2g’,‘FontSize’,12);
% zlabel(‘MSE’,‘FontSize’,12);
% firstline = ‘SVR参数选择结果图(3D视图)[GridSearchMethod]’;
% secondline = [‘Best c=’,num2str(bestc),’ g=‘,num2str(bestg), …
% ’ CVmse=’,num2str(mse)];
% title({firstline;secondline},‘Fontsize’,12);

效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结果分析

从效果图看,SVM能很好的实现股票价格的预测,相对于传统的二分类SVM,libsvm工具箱,不仅能实现多分类,还可以实现回归分析,大大扩展了SVM的应用范围,在很多方面,特别小样本难训练的问题的应用方面,SVM拥有特别的优势

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

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

相关文章

Scala面向对象详解(第六章:Scala包、类和对象、封装、继承和多态、抽象、单例、特质)(尚硅谷笔记)

面向对象第 6 章 面向对象6.1 Scala 包6.1.1 包的命名6.1.2 包说明&#xff08;包语句&#xff09;6.1.3 包对象6.1.4 导包说明6.2 类和对象6.2.1 定义类6.2.2 属性6.3 封装6.1.5 访问权限6.2.3 方法6.2.4 创建对象6.2.5 构造器6.2.6 构造器参数6.4 继承和多态6.5 抽象类6.5.1 …

基于机器学习的二手车价格预测及应用实现(预测系统实现)

1.摘要 随着中国汽车工业的迅速发展&#xff0c;国内的汽车数量也在迅速增长。新车销售市场已经逐渐饱和&#xff0c;而二手车交易市场正在兴起。但是&#xff0c;由于中国的二手车市场尚未成熟&#xff0c;与发达国家相比仍存在较大差距。其中一个重要原因是二手车的市场价格难…

信息系统项目管理师试题精选(四)

【1】关于区块链的描述&#xff0c;不正确的是&#xff08; &#xff09;。A. 区块链的共识机制可有效防止记账节点信息被篡改B. 区块链可在不可信的网络进行可信的信息交换C. 存储在区块链的交易信息是高度加密D. 区块链是一个分布式共享账本和数据库【2】&#xff08; &#…

记录一次Android视频播放音画不同步问题的定位及分析

1.何为音画不同步 音画不同步很简单就是视频播放过程中声音和画面出现的时间点不一致&#xff0c;滞后或者提前。 2.音画不同步问题分析思路 2.1.音画不同步问题的证明 对于滞后或者提前很多的音画不同步可以直接认为发生了该问题&#xff0c;但是滞后或者提前不是很多的就…

Linux系统安装MySQL8.0版本详细教程【亲测有效】

首先官网下载安装包&#xff1a;https://downloads.mysql.com/archives/community/ 一、上传到安装服务器 二、解压 tar -xvf mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz三、移动位置并重新命名 mv mysql-8.0.31-linux-glibc2.12-x86_64 /usr/local/mysql四、创建mysql用户…

信息安全基础概要(二)——安全保护等级,安全服务与安全机制

目录 一、OSI/RM七层模型 二、各个网络层次的安全保障 三、计算机信息系统安全保护等级划分准则(GB17859-1999) 四、信息安全体系结构——安全服务与安全机制 前篇&#xff1a; https://blog.csdn.net/superSmart_Dong/article/details/125690697 一、OSI/RM七层模型 广播…

每日一题——L1-070 吃火锅(15)

L1-070 吃火锅 分数 15 以上图片来自微信朋友圈&#xff1a;这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”&#xff0c;那就厉害了&#xff0c;我们的故事就开始了。 本题要求你实现一个程序&#xff0c;自动检查你朋友给你发来的信息里有没有 chi1 huo…

字节是真的难进,测开4面终上岸,压抑5个月,终于可以放声呐喊

这次字节的面试&#xff0c;给我的感触很深&#xff0c;意识到基础的重要性。一共经历了五轮面试&#xff1a;技术4面&#xff0b;HR面。 下面看正文 本人自动专业毕业&#xff0c;压抑了五个多月&#xff0c;终于鼓起勇气&#xff0c;去字节面试&#xff0c;下面是我的面试过…

Mysql 索引(二)—— InnoDB 与 MyISAM 索引方式的比较(聚簇索引 VS 非聚簇索引)

在上一部分了解到&#xff0c;主键索引的本质其实就是一棵B树&#xff0c;通过每一层的目录页来找到记录所在的page页。根据 page页是否保存了数据&#xff0c;我们可以将主键索引分为 聚簇索引 和 非聚簇索引。 1、MyISAM (1) 非聚簇索引 非聚簇索引的目录和数据记录是分开存…

NPE:记一次脑残NPE的排查过程

目录 碎碎念&#xff1a; 如下这行报NPE&#xff1a; 排查过程&#xff1a; 解解方案&#xff1a; 小结&#xff1a; 空指针出现的几种情况&#xff1a; 如何从根源避免空指针&#xff1a; 赋值时自动拆箱出现空指针&#xff1a; 1、变量赋值自动拆箱出现的空指针 2、…

接了ChatGPT的NewBing如何评价CodeGeeX

一篇《如何用 CodeGeeX 替代 GitHub Copilot》的文章在开发者社区登上热榜&#xff0c;开发者关注的AI生成代码工具CodeGeeX&#xff0c;这款插件产品目前支持在VSCode市场和Jetbrains IDEs下载使用&#xff0c;是国产对标Copilot目前安装量最大的开发者工具。 之所以引发开发…

JS 中 for in 和 for of 的区别

for in 和 for of 是js中常用的遍历方法&#xff1b;两者的区别如下&#xff1a; 文章目录一&#xff0c;遍历数组二&#xff0c;遍历对象三&#xff0c;总结一&#xff0c;遍历数组 1&#xff0c;for in 是ES5的语法标准&#xff0c;而for of则是ES6语法标准。 const arr1 …

CD19药物|适应症|市场销售-上市药品前景分析

CD19是免疫球蛋白Ig超家族的I型跨膜糖蛋白&#xff0c;仅在B细胞中表达。CD19在b细胞发育的多个阶段通过调节b细胞受体信号通路参与b细胞的命运和分化。CD19在B细胞上普遍表达&#xff0c;如在B细胞恶性肿瘤中的表达&#xff0c;涵盖了B细胞淋巴瘤的所有亚型&#xff0c;从惰性…

IP地理位置定位技术原理是什么

IP地理位置定位技术的原理是基于IP地址的网络通信原理和基础上的。它利用IP地址所包含的一些信息&#xff0c;如网络前缀和地址段&#xff0c;以及ISP的IP地址归属地数据库&#xff0c;来推测IP地址所对应的地理位置。具体来说&#xff0c;IP地址是由32位二进制数字组成的&…

AndroidStudio Push第一次代码到 Git

1、首先需要在远程创建一个空仓库&#xff0c;我使用 GiteeAS创建新项目&#xff0c;在项目文件夹根目录下命令行 git init 或者在AS 的工具栏找到VCS -> Enable Version Control Integration之后工具栏就出现 git 的操作图标了push 本地代码到远程如果直接 git push 就会出…

MeterSphere 如何连接Mongodb数据库

MeterSphere 如何连接Mongodb数据库 前言&#xff1a;最近有在使用Metersphere的时候遇到了需要连接Mongodb的需求&#xff0c;而Metersphere只支持以下四种通过数据库驱动连接&#xff1a;mysql、sql server、oracle、pgsql&#xff0c;现在给大家分享一种通过前置脚本连接mo…

数学(二)-- LeetCode[204] 计数质数

1 计数质数 1.1 题目描述 给定整数 n &#xff0c;返回 所有小于非负整数 n 的质数的数量 。 示例 1&#xff1a; 输入&#xff1a;n 10 输出&#xff1a;4 解释&#xff1a;小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 示例 2&#xff1a; 输入&#xff1a;n 0 输出&…

Redis学习之持久化(六)

这里写目录标题一、持久化简介1.1 持久化1.2 Redis持久化的两种形式二、RDB2.1 RDB概念2.2 save指令手动执行一次保存配置相关参数2.3 bgsave指令2.4 save配置自动执行2.5 RDB三种启动方式对比三、AOF3.1 AOF概念3.2 AOF执行策略3.3 AOF重写四、RDB和AOF区别2.1 RDB与AOF对比&a…

LQB04 蜂鸣器和继电器的操作。和代码

硬件图 编程实现 图中 &#xff0c;用Y5C控制ULN2003芯片。 所以要选通Y5C ; ULN2003芯片是个反相放大&#xff0c;IN口是1&#xff0c;OUT口出来是0&#xff1b;IN口是0&#xff0c;出来是1&#xff1b; 蜂鸣器和继电器&#xff0c;都是0点亮&#xff0c;发声&#xff1b;那…

macOS搭建Nexus 3.x为Maven的资源仓库服务器 Maven私服搭建

1 下载 Nexus 服务器安装包 目前的版本有 2.X 和 3.X &#xff0c;2.X 对 Maven 的支持更友好一点&#xff0c;3.X 的支持范围更广&#xff0c;支持 ruby 和 docker。但是 3.X 要求 JDK 的版本是1.8&#xff0c;而且貌似还需要做特殊配制。 官网地址&#xff1a;https://www.…