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

收获:

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. C中文件操作的文本模式和二进制模式,到底有啥区别?
  2. ChaLearn Gesture Challenge_2:examples体验
  3. 第四次人口普查数据_第七次人口普查预估:单身男性比女性多3000万?你在其中吗?...
  4. sprintf_s的使用
  5. T25健身视频全集+课表
  6. SQL Server 中常见的十张系统表
  7. Spring MVC 中 HandlerInterceptorAdapter的使用--转载
  8. iOS-可变参数(不定参数)的用法
  9. 最简单的java WebService服务器端搭建
  10. ArcSDE10.1配置Oracle 监听器来使用SQL操作ST_Geometry(个人改动版)
  11. keras中的模型保存和加载
  12. 没了 IDE,你的 Java 项目还能跑起来吗?
  13. Linux内核网络编程
  14. 同步、异步、阻塞与非阻塞给你说得明明白白
  15. 服务器数据恢复成功案例(磁盘阵列恢复)
  16. java.util包
  17. 从 Uber 数据泄露事件我们可以学到什么?
  18. 坚持写博客以来的感受和改变
  19. 【图像算法】pytesseract简单实现图片数字识别
  20. 【xml 报错】xml编译错误

热门文章

  1. Linux环境安装Redis高可用及配置主从复制、哨兵模式、分布式集群模式
  2. BUMO 区块链开发文档
  3. 微信小程序源码及H5小游戏源码内核构建方法
  4. 将城市按照拼音首字母进行分类
  5. Ubuntu 周立功CAN分析仪 USBCAN-II 驱动
  6. 台达伺服b3参数_恩阳台达B3系列伺服安装
  7. Package fontspec Error: The font “SimHei“ cannot be found. windows 上海交大学位论文模板
  8. Eclipse SVN插件Subclipse和Subversive简介
  9. 算法设计与分析基础_学习笔记
  10. 极限学习机ELM原理与实现