LibLinear(SVM包)使用说明之(三)实践

LibLinear(SVM包)使用说明之(三)实践

zouxy09@qq.com

http://blog.csdn.net/zouxy09

我们在UFLDL的教程中,Exercise: Convolution and Pooling这一章节,已经得到了cnnPooledFeatures.mat特征。在该练习中,我们使用的是softmax分类器来分类的。在这里我们修改为用SVM来替代softmax分类器。SVM由Liblinear软件包来提供。这里是四分类问题,所以Liblinear会根据我们传入的训练样本训练四个二分类器,以实现四分类。以前由softmax分类器得到的准确率是80.406%。在这里换成Liblinear后,准确率变为80.75%。在这里差别不是很大。

在本文的例子中,我们增加了scale和Cross Validation,Cross Validation是用来选择一个最好的参数C的(不知道自己这两个步骤有没有正确,如有错误,还望大家提醒,谢谢)。

具体的代码如下:

  1. %// Classification by LibLinear
  2. %// LibLinear: http://www.csie.ntu.edu.tw/~cjlin/liblinear/
  3. %// Author : zouxy
  4. %// Date   : 2013-9-2
  5. %// HomePage : http://blog.csdn.net/zouxy09
  6. %// Email  : zouxy09@qq.com
  7. clear; clc;
  8. %%% step1: load data
  9. fprintf(1,'step1: Load data...\n');
  10. % pooledFeaturesTrain大小为400*2000*3*3
  11. % pooledFeaturesTest大小为400*3200*3*3
  12. % 第一维是特征个数,也就是特征图个数,第二维是样本个数,第三维是特征图的宽,
  13. % 第四维是特征图的高
  14. load cnnPooledFeatures.mat;
  15. load stlTrainSubset.mat % loads numTrainImages, trainImages, trainLabels
  16. load stlTestSubset.mat  % loads numTestImages,  testImages,  testLabels
  17. % B = permute(A,order) 按照向量order指定的顺序重排A的各维
  18. train_X = permute(pooledFeaturesTrain, [1 3 4 2]);
  19. % 将每个样本的特征拉成一个列向量,每个样本一个列,矩阵大小为3600*2000
  20. train_X = reshape(train_X, numel(pooledFeaturesTrain) / numTrainImages, numTrainImages);
  21. train_Y = trainLabels; % 2000*1
  22. test_X = permute(pooledFeaturesTest, [1 3 4 2]);
  23. test_X = reshape(test_X, numel(pooledFeaturesTest) / numTestImages, numTestImages);
  24. test_Y = testLabels;
  25. % release some memory
  26. clear trainImages testImages pooledFeaturesTrain pooledFeaturesTest;
  27. %%% step2: scale the data
  28. fprintf(1,'step2: Scale data...\n');
  29. % Using the same scaling factors for training and testing sets,
  30. % we obtain much better accuracy. Note: scale each attribute(feature), not sample
  31. % scale to [0 1]
  32. % when a is a vector, b = (a - min(a)) .* (upper - lower) ./ (max(a)-min(a)) + lower
  33. lower = 0;
  34. upper = 1.0;
  35. train_X = train_X';
  36. X_max = max(train_X);
  37. X_min = min(train_X);
  38. train_X = (train_X - repmat(X_min, size(train_X, 1), 1)) .* (upper - lower) ...
  39. ./ repmat((X_max - X_min), size(train_X, 1), 1) + lower;
  40. test_X = test_X';
  41. test_X = (test_X - repmat(X_min, size(test_X, 1), 1)) .* (upper - lower) ...
  42. ./ repmat((X_max - X_min), size(test_X, 1), 1) + lower;
  43. % Note: before scale the accuracy is 80.4688%, after scale it turns to 80.1875%,
  44. % and took more time. So is that my scale operation wrong or other reasons?
  45. % After adding bias, Accuracy = 80.75% (2584/3200)
  46. %%% step3: Cross Validation for choosing parameter
  47. fprintf(1,'step3: Cross Validation for choosing parameter c...\n');
  48. % the larger c is, more time should be costed
  49. c = [2^-6 2^-5 2^-4 2^-3 2^-2 2^-1 2^0 2^1 2^2 2^3];
  50. max_acc = 0;
  51. tic;
  52. for i = 1 : size(c, 2)
  53. option = ['-B 1 -c ' num2str(c(i)) ' -v 5 -q'];
  54. fprintf(1,'Stage: %d/%d: c = %d, ', i, size(c, 2), c(i));
  55. accuracy = train(train_Y, sparse(train_X), option);
  56. if accuracy > max_acc
  57. max_acc = accuracy;
  58. best_c = i;
  59. end
  60. end
  61. fprintf(1,'The best c is c = %d.\n', c(best_c));
  62. toc;
  63. %%% step4: train the model
  64. fprintf(1,'step4: Training...\n');
  65. tic;
  66. option = ['-c ' num2str(c(best_c)) ' -B 1 -e 0.001'];
  67. model = train(train_Y, sparse(train_X), option);
  68. toc;
  69. %%% step5: test the model
  70. fprintf(1,'step5: Testing...\n');
  71. tic;
  72. [predict_label, accuracy, dec_values] = predict(test_Y, sparse(test_X), model);
  73. toc;

LibLinear(SVM包)使用说明之(三)实践的更多相关文章

  1. LibLinear(SVM包)使用说明之(一)README

    转自:http://blog.csdn.net/zouxy09/article/details/10947323/ LibLinear(SVM包)使用说明之(一)README zouxy09@qq.c ...

  2. LibLinear(SVM包)使用说明之(二)MATLAB接口

    LibLinear(SVM包)使用说明之(二)MATLAB接口 LibLinear(SVM包)使用说明之(二)MATLAB接口 zouxy09@qq.com http://blog.csdn.net/ ...

  3. LibLinear(SVM包)的MATLAB安装

    LibLinear(SVM包)的MATLAB安装 1 LIBSVM介绍 LIBSVM是众所周知的支持向量机分类工具包(一些支持向量机(SVM)的开源代码库的链接及其简介),运用方便简单,其中的核函数( ...

  4. Maven中解决jar包冲突的三种方式

    首先我们在idea中创建一个maven工程,我们只关注pom.xml以及External Libraries中导入的jar包 导入spring-beans.jar <dependency> ...

  5. 使用 tcpdump 抓包分析 TCP 三次握手、四次挥手与 TCP 状态转移

    目录 文章目录 目录 前文列表 TCP 协议 图示三次握手与四次挥手 抓包结果 抓包分析 TCP 三次握手 数据传输 四次挥手 TCP 端口状态转移 状态转移 前文列表 <常用 tcpdump ...

  6. Wireshark抓包分析TCP“三次握手,四次挥手”

    1.目的 客户端与服务器之间建立TCP/IP连接,我们知道是通过三次握手,四次挥手实现的,但是很多地方对这个知识的描述仅限于理论层面,这次我们通过网络抓包的方式来看一下实际的TCP/IP传输过程. 2 ...

  7. 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制

    关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...

  8. 基于IPv6的数据包分析(第三组)

    一.实验拓扑 二.配置过程 本处提供R1.R2.R4的详细配置过程(包含静态路由的配置) 1)      R1: R1(config)#int e1/0 R1(config-if)#ipv6 addr ...

  9. Java网络编程学习A轮_02_抓包分析TCP三次握手过程

    参考资料: https://huoding.com/2013/11/21/299 https://hpbn.co/building-blocks-of-tcp/#three-way-handshake ...

随机推荐

  1. Servlet原理

    Servlet主要用来处理客户端请求并将其结果发送到客户端,下面我们来详细看一下Servlet. 一.Servlet的生命周期 Servlet的生命周期是由Servlet的容器来控制的(Tomcat ...

  2. 到目前为止,Linux下最完整的Samba服务器配置攻略

    关 于Samba,大家有没有这种感觉,弄了N久丫的死活不喘气儿.找来各种“哥”和“姐”,发现全是“详解…配置专题”,看了半天不知道别个在说什么,好不 容易找了个简单的教程,从头到尾跟着做,尼玛,浪费时 ...

  3. jquery数据验证插件(自制,简单,练手)

    一:最近项目中js数据验证比较多,为了统一风格,移植复用,于是顺手封装了Jquery的插件. (function($) { var defaults = { bugColor: '#FFCCCC', ...

  4. HttpClient的使用

    HttpClient的使用 一.简介 HttpClient是Apache Jakarta Common下的子项目,用来提供高效的.最新的.功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTT ...

  5. linux之let用法

    shell程序中的操作默认都是字符串操作,在要运行数学运算符的时候可能得到意想不到的答案: var=1 var=$var+1 echo $var output:1+1 从这个例子中可以看出shell字 ...

  6. Linq 中的TakeWhile 和 SkipWhile

    这两个概念容易搞混 理解了一番后 在这里写下便于记忆 SkipWhile 可以理解为如果条件满足  就一直跳过   知道不满足后 就取剩下的所有元素(后面的不会再判断) TakeWhile 可以理解为 ...

  7. jQuery 源码分析 7: sizzle

    jQuery使用的是sizzle这个选择器引擎,这个引擎以其高速著称,其实现十分精妙但是也足够复杂,下面现简单分析一下相关的代码. 在jQuery的部分API接口是直接引用了Sizzle的方法,这些接 ...

  8. myeclipse-8.6.0下载

    myeclipse老版本不分32位和64位,欢迎大家下载使用! 链接:http://pan.baidu.com/s/1dEJCxcl 密码:z1ga

  9. UVA - 297 Quadtrees (四分树)

    题意:求两棵四分树合并之后黑色像素的个数. 分析:边建树边统计. #include<cstdio> #include<cstring> #include<cstdlib& ...

  10. 【转】mysql in语句优化

    mysql会对sql语句做优化, in 后面的条件不超过一定数量仍然会使用索引.mysql 会根据索引长度和in后面条件数量判断是否使用索引. 另外,如果是in后面是子查询,则不会使用索引. 一个文章 ...