zoukankan      html  css  js  c++  java
  • LibLinear(SVM包)使用说明之(三)实践

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

    zouxy09@qq.com

    http://blog.csdn.net/zouxy09

     

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

             在本文的例子中,我们增加了scaleCross ValidationCross 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...
    ');
    % 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...
    ');
    % 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...
    ');
    % 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.
    ', c(best_c));
    toc;
    
    %%% step4: train the model
    fprintf(1,'step4: Training...
    ');
    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...
    ');
    tic;
    [predict_label, accuracy, dec_values] = predict(test_Y, sparse(test_X), model);
    toc;
  • 相关阅读:
    QT全局热键(用nativeKeycode封装API,不跨平台)
    Android 短信模块分析(二) MMS中四大组件核心功能详解
    一个高效过滤非UTF8字符的C函数(也可用来判断是否utf8)
    Windows-1252对Latin1编码有改变(并不完全兼容),而且Latin1缺失了好多西欧字符(法语,德语,西班牙语都有)
    C++静态库与动态库
    CFBundleName系列参数的含义
    QT完美转换特殊字符的大小写
    Java-继承的应用
    RTTI、虚函数和虚基类的实现方式、开销分析及使用指导(虚函数的开销很小,就2次操作而已)
    delphi如何获得当前操作系统语言环境
  • 原文地址:https://www.cnblogs.com/pangblog/p/3299615.html
Copyright © 2011-2022 走看看