SVM Quadratic programming problem

6 visualizzazioni (ultimi 30 giorni)
YANG
YANG il 1 Ago 2014
Risposto: najla slama il 26 Apr 2015
Hellow, I just find the link about SVM real implementation very useful: 1.http://www.robots.ox.ac.uk/~az/lectures/ml/matlab2.pdf 2.http://cbio.ensmp.fr/~thocking/mines-course/2011-04-01-svm/svm-qp.pdf
However, I tried to write the script and found the performance was very low when kernel function is involved in. I also tried my best to find what's the problem but cant find. So could you plz help me?? Thanks a lot!
Tested data and all scripts are in the attachment!!!
% SVM function--------------------------------- % C is the penalty index; % epsilo is the measurement of uncertainty. The less this value for the % traning data is, the better is the certainty of this training data. function [b,w,epsilo] = C_svm(training_data, training_result,C, kernel_choice,varargin) if nargin<4 && nargin>=3 kernel_choice = 'no'; elseif nargin<3 kernel_choice = 'no'; C = 1; end
switch kernel_choice case 'linear' for i = 1: size(training_data,1) for j = 1:size(training_data,1) % kernel_output(i,j) = exp(-(training_data(i,:)-training_data(j,:))*(training_data(i,:)-training_data(j,:))'/2); kernel_output(i,j) = training_data(i,:)*training_data(j,:)'; end end end
switch kernel_choice case 'linear' [m n] = size(kernel_output); case 'no' [m n] = size(training_data); end if strcmp(kernel_choice,'no') w = zeros(1+n+m,1); % w = [b;w;epsilo]; H = zeros(1+n+m,1+n+m); for i = 2:n+1 % corresponding to size of coefficents w H(i,i) = 1; end f = [zeros(1,1+n),ones(1,m)*C]; f = f'; A_11 = zeros(m,1+n); A_12 = eye(m); for i = 1: m V(i,:) = training_data(i,:)* training_result(i); end A_21 = [training_result,V]; A_22 = eye(m); A = -[A_11,A_12;A_21,A_22]; b = -[zeros(m,1),ones(m,1)]';
% Minimise 1/2*x'*H*x + f'*x, subject to the restrictions A*x >= b
w = quadprog(H,f,A,b);
b = w(1);
epsilo = w(n+1:end);
w = w(2:n+1);
else
w = zeros(1+n+m,1);
H = zeros(1+n+m,1+n+m);
for i = 2:n+1 % corresponding to size of coefficents w
for j = 2:n+1
H(i,j) = kernel_output(i-1,j-1);
end
end
f = [zeros(1,1+n),ones(1,m)*C];
f = f';
for i = 1: m
V(i,:) = kernel_output(i,:)* training_result(i); % used for A_21
end
A_11 = zeros(m,1+n);
A_12 = eye(m);
A_21 = [training_result,V];
A_22 = eye(m);
A = -[A_11,A_12;A_21,A_22];
b = -[zeros(m,1),ones(m,1)]';
% Minimise 1/2*x'*H*x + f'*x, subject to the restrictions A*x >= b
w = quadprog(H,f,A,b);
b = w(1);
epsilo = w(n+1:end);
w = w(2:n+1);
end
%test------------------------------------------------------ clc; clear all; C = 0.5; load('data.mat'); X = A; y = X(:,4);% 2 class X = X(:,1:3);
shift = - mean(X); stdVals = std(X); scaleFactor = 1./stdVals; % leave zero-variance data unscaled: scaleFactor(~isfinite(scaleFactor)) = 1; % shift and scale columns of data matrix: for c = 1:size(X, 2) X(:,c) = scaleFactor(c) * (X(:,c) + X(c)); end
y(1:50) = -1; [b,w,epsilo] = C_svm(X, y,C,'linear');
for i = 1: size(X,1) for j = 1:size(X,1) kernel_output(i,j) = X(i,:)*X(j,:)'; end end
y_test_linear = sign(kernel_output*w+b);
error_linear = y-y_test_linear; errorrate_linear = length(error_linear(error_linear~=0))/size(X,1);
[b,w,epsilo] = C_svm(X, y,C,'no'); y_test_no_kernel = sign(X*w+b);
error_no_kernel = y-y_test_no_kernel; errorrate_no_kernel = length(error_no_kernel(error_no_kernel~=0))/size(X,1);

Risposte (1)

najla slama
najla slama il 26 Apr 2015
hi, can any one help me with RNN example of a matlab code please(one layer recurrent neural network if you can and not a matlab toolbox) where i can know how it work and how i can use it for solving quadratiq problems.thanks

Categorie

Scopri di più su Sequence and Numeric Feature Data Workflows in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by