如果我错了,请纠正我,但是一类支持向量机理论指出,nu参数是训练数据集中离群值的上界(UB)和SV数量的下界(LB)。假设我正在使用RBF高斯核函数,所以通过nu参数的思想,我选择何种伽马值并不重要,模型应该能够产生结果,使得参数nu是训练中异常值的UB数据集?然而,这是我已经在Matlab与LIBSVM尝试一些简单的例子观察到的不是:使用伽玛= 0.01LibSVM一类分类nu参数是不是离群值的一小部分?
[heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale');
ind_good = (heart_scale_label==1);
heart_scale_label = heart_scale_label(ind_good);
heart_scale_inst = heart_scale_inst(ind_good);
train_data = heart_scale_inst;
train_label = heart_scale_label;
gamma= 0.01;
nu=0.01;
model = svmtrain(train_label, train_data, ['-s 2 -t 2 -n ' num2str(nu) ' -g ' num2str(gamma) ' -h 0']);
[predict_label_Tr, accuracy_Tr, dec_values_Tr] = svmpredict(train_label, train_data, model);
accuracy_Tr
我用得到的训练数据的准确性97.50 伽马= 100,我得到的准确度训练数据为42.50 当选择较大的伽玛值时,模型是否应该适合数据,以便在训练数据集中获得相同比例的异常值?
你知道为什么SVM以这种方式执行?我注意到,当结果不符合nu参数时,模型的决策值通常很小,大约为10^-5左右。我认为,如果与决策值相比,这可能是由于优化算法的大停止标准而发生的。你有没有试图弄清楚为什么SVM的行为是这样的? – MVil
谢谢MVil。你正在提出一个非常好的观点。使用'-e'选项,我的结果显示,当两个参数都很小时,不存在过度拟合或过拟合。我想这是由于libsvm应用的SMO算法。请注意,libsvm优化非常快,因此预计会应用一些近似值。如果你使用其他的东西来实现svm(比如scikit learn),你可以尝试比较两者的结果 – lennon310
谢谢你的时间lennon310,我认为把这个问题标记为回答是可以的。不幸的是,由于一些实际的实施问题,理论结果有时保持理论。我认为这是这种情况之一。再次感谢您的帮助。 – MVil