Matlab fitcsvm给我一个零训练误差和40%的测试

时间:2016-08-23 17:41:55

标签: matlab machine-learning svm

我知道它对训练数据集的过度拟合,但我不知道如何更改参数以避免这种情况。 我试过从1e0,1e1,1e10改变boxcontraint并得到了同样的情况。

tTargets = ones(size(trainTargets,1),1);
tTargets(trainTargets(:,2)==1)=-1;

svmModel = fitcsvm(trainData, ...
    tTargets,...
    'KernelFunction','rbf',...
    'BoxConstraint',1e0);
[Group, score] = predict(svmModel, trainData);
tTargets = ones(size(trainTargets,1),1);
tTargets(trainTargets(:,2)==1)=-1;
svmTrainError = sum(tTargets ~= Group)/size(trainTargets,1);

[Group, score] = predict(svmModel, testData);
tTargets = ones(size(testTargets,1),1);
tTargets(testTargets(:,2)==1)=-1;
svmTestError = sum(tTargets ~= Group)/size(testTargets,1);

我希望有人可以帮忙解决这个问题 谢谢,

1 个答案:

答案 0 :(得分:0)

我发现我正在使用大C进行训练。这使得训练数据的分离非常好,但不适用于测试。 将C更改为较小的值(1e-2)使我的代码运行得更快,现在我在训练和测试中具有可比性。 谢谢!!!!