我的问题是
I want to build a one class SVM classifier to identify the nouns/aspects from test file. The training file has list of nouns. The test has list of words.
这就是我所做的:
我正在使用 Weka GUI,并且我已经训练了一个单类 SVM(libSVM)来获取模型。
Now the model classifies those words in test file that the classifier identified as nouns in the generated model. Others are classified as outliers. ( So it is just working like a look up. If it is identified as noun in trained model, then 'yes' else 'no')
那么如何构建一个合适的分类器呢? (我的意思是输入的格式以及它应该包含哪些信息?)
注意:
- 我不会在训练文件中给出反例,因为它是一类。
- 我的输入格式是arff
- 训练文件的格式是一组单词,yes
- 测试文件的格式是一组单词,?
编辑 我的测试文件将包含名词短语。所以我的分类器的工作是从测试文件中的候选者那里获取名词单词。
最佳答案
您的数据格式不适合此问题。
如果你放
word,class
将数据对放入 SVM,您真正放入 SVM 的是由单个向量组成的稀疏向量,对应于您的单词,即
0,0,0,0,0,...,0,0,1,0,0,0,...,0,0,0,0,yes
分类器对此类数据所做的任何操作都是过度拟合和内存的。对于未知的生词,结果将毫无用处。
<小时/>如果您希望分类器能够抽象和泛化,那么您需要仔细从单词中提取特征。
可能的特征是 n 元语法。所以“example”这个词可以表示为
exa:1, xam:1, amp:1, mpl:1, ple:1
现在您的分类器/SVM 可以了解到 n 元语法“ple”对于名词来说是典型的。 如果添加“词开头”和“词结尾”符号,结果可能会更好,
^ex:1, exa:1, xam:1, amp:1, mpl:1, ple:1, le$:1
也可能使用多个 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
但是,当然,添加的数据越多,数据集就越大,搜索空间就会增大,这可能会再次导致过度拟合。
关于machine-learning - 用于检测异常值的一类 SVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27732503/