优化 OneClassSVM 的准确性

Mic*_*ina 6 python machine-learning scikit-learn

我有一个需要使用一类分类系统的问题。我目前正在使用 python 进行开发,因此我正在使用 sci-kit learn 进行机器学习任务。

从他们的文档来看,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
Run Code Online (Sandbox Code Playgroud)

上面(简化的)代码片段在训练数据上返回了 40-55% 的准确度分数。它在新数据上的表现要差得多(正如人们所期望的那样),几乎所有的结果都是不正确的。

40-55% 的准确率本质上与随机分类器一样好,那么我做错了什么?我曾尝试使用参数gammanu,但这似乎对我没有太大作用。

我知道 OneClassSVM 实现利用了 Scholkopf 等人提出的技术。al 和替代方法是支持向量数据描述技术(Tax 和 Duin),但这不是在 scikitlearn 中实现的,需要我自己实现 libsvm 的接口。最重要的是,据我所知,SVDD 与 OneClassSVM 实现一样准确,因此有可能根本无法解决我的问题。

生成的训练数据是由标准 tf-idf 表示的文档矩阵。