一类 SVM 检测异常值

Posted

技术标签:

【中文标题】一类 SVM 检测异常值【英文标题】:One class SVM to detect outliers 【发布时间】:2015-02-28 05:09:33 【问题描述】:

我的问题是

我想构建一个一类 SVM 分类器来识别测试文件中的名词/方面。 训练文件有名词列表。测试有单词列表。

这就是我所做的:

我正在使用 Weka GUI,并且我已经训练了一类 SVM(libSVM) 来获取模型。

现在模型对测试文件中分类器在生成的模型中识别为名词的那些词进行分类。其他被归类为异常值。 (所以它只是像查找一样工作。如果它在训练模型中被识别为名词,则为“是”,否则为“否”)

那么如何构建一个合适的分类器呢? (我的意思是输入的格式以及它应该包含什么信息?)

注意:

我不在训练文件中给出反例,因为它是一个类。 我的输入格式是arff 训练文件的格式是一组word,yes 测试文件的格式是一组word,?

编辑 我的测试文件将包含名词短语。所以我的分类器的工作是从测试文件中的候选人那里获取名词词。

【问题讨论】:

我不确定谈论“一类”分类器是否有意义。我会将您的问题描述为一个两类问题(“名词”和“非名词”)。通常,您需要两个类中的示例才能训练分类器。 感谢您的回复。但是这里讲的是一种分类。(***.com/questions/10394615/…) 哦,你是说异常检测。 是的。如果我不清楚,对不起。 建议:更新帖子的标题以反映异常值检测与一类:它变得更加清晰。 【参考方案1】:

您的数据格式不适合此问题。

如果你放

word,class

配对成 SVM,您真正放入 SVM 的是 稀疏向量,由单个向量组成,对应于您的单词,即

0,0,0,0,0,...,0,0,1,0,0,0,...,0,0,0,0,yes

分类器可以对此类数据做的任何事情都是过拟合和记忆。对不认识的生词,结果将毫无用处。


如果您希望您的分类器能够抽象概括,那么您需要仔细地从单词中提取特征。 p>

可能的特征是 n-gram。所以“例子”这个词可以表示为

exa:1, xam:1, amp:1, mpl:1, ple:1

现在,您的分类器/SVM 可以了解到具有 n-gram “ple”是名词的典型特征。 如果添加“词首”和“词尾”符号,结果可能会更好,

^ex:1, exa:1, xam:1, amp:1, mpl:1, ple:1, le$:1

也可能使用多个 n-gram 长度,例如

^ex:1, ^exa:1, exa:1, exam: 1, xam:1, xamp:1, amp:1, ampl:1, mpl:1, mple1:1, ple:1, ple$.1, le$:1

当然,添加的越多,数据集和搜索空间就会越大,这又可能导致过度拟合。

【讨论】:

谢谢你的回答。我的测试文件实际上不会有任意词。它会有名词短语,我想从中得到名词。那是我的分类器的工作。

以上是关于一类 SVM 检测异常值的主要内容,如果未能解决你的问题,请参考以下文章

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

一类 SVM 算法耗时过长

scikit中的OCSVM:异常值的距离始终为负

是否可以在 ML.Net 中进行多元无监督异常(异常值)检测?

机器学习——一类分类/新奇检测/异常评估?

一类 SVM 总是返回 FALSE