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% 的准确率本质上与随机分类器一样好,那么我做错了什么?我曾尝试使用参数gamma和nu,但这似乎对我没有太大作用。
我知道 OneClassSVM 实现利用了 Scholkopf 等人提出的技术。al 和替代方法是支持向量数据描述技术(Tax 和 Duin),但这不是在 scikitlearn 中实现的,需要我自己实现 libsvm 的接口。最重要的是,据我所知,SVDD 与 OneClassSVM 实现一样准确,因此有可能根本无法解决我的问题。
生成的训练数据是由标准 tf-idf 表示的文档矩阵。