资源简介
代码使用matlab编写,压缩包中包含MNIST数据集及其读取函数、SVM算法实现和ReadMe.txt。
SVM算法中使用了PCA降维处理数据减少运行时间,但是由于使用的SMO算法较为原始,运行速度仍然较慢。由于实现未经过任何优化,仅适合初学者使用,使用高斯核正确率在75%以上,有部分注释。请结合ReadMe文件使用。
代码片段和文件信息
clear;
clc;
%读取数据
trainImages = loadMNISTImages(‘train-images.idx3-ubyte‘);
trainLabels = loadMNISTLabels(‘train-labels.idx1-ubyte‘);
testImages = loadMNISTImages(‘t10k-images.idx3-ubyte‘);
testLabels = loadMNISTLabels(‘t10k-labels.idx1-ubyte‘);
%PCA降维
square = double(trainImages * trainImages‘);
[eigVect eigVal] = eig(square);
eigVal = diag(eigVal);
eigVal = cumsum(eigVal) / sum(eigVal);
k = find(eigVal >= 1e-2 1);
pca = eigVect(: k:end);
trainImages = pca‘ * trainImages;
testImages = pca‘ * testImages;
%选取部分样本便于测试
trainImages = trainImages(:1:500)‘;
trainLabels = trainLabels(1:5001);
testImages = testImages‘;
%获得样本规模
[mn] = size(trainImages);
[rs] = size(testImages);
%调节sig1和C
%当前最佳sig1.sig2C为12.316.7530
tic;
kernels = zeros(mr);
for i = 1 : r
kernels(:i) = Kernel(trainImagestestImages(i:)12.3);
end
% omegas = zeros(n10);
b = zeros(101);
alphas = zeros(m10);
C = 30;
dis = 0.001;
tolerance = 10;
vote = zeros(r10);
testResults = zeros(r10);
Labels = zeros(r1);
error = 0;
%OvR
fprintf(‘计算alpha...\n‘);
for i = 1 : 10
one = i - 1;
[b(i)alphas(:i)] = kernelSVM(trainImagestrainLabelsCdistoleranceone);
fprintf(‘第%d个alpha计算完毕\n‘i);
% for j = 1 : 10
% omegas(:j) = ((alphas(:i) .* trainLabels)‘ * trainImages)‘;
% end
end
fprintf(‘投票中...\n‘);
%根据alpha和b计算出结果y
for i = 1 : 10
tmpLabels = trainLabels;
y = zeros(r10);
for j = 1 : m
if tmpLabels(j) == (i - 1)
tmpLabels(j) = 1;
else
tmpLabels(j) = -1;
end
end
for j = 1 : r
y(ji) = (alphas(:i) .* tmpLabels)‘ * kernels(:j) + b(i);
% y = omegas(:i)‘ * testImages(j:)‘ + b(i);
% fprintf(‘y的值为%d\n‘y);
vote(ji) = sign(y(ji));
end
clear tmpLabels;
end
%投票得到待测样本类别
for i = 1 : r
for j = 1 : 10
if vote(ij) == 1
testResults(ij) = testResults(ij) + 1;
else
testResults(i:) = testResults(i:) + 1;
testResults(ij) = testResults(ij) - 1;
end
end
end
fprintf(‘计算结果...‘);
for i = 1 : r
[maxCountpos] = max(testResults(i:));
Labels(i) = pos - 1;
end
for i = 1 : r
if Labels(i) ~= testLabels(i)
error = error + 1;
% fprintf(‘错误%d‘Labels(i));
% fprintf(‘正确%d\n‘testLabels(i));
end
end
fprintf(‘正确率为%d\n‘1-error/r);
toc;
% save data;
% system(‘shutdown -s‘);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2583 2017-11-14 21:21 2.SVM\imple_kernelSVM.m
文件 372 2017-11-14 21:21 2.SVM\Kernel.m
文件 3023 2017-11-14 19:55 2.SVM\kernelSVM.m
文件 837 2017-11-07 16:51 2.SVM\loadMNISTImages.m
文件 535 2017-11-03 17:49 2.SVM\loadMNISTLabels.m
文件 561 2017-11-13 19:01 2.SVM\Readme.txt
文件 7840016 1998-01-26 23:07 2.SVM\t10k-images.idx3-ubyte
文件 10008 1998-01-26 23:07 2.SVM\t10k-labels.idx1-ubyte
文件 47040016 1996-11-18 23:36 2.SVM\train-images.idx3-ubyte
文件 60008 1996-11-18 23:36 2.SVM\train-labels.idx1-ubyte
目录 0 2017-11-14 21:21 2.SVM
----------- --------- ---------- ----- ----
54957959 11
相关资源
- 遗传算法优化支持向量机GASVM
- KNN算法对MNIST数据集分类
- 经典SVM算法matlab程序
- 多层ELM进行MNIST手写字符分类MATLAB代码
- SVM分类器.zip
- matlab流形学习算法工具包&matlab机器学
- 模式识别课程作业 matlab与libsvm环境
- libsvm工具包-Matlab
- 基于SVM+HOG的人脸检测matlab程序
- 支持向量机回归smo的matlab实现 附带测
- 支持向量机 SVM 和 核函数的 MATLAB 程序
- 经典SVM算法多类分类matlab程序
- 支持向量机SVM和核函数的matlab程序代
- SVM_light工具箱matlab
- MATLAB中使用SVM对大量图像进行分类识
- PSO_LSSVM程序代码及LSSVM工具箱
- 表情识别 源码Matlab LBP+LPQ SVM PCA
- matlab svm工具箱
- libsvm3.14工具箱
- 基于HOG+SVM的行人检测系统183534
- PCA+SVM matlab代码 测试通过
- matlab-lssvm程序
- 基于PCA和SVM的人脸识别 matlab程序
- matlab基于svm的分类程序
- LS-SVM MATLAB工具包及指导书
- libsvm-3.1-[FarutoUltimate3.1
- PCANet MATLAB代码
- mnist数据集自带解析函数
- 基于matlab的svm回归库
- 深度学习的实验数据文件mnist_uint8
评论
共有 条评论