【代码在抽取训练集和测试集部分出错】

收获:

1.0 得知libsvm对于多分类问题默认使用的就是1 vs 1;
2.0 得知分类标签常用+1,-1,但是是任意选择的,对于多分类问题,建议选择1,2,3...
3.0 交叉验证寻找最优的c和gamma效果不错,但是用时过长。
4.0 libsvm的详细用法和参数解析:上一页。

1.采用交叉验证法获得的最大识别率为98.75,与不适用交叉验证的区别还是很大的。

2:1 vs rest 代码待写…

3.matlab训练代码如下:

% libsvm默认的多分类问题就是使用的 1v1;
% 可以自己写1 vs rest
clc;
clear all;
f_id = fopen('iris.data');
if(f_id==2)disp('打开文件失败');return;
end
% 读取全部数据,并获取全部分类。
% oneFloatFlag = 0;
xapp = []; % 全部数据
tagSetData = [];  % o
tagVerData = [];  % s
tagVirData = [];  % g
vec = zeros(6,1);
olabel = [];
slabel = [];
glabel = [];
while ~feof(f_id)c = fscanf(f_id,'%f,%f,%f,%f,%s',[1,5]); % 处理一行vec = [c(1);c(2);c(3);c(4)];xapp = [xapp,vec];if (c(13)==111)tagSetData = [tagSetData,vec];olabel = [olabel,1];elseif (c(13)==115)tagVerData = [tagVerData,vec];slabel = [slabel,2];elseif (c(13)==103)tagVirData = [tagVirData,vec];glabel = [glabel,3];end
end
fclose(f_id);
% 总数据
all_data = [tagSetData,tagVerData,tagVirData];
all_label = [olabel,slabel,glabel];
% 打乱数据,然后取80个训练,70个测试:
x_train = [];
y_train = [];
trainNumber = 80;
[N,M] = size(all_data);
p = randperm(M);
for i = 1:trainNumberx_train = [x_train,all_data(:,p(i))]; % 数据y_train= [y_train,all_label(p(i))]; % 数据的标签
end
x_train = x_train';
y_train = y_train';% 获取测试样本
x_test = [];
y_test = [];
for i =trainNumber+1:Mx_test = [x_test,all_data(i:p(i))];y_test = [y_test,all_label(p(i))];
end
x_test = x_test';
y_test = y_test';
% 归一化数据;
[Tn,Tm] = size(x_train);
avgX = mean(x_train);
stdX = std(x_train);
for i = 1:Tn      % 以行遍历所有数据x_train(i,:) = (x_train(i,:)-avgX)./stdX;
end
[Tn,Tm] = size(x_test);
avgX = mean(x_test);
stdX = std(x_test);
for i = 1:Tn      % 以行遍历所有数据x_test(i,:) = (x_test(i,:)-avgX)./stdX;
end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%SVM Gaussian kernel
%Search for the optimal C and gamma, K(x1,x2) = exp{-||x1-x2||^2/gamma} to
%make the recognition rate maximum. %Firstly, search C and gamma in a crude scale (as recommended in 'A practical Guide to Support Vector Classification'))
CScale = [-5, -3, -1, 1, 3, 5,7,9,11,13,15];
gammaScale = [-15,-13,-11,-9,-7,-5,-3,-1,1,3];
C = 2.^CScale;
gamma = 2.^gammaScale;
maxRecognitionRate = 0;
for i = 1:length(C)  % 找到最佳的超参数 c 和 gama 的下标for j = 1:length(gamma)   % svm训练参数设置:cmd=['-t 2 -c ',num2str(C(i)),' -g ',num2str(gamma(j)),' -v 5'];recognitionRate = svmtrain(y_train,x_train,cmd); %训练数据和参数if recognitionRate>maxRecognitionRatemaxRecognitionRate = recognitionRate;maxCIndex = i;maxGammaIndex = j;endend
end
% 在一个精确的尺度上搜索最优的C和gamma。(上述求得的尺度)
% 寻找最佳c和gama的附近的值;由于CScale和gamaScale是递增的,所以,小一点往后退,大一点向前走
% 等分长度:
n = 10;
minScale = 0.5*(CScale(max(1,maxCIndex-1)) + CScale(maxCIndex));
maxScale = 0.5*(CScale(min(length(CScale),maxCIndex+1)) +CScale(maxCIndex));
newCScale = [minScale:(maxScale-minScale)/n:maxScale];
minGammaScale = 0.5*(gammaScale(max(1,maxGammaIndex-1))+gammaScale(maxGammaIndex));
maxGammaScale = 0.5*(gammaScale(min(length(gammaScale),maxGammaIndex+1))+gammaScale(maxGammaIndex));
newGammaScale = [minGammaScale:(maxGammaScale-minGammaScale)/n:maxGammaScale];
newC = 2.^newCScale;
newGamma = 2.^newGammaScale;
maxRecognitionRate = 0;
for i = 1:length(newC)  % 找到最佳的超参数 c 和 gama 的下标for j = 1:length(newGamma)   % svm训练参数设置:cmd=['-t 2 -c ',num2str(newC(i)),' -g ',num2str(newGamma(j)),' -v 5'];recognitionRate = svmtrain(y_train,x_train,cmd); %训练数据和参数if recognitionRate>maxRecognitionRatemaxRecognitionRate = recognitionRate;maxC = i;maxG = j;endend
end
% 使用上述求得得最好的C和gama训练模型
cmd=['-t 2 -c ',num2str(maxC),' -g ',num2str(maxG)];
model = svmtrain(y_train,x_train,cmd);
save model.mat model;
save x_train.mat x_train;
save y_train.mat y_train;
save x_test.mat x_test;
save y_test.mat y_test;

SVM多分类问题例子+matlab代码相关推荐

  1. 【SVM预测】基于人工蜂群算法优化支持向量机SVM实现数据预测附Matlab代码

    1 简介 为确定合理的底板防水煤岩柱尺寸,减少底板突水安全事故的发生,利用支持向量机(SVM)与人工蜂群算法(ABCA)综合研究底板破坏深度问题.由于SVM训练参数惩罚因子C和核函数宽度g的选择对预测 ...

  2. 利用SVM小样本机械故障诊断(MATLAB代码)

    1.结果展示 2.数据集介绍: 以小型实验台滚动轴承的振动信号为例(正常,内圈故障,外圈故障,滚动体故障,保持架故障) 2.1训练数据集特征(10个样本) 2.2训练集标签

  3. 基于LSTM和SVM的设备故障诊断(Matlab代码实现)

  4. 【机器学习】SVM多分类问题及基于sklearn的Python代码实现

    SVM多分类问题及Python代码实现 1. 什么是SVM? 2. SVM的分类 3. SVM决策函数类型 4. SVM多分类的Python代码实现 参考资料 1. 什么是SVM? 对于这个点已经介绍 ...

  5. (论文加源码)基于时频域特征分析和SVM分类器的DEAP脑电信号情感状态识别(matlab代码)(四分类)

    论文和源码见个人主页:https://download.csdn.net/download/qq_45874683/85069822 (论文加源码)(matlab代码)基于时频域特征分析和SVM分类器 ...

  6. 【SVM分类】基于粒子群算法优化支持向量机实现葡萄酒数据分类附matlab代码

    1 简介 在机器学习领域,要处理的数据的规模越来越大,而学习算法在数据的特征过多的时候,往往会产生性能上的下降.作为解决这个问题的有效手段,特征选择一直以来都得到了广泛的关注.粒子群优化算法作为一种优 ...

  7. 基于matlab支持向量机SVM多分类手写体数字识别

    此程序为本人模式识别大作业,参考了网上的代码,并进行了一定的修改,希望对大家有所帮助! 此代码主要参考了以下文章: https://blog.csdn.net/Einperson/article/de ...

  8. 故障诊断分类 matlab代码 轴承内圈、外圈、滚动体故障分类

    故障诊断分类 matlab代码 轴承内圈.外圈.滚动体故障分类 (1)故障样本的时域.频域.时频域.熵等特征提取: (2)BP网络或者SVM模型训练与测试 (3)输出测试样本分类准确率 成套代码,注释 ...

  9. 基于蝗虫(蚱蜢)优化算法优化的支持向量机分类模型及其MATLAB实现-附代码

    基于蝗虫(蚱蜢)优化算法GOA优化的支持向量机分类模型SVM及其MATLAB实现-附代码 文章目录 基于蝗虫(蚱蜢)优化算法GOA优化的支持向量机分类模型SVM及其MATLAB实现-附代码 1. 模型 ...

  10. 【SVM分类】基于matlab哈里斯鹰算法优化支持向量机SVM分类【含Matlab源码 2243期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[SVM分类]基于matlab哈里斯鹰算法优化支持向量机SVM分类[含Matlab源码 2243期] 获取代码方式2: 付费专栏Matla ...

最新文章

  1. 考考基础部分,谈谈Java集合中HashSet的原理及常用方法
  2. 引入外部css_css
  3. 144.ipv4地址匮乏的解决方法
  4. Java_JDBC_MySql
  5. 通过PDF无纸化测试SAP SmartForm打印效果
  6. MDCC 2016:网易云信直击移动IM之痛
  7. 2019年四月计算机语言排名,2019编程语言排行榜_编程语言排行榜2019年4月 TIOBE编程语言排行榜2019年最...
  8. Mysql主备延迟的原因
  9. 吴恩达机器学习笔记二之多变量线性回归
  10. JVM虚拟机-Class文件之访问标志
  11. python wmi读取网卡MAC地址、CPU序列号、硬盘序列号、主板序列号、BIOS序列号
  12. 一致性哈希和redis分布式集群
  13. 日文輸入法学习和日文键盘图
  14. Android 调起微信扫一扫
  15. GitHub项目之12306抢票软件
  16. 论文笔记:HIE-SQL:History Information Enhanced Network for Context-Dependent Text-to-SQL Semantic Parsing
  17. 喝豆浆对身体都有哪些好处?
  18. pandas学习之concat合并及读写CSV文件
  19. Qt5.12.x 导入CMakeLists.txt 工程 提示 No suitable kits found.
  20. 汉源高科24个千兆光口光纤汇聚交换机机架式工业级以太网交换机环网管理型交换机

热门文章

  1. 金庸群侠传1android,96版金庸群侠传1手机版
  2. android 系统的切图方式_Android UI设计及切图
  3. jeecg-boot配置菜单
  4. 毕业设计 嵌入式超声波雷达可视化系统
  5. 自学-Linux-老男孩Linux77期-day3
  6. java中的关键字有哪些_java关键字有哪些?java关键字大全
  7. Yahoo 股票数据抓取
  8. 模板方法模式(模板方法设计模式)详解
  9. 解决OSError: [Errno 22] Invalid argument:C:\\Windows\\Fonts\\simhei.ttf\u202a
  10. OCJP认证 | 国际上最热门的IT认证之一,开启你高级认证的钥匙