scale the input data for correct learning
[scaled_instance,scaled_parameters] = libsvm_scale(instance); [scaled_instance,scaled_parameters] = libsvm_scale(instance,[lower,upper]); [scaled_instance] = libsvm_scale(instance,scaled_parameters); [scaled_instance,scaled_parameters,scaled_label,scaled_label_parameters] = libsvm_scale(instance,[lower,upper],label,[label_lower, label_upper]);
Scaling before applying SVM is very important in order to avoid several numerical problems! Normally good ranges are [0,1] or [-1,+1]. Each feature row in the instance matrix has be scaled indepented from the other features.
It is important to scale the testing data with the same scale as the training data!
[label,instance]=libsvmread(fullfile(libsvm_getpath(),"demos","heart_scale")); [scaled_instance,scaled_parameters] = libsvm_scale(instance,[-1,1]); cc = libsvm_svmtrain(label,scaled_instance); [predicted_label,accuracy]=libsvm_svmpredict(label,svmnormalize(instance,scaled_parameters),cc); disp("accuracy: "+string(accuracy(1))+" %"); | ![]() | ![]() |