我正在尝试在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