c matlab 精度,svm去优化参数C和g,输出正确率accuracy老是0

下面这个是测试的M文件

%% Matlab神经网络43个案例分析

%% 清空环境变量

function chapter_GridSearch

close all;

clear;

clc;

format compact;

%% 数据提取

% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量

load wine.mat;

% 画出测试数据的box可视化图

figure;

boxplot(wine,'orientation','horizontal','labels',categories);

title('wine数据的box可视化图','FontSize',12);

xlabel('属性值','FontSize',12);

grid on;

% 画出测试数据的分维可视化图

figure

subplot(3,5,1);

hold on

for run = 1:178

plot(run,wine_labels(run),'*');

end

xlabel('样本','FontSize',10);

ylabel('类别标签','FontSize',10);

title('class','FontSize',10);

for run = 2:14

subplot(3,5,run);

hold on;

str = ['attrib ',num2str(run-1)];

for i = 1:178

plot(i,wine(i,run-1),'*');

end

xlabel('样本','FontSize',10);

ylabel('属性值','FontSize',10);

title(str,'FontSize',10);

end

% 选定训练集和测试集

% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集

train_wine = [wine(1:30,:);wine(60:95,:);wine(131:153,:)];

% 相应的训练集的标签也要分离出来

train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];

% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集

test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];

% 相应的测试集的标签也要分离出来

test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];

%% 数据预处理

% 数据预处理,将训练集和测试集归一化到[0,1]区间

[mtrain,ntrain] = size(train_wine);

[mtest,ntest] = size(test_wine);

dataset = [train_wine;test_wine];

% mapminmax为MATLAB自带的归一化函数

[dataset_scale,ps] = mapminmax(dataset',0,1);

dataset_scale = dataset_scale';

train_wine = dataset_scale(1:mtrain,:);

test_wine = dataset_scale( (mtrain+1):(mtrain+mtest),: );

%% 选择最佳的SVM参数c&g

% 首先进行粗略选择: c&g 的变化范围是 2^(-10),2^(-9),...,2^(10)

[bestacc,bestc,bestg] = SVMcgForClass(train_wine_labels,train_wine,-10,10,-10,10);

% 打印粗略选择结果

disp('打印粗略选择结果');

str = sprintf( 'Best Cross Validation Accuracy = %g%% Best c = %g Best g = %g',bestacc,bestc,bestg);

disp(str);

% 根据粗略选择的结果图再进行精细选择: c 的变化范围是 2^(-2),2^(-1.5),...,2^(4), g 的变化范围是 2^(-4),2^(-3.5),...,2^(4),

[bestacc,bestc,bestg] = SVMcgForClass(train_wine_labels,train_wine,-2,4,-4,4,3,0.5,0.5,0.9);

% 打印精细选择结果

disp('打印精细选择结果');

str = sprintf( 'Best Cross Validation Accuracy = %g%% Best c = %g Best g = %g',bestacc,bestc,bestg);

disp(str);

%% 利用最佳的参数进行SVM网络训练

cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg)];

model = svmtrain(train_wine_labels,train_wine,cmd);

%% SVM网络预测

[predict_label,accuracy] = svmpredict(test_wine_labels,test_wine,model);

% 打印测试集分类准确率

total = length(test_wine_labels);

right = sum(predict_label == test_wine_labels);

disp('打印测试集分类准确率');

str = sprintf( 'Accuracy = %g%% (%d/%d)',accuracy(1),right,total);

disp(str);

%% 结果分析

% 测试集的实际分类和预测分类图

% 通过图可以看出只有三个测试样本是被错分的

figure;

hold on;

plot(test_wine_labels,'o');

plot(predict_label,'r*');

xlabel('测试集样本','FontSize',12);

ylabel('类别标签','FontSize',12);

legend('实际测试集分类','预测测试集分类');

title('测试集的实际分类和预测分类图','FontSize',12);

grid on;

snapnow;

%% 子函数 SVMcgForClass.m

function [bestacc,bestc,bestg] = SVMcgForClass(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,accstep)

%SVMcg cross validation by faruto

% about the parameters of SVMcg

if nargin < 10

accstep = 4.5;

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:CVaccuracy

[X,Y] = meshgrid(cmin:cstep:cmax,gmin:gstep:gmax);

[m,n] = size(X);

cg = zeros(m,n);

eps = 10^(-4);

% record acc with different c & g,and find the bestacc with the smallest c

bestc = 1;

bestg = 0.1;

bestacc = 0;

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) )];

cg(i,j) = svmtrain(train_label, train, cmd);

if cg(i,j) <= 55

continue;

end

if cg(i,j) > bestacc

bestacc = cg(i,j);

bestc = basenum^X(i,j);

bestg = basenum^Y(i,j);

end

if abs( cg(i,j)-bestacc )<=eps && bestc > basenum^X(i,j)

bestacc = cg(i,j);

bestc = basenum^X(i,j);

bestg = basenum^Y(i,j);

end

end

end

% to draw the acc with different c & g

figure;

[C,h] = contour(X,Y,cg,70:accstep:100);

clabel(C,h,'Color','r');

xlabel('log2c','FontSize',12);

ylabel('log2g','FontSize',12);

firstline = 'SVC参数选择结果图(等高线图)[GridSearchMethod]';

secondline = ['Best c=',num2str(bestc),' g=',num2str(bestg), ...

' CVAccuracy=',num2str(bestacc),'%'];

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,30,100]);

xlabel('log2c','FontSize',12);

ylabel('log2g','FontSize',12);

zlabel('Accuracy(%)','FontSize',12);

firstline = 'SVC参数选择结果图(3D视图)[GridSearchMethod]';

secondline = ['Best c=',num2str(bestc),' g=',num2str(bestg), ...

' CVAccuracy=',num2str(bestacc),'%'];

title({firstline;secondline},'Fontsize',12);

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

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

相关文章

微服务pact测试框架_消费者驱动的Pact和Spring Boot测试

微服务pact测试框架最近&#xff0c;我的一位同事偶然发现了Pact.io &#xff0c;我们目前的应用程序已扩展到 50多种服务&#xff0c;并且我们开始出现一些集成测试失败和脆弱的开发/验收测试环境。 因此&#xff0c;我们决定研究尝试与此相关的方法。 我从阅读开始&#xff…

用access建立一个试题库_Access考试题库(含答案).doc

所有单选题1、用Access创建的数据库文件&#xff0c;其扩展名是______。A&#xff1a;.adpB&#xff1a;.dbfC&#xff1a;.frmD&#xff1a;.mdb答案&#xff1a;D2、数据库系统的核心是______。A&#xff1a;数据模型B&#xff1a;数据库管理系统C&#xff1a;数据库D&#x…

Linux 命令之 arch --显示主机的硬件结构类型

文章目录介绍命令示例介绍 arch命令主要用于显示当前主机的硬件结构类型&#xff0c;arch命令输出的结果有&#xff1a;i386、i486、mips、alpha等。 此命令的适用范围&#xff1a;RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。 命令示例 显示当前主机硬件架构类…

mega5安装包_[MEGA DEAL] 2017年完全Java捆绑包(95%折扣)

mega5安装包深入了解编程奥德赛&#xff08;58小时&#xff01;&#xff09;&#xff0c;进入最常用的编程语言 嘿&#xff0c;怪胎&#xff0c; 本周&#xff0c;在我们的JCG Deals商店中 &#xff0c;我们提供了一个极端的报价 。 我们提供的2017 Complete Java Bundle 仅…

det曲线_平面曲线的曲率的复数表示

开学已经是第二周了&#xff0c;我的《微分几何》也上课两周了&#xff0c;进度比较慢&#xff0c;现在才讲到平面曲线的曲率。在平面曲线$\boldsymbol{t}(t)(x(t),y(t))$某点上可以找出单位切向量。$$\boldsymbol{t}\left(\frac{dx}{ds},\frac{dy}{ds}\right)$$其中$ds^2 dx^2…

matlab计算微分ppt,matlab-ch013(数值计算-微积分)20090923.ppt

matlab-ch013(数值计算-微积分)20090923.ppt 第13讲 数值计算 —微积分,张建瓴,13.1 数值积分,在工程教学和应用中&#xff0c;除了进行数据逼近外&#xff0c;还要求逼近曲线下面的面积&#xff0c;这就是积分问题。,一、数值积分方法,典型的数值积分方法有&#xff1a;用常数…

Linux 关于查看 cpu 的命令

文章目录查看物理 cpu 个数查看每个物理 cpu 中core的个数(即核数)查看逻辑 cpu 的个数查看 cpu 信息&#xff08;型号&#xff09;查看 cpu 的配置信息查看cpu波动情况的&#xff0c;尤其是多核机器上参考文档备注/说明查看物理 cpu 个数 [roothtlwk0001host ~]# cat /proc/c…

JDK 9中不推荐使用Java的Observer和Observable

在博客文章《 应用JDK 9 Deprecated增强功能》中 &#xff0c;我讨论了JDK 9中 Deprecated批注中对forRemoval&#xff08;&#xff09;和since&#xff08;&#xff09;可选元素&#xff08;方法&#xff09;的添加 。 我在那篇文章中说&#xff1a;“在Java SE API上应用新的…

php快速开发框架津县,BetePHP:一个轻量级快速开发框架

BetePHP关于BetePHP是一个轻量级快速开发框架。框架提供了一致的API接口&#xff0c;使得使用接口尽可能流畅&#xff1b;由于框架本身不依赖其他库&#xff0c;这使得框架本身运行速度非常快&#xff1b;框架希望使用最简单的方式make thing done&#xff0c;减少开发者的开发…

Linux 命令之 vmstat 命令-显示虚拟内存状态

介绍 vmstat 命令的含义为显示虚拟内存状态&#xff08;“Virtual Memory Statistics”&#xff09;&#xff0c;但是它可以报告关于进程、内存、I/O等系统整体运行状态。 常用选项 选项说明-a显示活跃和非活跃内存-f显示从系统启动至今的fork数量-m显示 slabinfo-n只在开始…

python编译后的文件_python 编译源文件

背景近期项目到了部署的阶段。由于项目后台和算法都是用Python "撸的"&#xff0c;但是又不希望将源代码直接 "release" 到 “客户”哪里。于是开始思考。。。首先&#xff0c;按照惯性思维&#xff0c;能否将编译后的东东放出去呢&#xff1f;(类似java或…

java创建和销毁一个对象_有效的Java –创建和销毁对象

java创建和销毁一个对象创建和销毁对象&#xff08;第2章&#xff09; 这是Joshua Blochs的《 有效的Java》第2章的简短摘要。我仅包括与自己相关的项目。 静态工厂&#xff08;项目1&#xff09; 静态工厂与构造函数的一些优点&#xff1a; 工厂方法的名称为构造函数添加了描…

WorkPlus一站式协同解决方案,助力企业降本增效

在企业数字化转型的过程中&#xff0c;很多企业都会遇到一个共同问题&#xff1a;重复建设基础功能&#xff0c;耗费大量时间和资源。为解决这一难题&#xff0c;WorkPlus已经将一些通用、基础且有技术门槛的功能进行了集成与开发&#xff0c;如IM&#xff08;即时通讯&#xf…

linux在oracle新建表,Oracle创建表及管理表

1. Oracle表的创建及管理创建表包括三个要素&#xff0c;表名&#xff0c;列名&#xff0c;数据类型。每个表都有对应不同的列&#xff0c;每个列都有唯一对应的数据类型。常用数据类型简介&#xff1a;数据类型描述CHARACTER(n)字符/字符串。固定长度 n。INTEGER(p)整数值(没有…

Linux 命令之 top -- 实时显示进程动态/查看进程信息

文章目录介绍常用选项交互命令参考示例示例 1&#xff1a;直接输入命令 top 就可以动态显示进程信息统计参数信息详解进程属性说明&#xff08;即进程列表的字段说明&#xff09;其它1.在 top 基本视图中&#xff0c;按键盘数字 1 可以监控每个逻辑 CPU 的状况2.敲击键盘 b&…

Linux 命令之 iostat 命令-监视系统输入输出设备和 cpu 的使用情况

介绍 iostat命令被用于监视系统输入输出设备和 CPU 的使用情况。它的特点是汇报磁盘活动统计情况&#xff0c;同时也会汇报出 CPU 使用情况。同 vmstat 一样&#xff0c;iostat 也有一个弱点&#xff0c;就是它不能对某个进程进行深入分析&#xff0c;仅对系统的整体情况进行分…

else 策略模式去掉if_如何用卫语句、策略模式、状态模式重构if-else语句

《java开发手册》中:况且日常开发时遇到一推的if-else着实让人头疼!so&#xff0c;现在开始改造一、卫语句卫语句就是把复杂的条件表达式拆分成多个条件表达式&#xff0c;即代码逻辑先考虑失败、异常、中断、退出等直接返回的情况&#xff0c;以方法多个出口的方式&#xff0c…

oracle同步恢复目录,Oracle创建恢复目录(catalog)

Oracle创建恢复目录(catalog)&#xff0c;在catalog数据库上创建cat用户的表空间。Oracle创建恢复目录1.在catalog数据库上创建cat用户的表空间SQL> create tablespace cat datafile /home/oracle/oradata/orcl/cat.dbf size 512M;2.创建cat用户SQL> Create user cat ide…

java登录界面命令_Java命令行界面(第3部分):jbock

java登录界面命令在本系列中有关使用Java进行命令行分析的前两篇文章中&#xff0c;我介绍了Apache Commons CLI和args4j库。 在本系列的第三篇文章中&#xff0c;我介绍了jbock &#xff0c;它是自我描述的“非常简单的CLI解析器”。 我在Java命令行解析中的帖子使用了一些示…

数仓建模 项目_模型设计_数仓建模 PDF 下载

主要内容&#xff1a;数据仓库按照传统的定义&#xff0c;数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持管理决策。从数据角度&#xff0c;数据仓库更适合传统的数据库&#xff0c;离线采集&#xff0c;数据一般为结构化的。当然…