LibLinear(SVM包)使用说明之(三)实践
LibLinear(SVM包)使用说明之(三)实践
我们在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包)使用说明之(三)实践的更多相关文章
- LibLinear(SVM包)使用说明之(一)README
转自:http://blog.csdn.net/zouxy09/article/details/10947323/ LibLinear(SVM包)使用说明之(一)README zouxy09@qq.c ...
- LibLinear(SVM包)使用说明之(二)MATLAB接口
LibLinear(SVM包)使用说明之(二)MATLAB接口 LibLinear(SVM包)使用说明之(二)MATLAB接口 zouxy09@qq.com http://blog.csdn.net/ ...
- LibLinear(SVM包)的MATLAB安装
LibLinear(SVM包)的MATLAB安装 1 LIBSVM介绍 LIBSVM是众所周知的支持向量机分类工具包(一些支持向量机(SVM)的开源代码库的链接及其简介),运用方便简单,其中的核函数( ...
- Maven中解决jar包冲突的三种方式
首先我们在idea中创建一个maven工程,我们只关注pom.xml以及External Libraries中导入的jar包 导入spring-beans.jar <dependency> ...
- 使用 tcpdump 抓包分析 TCP 三次握手、四次挥手与 TCP 状态转移
目录 文章目录 目录 前文列表 TCP 协议 图示三次握手与四次挥手 抓包结果 抓包分析 TCP 三次握手 数据传输 四次挥手 TCP 端口状态转移 状态转移 前文列表 <常用 tcpdump ...
- Wireshark抓包分析TCP“三次握手,四次挥手”
1.目的 客户端与服务器之间建立TCP/IP连接,我们知道是通过三次握手,四次挥手实现的,但是很多地方对这个知识的描述仅限于理论层面,这次我们通过网络抓包的方式来看一下实际的TCP/IP传输过程. 2 ...
- 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制
关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...
- 基于IPv6的数据包分析(第三组)
一.实验拓扑 二.配置过程 本处提供R1.R2.R4的详细配置过程(包含静态路由的配置) 1) R1: R1(config)#int e1/0 R1(config-if)#ipv6 addr ...
- Java网络编程学习A轮_02_抓包分析TCP三次握手过程
参考资料: https://huoding.com/2013/11/21/299 https://hpbn.co/building-blocks-of-tcp/#three-way-handshake ...
随机推荐
- 【转】adb uninstall卸载apk文件说明
昨天在使用adb卸载程序,结果死活卸载不了.我输入的命令和系统提示如下: [plain] view plaincopy arthur@arthur-laptop:~$ adb uninstall ...
- asp.net 编写验证码
首先准备一个类来实现对验证码的绘制功能. createcode.cs using System; using System.Collections.Generic; using System.Linq ...
- swift基本运算符
一.空合运算符(Nil Coalescing Operator) 形式:a??b,如果a包含值则解封,否则返回默认值b 条件:a必须为optional类型,这个就不多说了,就是可选类型:默认值b的类型 ...
- GetWindowRect() GetClientRect() ScreenToClient() MoveWindow()
CWnd.GetWindowRect 参照坐标系:屏幕坐标系,原点为屏幕左上角(0,0)的位置 功能:取得调用窗口CWnd在屏幕坐标系下的RECT坐标 CWnd.GetClientRect 参照坐标系 ...
- 关于ServletConfig的小结
在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数.当servlet配置了初始化参数后,web容器在创建servlet ...
- extern int a[] VS extern int *a
array VS pointer 参考: 1.Extern using pointer instead of array array is not pointer 2.extern array que ...
- 策略模式(Strategey Pattern)
策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 下面举个例子: 有两个具体策略,分别执行两个整型加法和减法. interface Strateg ...
- position:absolute,绝对定位和相对定位,JQ隐藏和显示
需要在指定位置,用绝对定位. 如果直接写position:absolute,top:0;left:0,那就是以浏览器的左上角为参照了 现在需要在某一个指定位置用绝对定位 解决方法 在需要用绝对定位(p ...
- c# 判断窗体是否永在最前(TopMost),调用windows API
许多程序都可以把自身的窗体设为最前显示状态,这个可以参考博客c#让窗体永在最前 调用windows api 将窗体设为topmost.那么如何判断桌面上的一个窗体是否为最前显示状态呢,不光是自己的程序 ...
- codeforces Codeforces Round #345 (Div. 1) C. Table Compression 排序+并查集
C. Table Compression Little Petya is now fond of data compression algorithms. He has already studied ...