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的(不知道自己这两个步骤有没有正确,如有错误,还望大家提醒,谢谢)。

具体的代码如下:

%// Classification by LibLinear
%// LibLinear: http://www.csie.ntu.edu.tw/~cjlin/liblinear/
%// Author : zouxy
%// Date   : 2013-9-2
%// HomePage : http://blog.csdn.net/zouxy09
%// Email  : zouxy09@qq.com
clear; clc;
%%% step1: load data
fprintf(1,'step1: Load data...\n');
% pooledFeaturesTrain大小为400*2000*3*3
% pooledFeaturesTest大小为400*3200*3*3
% 第一维是特征个数,也就是特征图个数,第二维是样本个数,第三维是特征图的宽,
% 第四维是特征图的高
load cnnPooledFeatures.mat;
load stlTrainSubset.mat % loads numTrainImages, trainImages, trainLabels
load stlTestSubset.mat  % loads numTestImages,  testImages,  testLabels
% B = permute(A,order) 按照向量order指定的顺序重排A的各维
train_X = permute(pooledFeaturesTrain, [1 3 4 2]);
% 将每个样本的特征拉成一个列向量,每个样本一个列,矩阵大小为3600*2000
train_X = reshape(train_X, numel(pooledFeaturesTrain) / numTrainImages, numTrainImages);
train_Y = trainLabels; % 2000*1
test_X = permute(pooledFeaturesTest, [1 3 4 2]);
test_X = reshape(test_X, numel(pooledFeaturesTest) / numTestImages, numTestImages);
test_Y = testLabels;
% release some memory
clear trainImages testImages pooledFeaturesTrain pooledFeaturesTest;
%%% step2: scale the data
fprintf(1,'step2: Scale data...\n');
% Using the same scaling factors for training and testing sets,
% we obtain much better accuracy. Note: scale each attribute(feature), not sample
% scale to [0 1]
% when a is a vector, b = (a - min(a)) .* (upper - lower) ./ (max(a)-min(a)) + lower
lower = 0;
upper = 1.0;
train_X = train_X';
X_max = max(train_X);
X_min = min(train_X);
train_X = (train_X - repmat(X_min, size(train_X, 1), 1)) .* (upper - lower) ...
./ repmat((X_max - X_min), size(train_X, 1), 1) + lower;
test_X = test_X';
test_X = (test_X - repmat(X_min, size(test_X, 1), 1)) .* (upper - lower) ...
./ repmat((X_max - X_min), size(test_X, 1), 1) + lower;
% Note: before scale the accuracy is 80.4688%, after scale it turns to 80.1875%,
% and took more time. So is that my scale operation wrong or other reasons?
% After adding bias, Accuracy = 80.75% (2584/3200)
%%% step3: Cross Validation for choosing parameter
fprintf(1,'step3: Cross Validation for choosing parameter c...\n');
% the larger c is, more time should be costed
c = [2^-6 2^-5 2^-4 2^-3 2^-2 2^-1 2^0 2^1 2^2 2^3];
max_acc = 0;
tic;
for i = 1 : size(c, 2)
option = ['-B 1 -c ' num2str(c(i)) ' -v 5 -q'];
fprintf(1,'Stage: %d/%d: c = %d, ', i, size(c, 2), c(i));
accuracy = train(train_Y, sparse(train_X), option);
if accuracy > max_acc
max_acc = accuracy;
best_c = i;
end
end
fprintf(1,'The best c is c = %d.\n', c(best_c));
toc;
%%% step4: train the model
fprintf(1,'step4: Training...\n');
tic;
option = ['-c ' num2str(c(best_c)) ' -B 1 -e 0.001'];
model = train(train_Y, sparse(train_X), option);
toc;
%%% step5: test the model
fprintf(1,'step5: Testing...\n');
tic;
[predict_label, accuracy, dec_values] = predict(test_Y, sparse(test_X), model);
toc;

LibLinear(SVM包)使用说明之(三)实践相关推荐

  1. liblinear java_LibLinear(SVM包)使用说明之(三)实践

    LibLinear(SVM包)使用说明之(三)实践 我们在 UFLDL 的教程中, Exercise: Convolution and Pooling 这一章节,已经得到了 cnnPooledFeat ...

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

    LibLinear(SVM包)使用说明之(一)README LibLinear(SVM包)使用说明之(一)README zouxy09@qq.com http://blog.csdn.net/zoux ...

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

    LibLinear(SVM包)使用说明之(二)MATLAB接口 zouxy09@qq.com http://blog.csdn.net/zouxy09 一.介绍 LIBLINEAR是一个简单的求解大规 ...

  4. Linux内核网络数据包发送(三)——IP协议层分析

    Linux内核网络数据包发送(三)--IP协议层分析 1. 前言 2. `ip_send_skb` 3. `ip_local_out` and `__ip_local_out` 3.1 netfilt ...

  5. linux过滤端口抓包_TCP 协议三次握手抓包分析amp;查看状态

    关注爱因诗贤每天进步一点点导读 前面文章介绍了 TCP 报文头部的格式,TCP 协议是一个面向连接的协议,所以在使用 TCP 协议之前需要先建立连接,而建立连接就需要先 握手,在握手的时候就会有 TC ...

  6. 小青蛙oracle跟踪,《小青蛙》三实践三反思观课报告

    第 1 页 共 3 页 小青蛙小青蛙 三实践三反思观课报告三实践三反思观课报告 1 月 2 日下午 我们低年级组 识字写字教学的 易课堂 课例研修照常进行中 这是赵琳老师 小青 蛙 课题的三实践三反思 ...

  7. MKS SERVO42C 闭环步进电机 使用说明(三)串口通讯

    第1部分 硬件介绍 1.1 硬件清单 序号 品名 数量 1 MKS SERVO42C V1.0(包含电机) 1 2 PCBA连接线 1 3 串口助手模块/单片机 1 4 DC 12V-24V电源 1 ...

  8. Shiny平台构建与R包开发(三)——数据输出

    作为Shiny平台构建与R包开发教程的第三小节,本节向读者展示如何利用Shiny server输出自己想要的数据,包括Rplot.Table.Text等信息. 数据输出机制 仍以上一节的案例为基础: ...

  9. opsforlist 存在贼覆盖_RedisTemplate常用集合使用说明-opsForList(三)

    基础配置介绍已经在前面的<RedisTemplate常用集合使用说明(一)>中已经介绍了,现在我们直接介绍opsForList()方法的使用: 1.leftPush(K key, V va ...

最新文章

  1. 过程即奖励(The Journey is the Reward)
  2. ios 苹果审核常见被拒问题
  3. c++ hashset的用法_C++中set的用法
  4. php在线考试系统模板下载,PHPEMS在线模拟考试系统 v6.1
  5. gerber文件_90%的工程师容易忽视(一):PCB输出gerber文件,这样操作才正确
  6. 手机远程连接服务器工具:RD client远程桌面使用教程
  7. 06年他预测阿里巴巴会干掉慧聪网,当时所有人都在嘲笑他
  8. 微弱信号检测_光电探测与信号处理教学大纲
  9. 计算机技术为我们带来的影响,计算机技术对社会发展的影响探析
  10. geek软件是干什么的_geektool--一款很geek的工具
  11. 人像美颜美妆算法入门必备
  12. C - Quick Sort (one of the simplest)
  13. 硅云服务器怎么建网站,硅云怎么样,硅云香港云服务器怎么样
  14. phpmyadmin没有接收到要导入的数据.可能是文件名没有提交,也可能是文件大小超出 PHP 限制.
  15. 动态规划C++实现--换钱的方法数(二)(动态规划及其改进方法)
  16. html商品分类列表页面,仿京东商城系列7------商品分类页面
  17. 让老师们哭笑不得的天才学生们
  18. ker矩阵是什么意思_第五课:初等矩阵及酉矩阵
  19. Presto (二) --------- Presto 安装
  20. android onresume 后控件不能获取焦点,1.基本控件和布局 + 基本适配器 + Activity生命周期及传值和现场保护...

热门文章

  1. Nginx服务器之负载均衡策略(6种)
  2. linux 监控键盘,如何在Linux中使用“LogKeys”监视键盘敲键
  3. Android开发实战一之搭建开发环境-附测试实例(已亲测)
  4. mybatis配置文件属性的详解和db.propertis文件的使用
  5. MySQL笔记(四)多表连接查询
  6. 想精通正则表达式 这几个正则表达式学习资料及工具你必须有!
  7. 笨笨工作室告别十月模拟赛
  8. frameset和iframe的区别
  9. react特性-声明式编程
  10. 数据存储与传输---编码与解码---硬盘和内存要分清!