LibSVM单类分类中的nu参数不是异常值的分数?

如果我错了请纠正我,根据单类SVM的理论,nu参数是训练数据集中异常值的上限(UB)和支持向量(SV)数量的下限(LB)。假设我使用的是RBF高斯核,那么根据nu参数的概念,无论我选择什么样的gamma值,模型都应该能够产生结果,使得nu参数是训练数据集中异常值的上限?然而,我在Matlab中使用LibSVM尝试了一些简单的例子后,并没有观察到这种情况:

[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

当gamma = 0.01时,我得到的训练数据准确率为97.50;当gamma = 100时,我得到的训练数据准确率为42.50。选择更大的gamma值时,模型不应该过度拟合数据以获得训练数据集中相同比例的异常值吗?


回答:

实际上我发现了同样的问题。SVM的性能通常也取决于γ和nu的相互作用。如果固定一个参数而尝试调整另一个,学习曲线似乎甚至不是单调的。

我绘制了三张图,分别是训练准确率、测试准确率(在heart_scale数据上进行5折交叉验证)和它们的差异。γ的范围从10^(-4)10^(1),nu的范围从10^(-3)10^(-1)

enter image description here

为了更清楚地观察小参数的影响,我对γ和nu轴进行了对数变换,参见下图:

enter image description here

基本上,在给定的120个数据中,欠拟合比过拟合更为明显。

编辑

将epsilon值调整为1e-8以填补上图中显示的差距:

enter image description here

完全没有明显的过拟合或欠拟合!这似乎有点违反直觉,因为泛化误差对参数的依赖性,可能是因为libsvm中使用的优化算法而不是“真实”的解决方案…

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注