Обучение модели SVM путем изменения мягкого запаса, что приводит к 100% точности или 100% Class 1 или 100% Class 0 - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь обучить SVM-модель в Matlab с помощью числовой матрицы.150 строк, где каждая строка представляет вектор длиной 250. Каждая строка классифицируется как «1» или «0».

Я разделяю данные на обучение и тестирование, а затем применяю к ним модель и только изменяю BoxConstraint каждый раз, чтобы увидеть влияние этого на модель.Я только меняю его на 0,1 каждый раз.Когда я затем предсказываю это вне тренировочного или тестового набора, результаты кажутся крайне неправильными.Либо он классифицирует весь набор данных как класс 1, либо весь набор данных как класс 0, либо правильно классифицирует весь набор данных с точностью 100%.Между ними нет никаких попыток, и я несколько раз пытался выбрать различные BoxConstraints или изменить образцы данных обучения и тестирования, но не повезло.Поскольку у меня 250 столбцов, я не уверен, как построить это, чтобы увидеть, что происходит, если я ошибаюсь или нет.

Есть ли ошибка в том, как я использовал свои данные, или есть другой параметр, на который я должен обратить внимание?

Код ниже:

i = 1
for c = [0.001 0.01 0.1 0.55 2 10]
 rand_num = randperm(200);

X_train = uspsdata(rand_num(1:160),:);
cl_train = uspscl(rand_num(1:160),:);

X_test = uspsdata(rand_num(161:200),:);
cl_test = uspscl(rand_num(161:200),:);

Md1 = 
fitcsvm(X_train,cl_train,'KernelFunction','gaussian','BoxConstraint',c);

pred_test = predict(Md1,X_train);
confusionmat(cl_train,pred_test)
loss = resubLoss(Md1);
accuracy = sum(pred_test==cl_train)/(length(cl_train))

class_error(i) = 1-accuracy
i = i+1
end

Результаты:

i =2

ans =

81     0
79     0
accuracy =

0.5062

i =3

ans =

 0    76
 0    84

accuracy =

0.5250

i = 4


ans =

82     0
 0    78

accuracy = 1

i = 5

ans =

83     0
 0    77
...