山东大学机器学习(实验七解读)—— PCA

1. 一对多SVM分类器

对于多分类来说,一对多的SVM分类器思想是给定一类标上正标签,其余剩下的类标上负标签,对应的将训练40次。我们用细胞元组来将训练数据和测试数据存储起来。

  • divdata.m函数负责将数据重新分配,即按上述我所说的
function data = divdata(index,X,n)
    len = size(X,1);
    if index == 1
        data = [[X(1:n,:),ones(n,1)];[X(n+1:len,:),-ones(len-n,1)]];
    elseif index == 80
        data = [[X(1:len-n,:),-ones(len-n,1)];[X(len-n+1:len,:),ones(n,1)]];
    else
        data = [[X(1:n*(index-1),:),-ones(n*(index-1),1)];[X(n*index-n+1:n*index,:),ones(n,1)];[X(n*index+1:len,:),-ones(len-n*index,1)]];
    end
end
  • svmTrain.m是训练函数(这是实验五中的函数)
function svm = svmTrain(X,Y,C)
    % Options是用来控制算法的选项参数的向量,optimset无参时,
    % 创建一个选项结构所有字段为默认值的选项
    options = optimset;
    options.largeScale = 'off'; %LargeScale指大规模搜索,off表示在规模搜索模式关闭
    options.Display = 'off'; %表示无输出
    
    %二次规划用来求解问题,使用quadprog
    n = length(Y);  
    %使用线性核   
    H = (Y.*X)*(Y.*X)';
    H=(H+H')/2;
    f = -ones(n,1); %f'为1*n个-1
    A = [];
    b = [];
    Aeq = Y'; 
    beq = 0;
    lb = zeros(n,1); 
    ub = C*ones(n,1);
    a0 = zeros(n,1);  % a0是解的初始近似值
    a = quadprog(H,f,A,b,Aeq,beq,lb,ub,a0,options);
    epsilon = 1e-9;
    sv_label = find(abs(a)> epsilon);
    svm.sva = a(sv_label);
    svm.Xsv = X(sv_label,:);
    svm.Ysv = Y(sv_label);
    svm.svnum = length(sv_label);
    svm.a = a;
end
  • test1.m主函数
%从人脸照片中随选择7张作为训练集
train_data = zeros(40*7,112*92);
test_data = zeros(40*3,112*92);
for i = 1:40
   file_name = ['s',num2str(i)];
   %随机选取同一文件夹下的7个图片
   index = randperm(10);
   for j = 1:7
       %文件名拼接
       name = ['att_faces\',file_name,'\',num2str(index(j)),'.pgm'];
       image = double(imread(name));
       %将矩阵展开为一行
       train_data(7*(i-1)+j,:) = reshape(image,1,112*92);
   end
   for j = 1:3
       %文件名拼接
       name = ['att_faces\',file_name,'\',num2str(index(7+j)),'.pgm'];
       image = double(imread(name));
       test_data(3*(i-1)+j,:) = reshape(image,1,112*92);
   end
end
%============
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值