0001 c_dir = {'cannon','cup'};
0002 base_dir = 'C:\Users\Suzuki\Documents\Study\Data Set\101_ObjectCategories\';
0003 sift_type = {'hsvsift','sift','huesift','rgbhistogram'};
0004
0005 [K1 Y var1] = make_sift_kernel(c_dir,base_dir,{'hsvsift','sift'});
0006 [K2 Y var2] = make_sift_kernel(c_dir,base_dir,{'huesift','rgbhistogram'});
0007
0008 K3 = make_sift_kernel_from_var(var1,1);
0009 K4 = make_sift_kernel_from_var(var2,1);
0010
0011 K5 = [];
0012 sigma_vec = linspace(1,50,5);
0013 for sig=sigma_vec
0014 Ktmp = make_sift_kernel_from_var(var1,1,@(x,y)gauss_kernel(x,y,sig));
0015 if sig==sigma_vec(1)
0016 K5 = Ktmp;
0017 else
0018 K5 = addkernel(K5,Ktmp);
0019 end;
0020 end;
0021
0022 kappa_vec = linspace(0.01,1,10);
0023 theta_vec = -[10 100 500];
0024 ii=0;
0025 for kp=kappa_vec
0026 for th=theta_vec
0027 ii = ii+1;
0028 Ktmp = make_sift_kernel_from_var(var1,0,@(x,y)sigmoid_kernel(x,y,kp,th));
0029 if ii==1
0030 K6 = Ktmp;
0031 else
0032 K6 = addkernel(K6,Ktmp);
0033 end;
0034 end;
0035 end;
0036
0037 d_vec = [1:5];
0038 ii=0;
0039 for dd = d_vec
0040 ii = ii+1;
0041 Ktmp = make_sift_kernel_from_var(var1,1,@(x,y)polynomial_kernel(x,y,dd));
0042 if ii==1
0043 K7 = Ktmp;
0044 else
0045 K7 = addkernel(K7,Ktmp);
0046 end;
0047 end;
0048
0049 gamma_vec = linspace(1,50,10);
0050 for gamma=gamma_vec
0051 Ktmp = make_sift_kernel_from_var(var1,1,@(x,y)chi2_kernel(x,y,gamma));
0052 if gamma==gamma_vec(1)
0053 K8 = Ktmp;
0054 else
0055 K8 = addkernel(K8,Ktmp);
0056 end;
0057 end;
0058
0059 K=K3;
0060 K=addkernel(K,K5);
0061 K=addkernel(K,K7);
0062 K=addkernel(K,K8);
0063
0064
0065
0066 yapp = ((Y==1) - (Y==2))';
0067
0068 each_numtr = 15;
0069 num_tr = each_numtr*2;
0070 num_sample = size(K,1);
0071 yout = unique(yapp);
0072
0073
0074 options.stopdualitygap = 1;
0075 options.stopIneqViolation = 0;
0076 options.tolOuter = 0.01;
0077 options.tolInner = 0.000001;
0078 options.loss = 'logit';
0079 options.display = 2;
0080 C = 0.01;
0081
0082 test_error = [];
0083 VALID_NUM = 40;
0084 for VALID_STAGE=1:VALID_NUM
0085 tr_ind = [];
0086 for i=1:length(yout)
0087 ind = find(yapp==yout(i));
0088 ind = ind(randperm(length(ind)));
0089 tr_ind = [tr_ind; ind(1:each_numtr)];
0090 end;
0091 te_ind = setdiff(1:num_sample,tr_ind);
0092
0093
0094 [alpha,d,b,activeset,posind,params,story] = SpicyMKL(K(tr_ind,tr_ind,:),yapp(tr_ind),C,options);
0095 Kte = concatkernel(K(te_ind,tr_ind,:),d);
0096 ypred = Kte(:,posind)*alpha(posind) + b;
0097 test_error(VALID_STAGE) = mean(sign(ypred)==yapp(te_ind));
0098 end;
0099 disp(['mean:' num2str(mean(test_error)) ' std:' num2str(std(test_error))]);