2014-02-17 20 views
1

如果我错了,请纠正我,但是一类支持向量机理论指出,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 当选择较大的伽玛值时,模型是否应该适合数据,以便在训练数据集中获得相同比例的异常值?

回答

2

其实我发现了同样的问题。支持向量机的性能通常也取决于γ和nu的相互作用。如果在试图调整另一个参数的同时修正一个参数,则学习曲线看起来甚至不是单调的。

我在训练精度绘制三个图像,检测精度(上heart_scale数据5倍),和它们的差。 γ的范围从10^(-4)10^(1)和NU范围从10^(-3)10^(-1)

enter image description here

观察更清晰的小参数,我实现对γ和NU轴的对数,参见下图:

enter image description here

基本上underfit比与给定的120个数据过拟合更加明显。

编辑

调小量值1e-8填写上图中所示的间隙:

enter image description here

无明显过拟合或欠拟合了!似乎有点反直觉,因为广义误差对参数的依赖性,可能是由于libsvm中使用的优化算法而不是“真正的”解决方案...

+0

你知道为什么SVM以这种方式执行?我注意到,当结果不符合nu参数时,模型的决策值通常很小,大约为10^-5左右。我认为,如果与决策值相比,这可能是由于优化算法的大停止标准而发生的。你有没有试图弄清楚为什么SVM的行为是这样的? – MVil

+0

谢谢MVil。你正在提出一个非常好的观点。使用'-e'选项,我的结果显示,当两个参数都很小时,不存在过度拟合或过拟合。我想这是由于libsvm应用的SMO算法。请注意,libsvm优化非常快,因此预计会应用一些近似值。如果你使用其他的东西来实现svm(比如scikit learn),你可以尝试比较两者的结果 – lennon310

+0

谢谢你的时间lennon310,我认为把这个问题标记为回答是可以的。不幸的是,由于一些实际的实施问题,理论结果有时保持理论。我认为这是这种情况之一。再次感谢您的帮助。 – MVil

相关问题