基于libsvm的手写字体识别

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于libsvm的手写字体识别

程序:

用的是faruto大神的程序,在此做声明

程序有自己的注释

【思路】:整个程序的流程是:1、首先用遗传算法GA和交叉验证的方式,对参数c(损失函数系数)和参数g(核函数参数)进行寻优;2、然后将两个参数和训练样本进行训练:model = svmtrain(TrainLabel, TrainData, cmd);3、最后导入测试样本集进行测试:preTestLabel = svmpredict(TestLabel, TestData, model);

【注意:】训练和测试所使用的data和label都必须是doubel型,可以用double()函数或者是str2doubel进行转换。(不知道在哪里看到的)

如有疑问请咨询qq:778961303

-g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)

-c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1)

%%

close all;

clear;

clc;

format compact; %紧凑显示

%% 载入训练数据

[FileName,PathName,FilterIndex] = uigetfile( ...

{'*.bmp';'*.jpg'},'请导入训练图片','*.bmp','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); %将图片变成16*16的矩阵

% imshow(pic);

TrainData(k,:) = double(pic(:)'); %将图片改写成一个double类型的行向量

TrainLabel(k) = str2double(FileName{k}(1)); %图片的类标签

end

%% 建立支持向量机

ga_option.maxgen = 100;

ga_option.sizepop = 20;

ga_option.cbound = [0,100];

ga_option.gbound = [0,100];

ga_option.v = 10;

ga_option.ggap = 0.9;

ga_option.pCrossover=0.4;

ga_option.pMutation=0.01;

[bestCVaccuracy,bestc,bestg] = ...

gaSVMcgForClass(TrainLabel,TrainData,ga_option)

cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg)];

model = svmtrain(TrainLabel, TrainData, cmd);

preTrainLabel = svmpredict(TrainLabel, TrainData, model);

%% 载入测试样本

[FileName,PathName,FilterIndex] = uigetfile( ...

{'*.bmp';'*.jpg'},'请导入测试图片','*.bmp','MultiSelect','on');

if ~FilterIndex

return;

end

num_train = length(FileName);

TestData = zeros(num_train,16*16);

TestLabel = zeros(num_train,1);

for k = 1:num_train

pic = imread([PathName,FileName{k}]);

pic = pic_preprocess(pic);

TestData(k,:)= double(pic(:)');

TestLabel(k) = str2double(FileName{k}(1));

end

%% 对测试样本进行分类

preTestLabel = svmpredict(TestLabel, TestData, model);

disp(['测试样本集的数字为:',num2str(TestLabel')])

disp(['预测的数字为:',num2str(preTestLabel')])

注释:

1、[FileName,PathName,FilterIndex] = uigetfile(FilterSpec,DialogTitle,DefaultName) FileName:返回的文件名

PathName:返回的文件的路径名

FilterIndex:选择的文件类型

FilterSpec:文件类型设置

DialogTitle:打开对话框的标题

DefaultName:默认指向的文件名

相关文档
最新文档