使用 libsvm 进行一类分类

Posted

技术标签:

【中文标题】使用 libsvm 进行一类分类【英文标题】:One class classification with libsvm 【发布时间】:2014-04-07 07:24:05 【问题描述】:

快速回顾一下我想做的事情,我想确定一篇文章是否由同一作者撰写。因此我使用一类分类。 在我的训练集(18 个样本)中,它看起来像这样(为了简化,我使用 x 作为数据值):

1 1:x 2:x "until" 200:x
1 1:x 2:x "until" 200:x

在我的测试集(3 个样本)中,它看起来像这样(为了简化,我使用 y 作为数据值):

1 1:y 2:y "until" 200:y

对于数据准备(训练和测试集),我将缩放上限和下限设置为+1/-1

-l -1 -u 1

对于训练,我使用 svm_type 是一类 svm,内核类型是 Sigmoid。然而准确率是0%

optimization finished, #iter = 13
obj = 22.901769047004553, rho = 5.476401914859387
nSV = 11, nBSV = 6
Accuracy = 0.0% (0/21) (classification)

谁能告诉我我在这里做错了什么?

【问题讨论】:

【参考方案1】:

您需要调整参数。

nu 是训练错误分数的上限和支持向量分数的下限。通过这样的设置,基本上可以拒绝数据量nu(例如0.01表示1%)并标记为异常值。

同时尝试调整 Sigmoid 内核中的 gammacoef0 值。

虽然它可能不是导致你的训练精度为零的直接因素,但我建议你自己缩放数据而不是 libsvm 的最大最小缩放,检查standard scaling。

 x_mean = mean(x);
 x_std = std(x);
 x = (x - x_mean)./x_std;

然后使用相同的x_meanx_std 值来扩展您的测试数据。

【讨论】:

谢谢,我试试看!

以上是关于使用 libsvm 进行一类分类的主要内容,如果未能解决你的问题,请参考以下文章

LibSVM 一类分类 nu 参数不是异常值的一小部分吗?

libsvm处理多分类的问题

在 libsvm matlab 中标记一个类以进行交叉验证

使用 LibSVM 进行分类

Python+libsvm-2(实例-使用libsvm对鸢尾花进行分类)

如何使用 LibSVM 进行“多分类”方法?