SciKit一类SVM分类器训练时间随训练数据的大小呈指数增长

时间:2017-01-18 09:36:40

标签: python scikit-learn svm

我正在使用Python SciKit OneClass SVM分类器来检测文本行中的异常值。首先使用词袋和TF-IDF将文本转换为数字特征。

当我训练(适合)在我的计算机上运行的分类器时,时间似乎随着训练集中的项目数呈指数增长:

培训数据中的项目数和培训时间: 10K:1秒,15K:2秒,20K:8秒,25k:12秒,30K:16秒,45K:44秒。

我有什么办法可以减少培训所需的时间,并且当训练数据量增加到几十万件时,可以避免这种情况变得太长吗?

2 个答案:

答案 0 :(得分:1)

scikit的SVM是一个高级实现,所以你只能做很多事情,就速度而言,来自他们的网站," SVM不直接提供概率估计,这些是使用昂贵的五重交叉验证计算。"

您可以根据可用的RAM增加内核大小参数,但这种增加没有多大帮助。

您可以尝试更改内核,但模型可能不正确。

以下是http://scikit-learn.org/stable/modules/svm.html#tips-on-practical-use的一些建议:扩展您的数据。

否则,不要使用scikit并使用神经网络自行实施。

答案 1 :(得分:0)

希望我不会太迟。 OCSVM和SVM是资源匮乏的,长度/时间关系是二次的(您显示的数字跟随此)。如果可以,请查看隔离林或局部异常因子是否适用于您,但如果您正在考虑应用更长的数据集,我建议您创建一个与这些现成解决方案的背景非常相似的手动AD模型。通过这样做,您应该能够并行或使用线程工作。