实验内容
1.掌握lib-svm的安装,了解libsvm的使用和参数设置。
2.根据两类人脸图,实现二分类实验
3.获得不同参数下的分类精度。
libsvm
实验代码
%% ********************************问题2***************************************
clear;clc;
%% 导入图片数据
img_path0="C:\machine learning\10.实验十\人脸图";
tab={'1','2'};
x1=[];x2=[]; % 分别用于存放文件夹1和文件夹2下的数据
for i=1:size(tab,2)
path_regexp=strcat(img_path0,'\',tab{i},'\','*.bmp'); % 图片路径的正则表达式
file=dir(path_regexp); % 符合path_regexp正则表达式的文件
for j=1:size(file)
img_name=file(j).name;
img_path=strcat(img_path0,'\',tab{i},'\',img_name); % 图片的路径
image=imread(img_path);
image=im2double(image);
if i==1
x1=[x1,image(:)]; % 若为文件夹1,则放入x1矩阵
else
x2=[x2,image(:)]; % 若为文件夹2,则放入x2矩阵
end
end
end
%% 留出法划分训练集和测试集
% 文件夹1
n1=randperm(size(x1,2));
x1_train=x1(:,n1(1:round(length(n1)*2/3)));
x1_test=x1(:,n1(round(length(n1)*2/3)+1:end));
% 文件夹2
n2=randperm(size(x2,2));
x2_train=x2(:,n2(1:round(length(n2)*2/3)));
x2_test=x2(:,n2(round(length(n2)*2/3)+1:end));
% 组合成训练集和测试集
train=[x1_train,x2_train];
train_label=[ones(1,size(x1_train,2)),2*ones(1,size(x2_train,2))];
test=[x1_test,x2_test];
test_label=[ones(1,size(x1_test,2)),2*ones(1,size(x2_test,2))];
%% 数据预处理:用自带函数mapminmax将训练集和测试集归一化处理[0,1]之间
% 训练集
train=mapminmax(train,0,1);
% 测试集
test=mapminmax(test,0,1);
%% 使用libsvm进行二分类
model=svmtrain(train_label',train'); % 训练模型
[predict_label, accuracy, dec_values]=svmpredict(test_label',test',model); % 测试分类
%% **********************************问题3***************************************
model=svmtrain(train_label',train','-t 2 -g 2.8'); % 训练模型
[predict_label, accuracy, dec_values]=svmpredict(test_label',test',model); % 测试分类
实验心得
通过本次“支持向量机二分类”实验,首先,我成功安装了lib-svm的安装,了解libsvm的使用和参数设置。其次,我能够通用调用lib-svm中的svmtrain和svmpredict函数实现人脸图的二分类。再次,通过调节参数,可以在一定程度上提高识别精度。最后,我对支持向量机的的理解更加深刻,并且能够调用函数实现支持向量机对数据集的分类。
版权声明:本文为Orange_Jet原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。