• 大小: 10.16MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-24
  • 语言: Matlab
  • 标签: SVM  SMO  MNIST  matlab  

资源简介

代码使用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


评论

共有 条评论