Hi everyone,
I need your help for my project.
I have already built an SVM model for classification with 4 labels. The SVM model worked very well. Accuracy classification reaches more than 90%.
However, when I want to check the model with new data ( new data = the original data through an AWGN channel having a 10 dB signal-to-noise ratio (SNR). The classification result is always less than 30% accuracy.
I don't know why despite trying so many ways. Pls help me!!!
My code is as follows:
%% preparing data
load('mydata.mat') % including 200 observers and 120 features, 4 labels
output = grp2idx(Y);rand_num = randperm(size(X,1));% training data set 70%, test set 30%,
X_train = X(rand_num(1:round(0.7*length(rand_num))),:);y_train = output(rand_num(1:round(0.7*length(rand_num))),:);X_test = X(rand_num(round(0.7*length(rand_num))+1:end),:);y_test = output(rand_num(round(0.7*length(rand_num))+1:end),:);%% Train a classifier
% This code specifies all the classifier options and trains the classifier.
template = templateSVM(... 'KernelFunction', 'linear', ... 'PolynomialOrder', [], ... 'KernelScale', 'auto', ... 'BoxConstraint', 1, ... 'Standardize', true)Mdl = fitcecoc(... X_train, ... y_train, ... 'Learners', template, ... 'Coding', 'onevsall',... 'OptimizeHyperparameters','auto',... 'HyperparameterOptimizationOptions',... struct('AcquisitionFunctionName',... 'expected-improvement-plus'));%% Perform cross-validation
partitionedModel = crossval(Mdl, 'KFold', 10);% Compute validation predictions
[validationPredictions, validationScores] = kfoldPredict(partitionedModel);% Compute validation accuracy
validation_error = kfoldLoss(partitionedModel, 'LossFun', 'ClassifError'); % validation error
validationAccuracy = 1 - validation_error;%% test model
oofLabel_n = predict(Mdl,X_test);oofLabel_n = double(oofLabel_n); % chuyen tu categorical sang dang double
test_accuracy_for_iter = sum((oofLabel_n == y_test))/length(y_test)*100;%% save model
saveCompactModel(Mdl,'mySVM');
Best Answer