MATLAB实现支持向量机算法(MNIST数据集)

基于MOOC人工智能之模式识别的课程完成的第三次作业
MATLAB实现支持向量机算法(MNIST数据集)
MOOC地址:人工智能之模式识别
SVM 是通过学习样本寻找分类间隔边界,把这一过程转化为了
一个优化问题。众所周知,分类间隔是由距离分类决策边界最近的那些少量样本决定的,而比这些样本距离分类决策边界更远的大量样本,其实都不会影响到最优权向量的求取,这些作用十分特殊的样本,就被称为“支持向量”,表示是他们支撑起了线性分类器在最大分类间隔意义下的最优解。这也是为什么这种算法被称为“支持向量机(Support Vector Machine,SVM)”的原因。

SVM.m 程序代码主要实现了数据集读入,定义 SVM 分类器模板、训练,测试及结果输出几个部分。

clear variables
clc
load ('./test_images.mat');
load ('./test_labels.mat');
load ('./train_images.mat');
load ('./train_labels.mat');%数据集的读入
train_num =2000;
test_num = 200;
  
  
data_train = mat2vector(train_images(:,:,1:train_num),train_num);%图像转向量
data_test = mat2vector(test_images(:,:,1:test_num),test_num);%mnist数据集图像为28*28
  
% 这里我们用最简单的线性模型做演示;SVM中可调的超参数非常多,如损失函数以及选用的核函数等
% 如果需要进一步设定,可以参考帮助文档,如设置t =
% templateSVM('Standardize',1,'KernelFunction','gaussian');,将t送入fitcecoc即可
% templateSVM()定义分类器模板
% fitcecoc()定义分类器训练

t = templateSVM('KernelFunction','linear');%这里采用了线性核函数
svm_model = fitcecoc(data_train,train_labels1(1:train_num),'Learners',t);
  
%训练模型,由于是多分类,不能直接调用fitcsvm,用多分类训练函数fitcecoc
%测试结果
%predict()定义分类器预测,对待识别样本利用指定的模板进行分类识别
result = predict(svm_model,data_test);
result = result.';
fprintf('预测结果:');
result(1:20)%取20个打印出来对比
fprintf('真实分布:');
test_labels1(1:20)
acc = 0.;
for i = 1:test_num
    if result(i)==test_labels1(i)
        acc = acc+1;
    end
end
fprintf('精确度为:%5.2f%%\n',(acc/test_num)*100);
  

当训练样本数量为2000时,贝叶斯分类器对MNIST手写数字的识别精确度是96%
在这里插入图片描述

  • 0
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值