我正在尝试使用libsvm实现熟悉1类SVM。 正如我所读到的,libsvm的1级任务中没有类标签。 但是在没有标签列的情况下读取数据文件时,总会出现读取错误。 我尝试标记我的玩具数据然后用svm-train测试结果模型,但准确性总是很糟糕,大约50%。
我的问题是,如果我有一个带标签的数据集(比如,几百个高斯分布的2d点和其中的几个异常值),我如何用这些数据训练libsvm,以及如何估计结果的准确性模型?
答案 0 :(得分:1)
1)LIBSVM(C / C ++)的一行训练集如下所示(称为稀疏数据格式):
标签1:value1 2:value2 .....
(以'\ n'字符结束每一行)
即使是一类案件,您也必须提供标签栏;只是它可以是任何数字。 LIBSVM在培训过程中忽略它。这应该会删除您的读取错误。
2)关于玩具数据的准确性,您是否对“nu”和“g”参数进行了交叉验证?这些是一类SVM模型的超参数。您可能还想弄乱内核类型。是训练集,测试集还是验证集的50%?
3)由于一类SVM基本上是在高维度上进行密度估计,所以训练集的所有点都应该落在超球面上或内部,并且它们都属于一个单独的类。你可能想要参考{{3} }。你必须找到一种方法来构建一个没有异常值和饲料异常值的训练集作为测试点(也可能包含属于圆内部的一些点)来估计模型的准确性。如果无法做到这一点,则必须采用其他异常检测方法,如聚类。好消息是文献中有强大的聚类算法。
4)您的数据集是二维的,因此首先绘制它们并不难,并了解数据集和异常值。