我遇到了一个需要使用一类分类系统的问题。我目前正在使用python进行开发,因此我正在使用sci-kit学习机器学习任务。
从他们的文档中,OneClassSVM应该能够像预期的那样工作(仅为培训提供正面示例),但结果模型给我高度不准确的结果 - 即使是在原始培训数据
X = generate_data() # Generate matrix of tf-idf document vectors
cls = OneClassSVM(kernel='rbf', gamma=0.1, nu=0.1)
cls.fit(X)
y = cls.predict(X)
print y[y == 1].size / y.size
上述(简化)代码段会在训练数据上返回40-55%的准确度分数。它在新颖的数据上表现得更糟(正如人们所预期的那样),几乎所有结果都是不正确的。
40-55%的准确度基本上和随机分类器一样好,所以我做错了什么?我试图使用参数 gamma 和 nu ,但这对我来说似乎没什么用。
我知道OneClassSVM实现利用了Scholkopf等人提出的技术。 al和另一种选择是支持向量数据描述技术(Tax和Duin),但这不是在scikitlearn中实现的,并且需要我自己实现libsvm的接口。最重要的是,根据我的理解,SVDD与OneClassSVM实现一样准确,因此根本无法解决我的问题。
生成的训练数据是由标准tf-idf表示的文档矩阵。