- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于libsvm的手写字体识别
测试数据掠影:??为了叙说方便,现做如下简称《MATLAB 神经网络30个案例分析》:30cases《MATLAB统计分析与应用:40个案例分析》:40cases《MATLAB高效编程技巧与应用:25个案例分析》:25cases现用libsvm来实现手写字体识别,测试图片用的亦是25cases和40cases中的那手写字体的训练样本和测试样本。主体程序思想为25cases中的代码过程,改进之处为利用libsvm加强工具箱利用GA(或者gridsearch)来实现参数寻优,采用的核函数为RBF核函数。O(∩_∩)O~最终测试集合的分类效果是:Accuracy = 93.3333% (28/30) (classification) 即只有两个被错分Rocwoods测试集合的效果是90%(27/30) 即只有三个被错分谢老师测试集合的效果是93.3333% (28/30) (classification) 即只有两个被错分由于训练集和测试集数目都比较小,以上的结果都是可以接受的。我尝试调整参数将准确率再提高一些,最终作罢,估计在前期的图片预处理上下功夫,才能达到完全的测试集识别。O(∩_∩)O~? ?? ? 附: MATLAB自带的svm实现函数与libsvm差别小议:1 MATLAB自带的svm实现函数仅有的模型是C-SVC(C-support vector classification); 而libsvm工具箱有C-SVC(C-support vector classification),nu-SVC(nu-support vector classification),one-class SVM(distribution estimation),epsilon-SVR(epsilon-support vector regression),nu-SVR(nu-support vector regression)等多种模型可供使用。2 MATLAB自带的svm实现函数仅支持分类问题,不支持回归问题;而libsvm不仅支持分类问题,亦支持回归问题。3 MATLAB自带的svm实现函数仅支持二分类问题,多分类问题需按照多分类的相应算法编程实现;而libsvm采用1v1算法支持多分类。4 MATLAB自带的svm实现函数采用RBF核函数时无法调节核函数的参数gamma,貌似仅能用默认的;而libsvm可以进行该参数的调节。5 libsvm中的二次规划问题的解决算法是SMO;而MATLAB自带的svm实现函数中二次规划问题的解法有三种可以选择:经典二次方法;SMO;最小二乘。(这个是我目前发现的MATLAB自带的svm实现函数唯一的优点~)? ?? ?? ?在以上的一些对比下,我个人建议目前svm的实现还是使用libsvm(这个应该是目前最好用的svm工具箱),当然MATLAB自带的svm实现函数对于简单问题也可使用,MATLAB自带的svm实现函数可能会在更加新的版本里面进行完善,我也曾尝试用MATLAB自带的svm实现函数来进行重新封装实现libsvm中的所有功能但工作量有些大~测试代码:
function CharacterRecognitionLibsvm
% Character Recognition based on libsvm
% by faruto
% Email:patrick.lee@?
% QQ:516667408?
% /faruto?
% last modified 2010.11.05
%
% www.mfun.la
%%?
tic;
close all;
clear;
clc;
format compact;
%% 载入训练数据
[FileName,PathName,FilterIndex] = uigetfile( ...
? ? {*.jpg;*.bmp},请导入训练图片,*.jpg,MultiSelect,on);
if ~FilterIndex
? ? return;
end
num_train = length(FileName);
TrainData = zeros(num_train,16*16);
TrainLabel = zeros(num_train,1);
for k = 1:num_train
? ? pic = imread([PathName,FileName{k}]);
? ? pic = pic_preprocess(pic);
? ??
? ? TrainData(k,:) = double(pic(:));
? ? TrainLabel(k) = str2double(FileName{k}(4));
end
%% 建
文档评论(0)