필터 지우기
필터 지우기

SVM Quadratic programming problem

조회 수: 6 (최근 30일)
YANG
YANG 2014년 8월 1일
답변: najla slama 2015년 4월 26일
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);

답변 (1개)

najla slama
najla slama 2015년 4월 26일
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

카테고리

Help CenterFile Exchange에서 Sequence and Numeric Feature Data Workflows에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by