通过更改软裕度来训练SVM模型,从而获得100%精度或100%1级或100%0级

时间:2018-10-21 18:22:36

标签: matlab machine-learning classification svm

我正在尝试在Matlab中用数值矩阵训练svm模型。 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

0 个答案:

没有答案