一类SVM可检测异常值

use*_*er7 0 classification machine-learning weka arff libsvm

我的问题是

我想建立一个一类SVM分类器,以从测试文件中识别名词/方面。培训文件包含名词列表。该测试包含单词列表。

这是我所做的:

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

现在,模型将测试文件中的这些单词分类,分类器在生成的模型中将这些单词识别为名词。其他分类为离群值。(因此,它就像查找一样工作。如果在经过训练的模型中将其标识为名词,则为“是”,否则为“否”。)

那么如何建立适当的分类器呢?(我的意思是输入的格式及其应包含的信息是什么?)

注意:

  • 我不会在训练文件中给出负面的例子,因为它是一堂课。
  • 我的输入格式是arff
  • 训练文件的格式是一组单词,是的
  • 测试文件的格式是一组单词,吗?

编辑 我的测试文件将包含名词短语。因此,我的分类器的工作是从测试文件中的候选项中获取名词词。

Ano*_*sse 5

您的数据格式不正确,无法解决此问题。

如果你把

word,class
Run Code Online (Sandbox Code Playgroud)

配对到一个SVM中,实际上您要放入SVM中的是稀疏向量,它由一个与您的单词相对应的单个向量组成,即

0,0,0,0,0,...,0,0,1,0,0,0,...,0,0,0,0,yes
Run Code Online (Sandbox Code Playgroud)

分类器可以对此类数据执行的任何操作都是过度拟合和存储的。对于未知的新单词,结果将毫无用处。


如果希望分类器能够抽象概括,则需要仔细地从单词中提取特征

可能的特征是n-gram。因此,“示例”一词可以表示为

exa:1, xam:1, amp:1, mpl:1, ple:1
Run Code Online (Sandbox Code Playgroud)

现在,您的分类器/ SVM可以了解到,名词通常具有n-gram“ ple”。如果添加“单词开头”和“单词结尾”符号,结果可能会更好。

^ex:1, exa:1, xam:1, amp:1, mpl:1, ple:1, le$:1
Run Code Online (Sandbox Code Playgroud)

并且可能还会使用一个以上的n克长度,例如

^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
Run Code Online (Sandbox Code Playgroud)

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