Python scikit学习(SVMLIB)中奇怪的SVM预测性能

Python scikit学习(SVMLIB)中奇怪的SVM预测性能,python,svm,scikit-learn,Python,Svm,Scikit Learn,我在一个10000x1000的大数据集上使用scikit learn中的SVC(10000个对象和1000个特性)。我已经在其他资料中看到,SVMLIB的缩放范围不超过10000个对象,我确实观察到了这一点: training time for 10000 objects: 18.9s training time for 12000 objects: 44.2s training time for 14000 objects: 92.7s 你可以想象当我试着去买80000的时候会发生什么。然而

我在一个10000x1000的大数据集上使用scikit learn中的SVC(10000个对象和1000个特性)。我已经在其他资料中看到,SVMLIB的缩放范围不超过10000个对象,我确实观察到了这一点:

training time for 10000 objects: 18.9s
training time for 12000 objects: 44.2s
training time for 14000 objects: 92.7s
你可以想象当我试着去买80000的时候会发生什么。然而,我发现非常令人惊讶的是,SVM的predict()比训练fit()花费更多的时间:


让预测在线性时间内运行是很简单的(虽然这里可能接近线性),而且通常比训练快得多。那么这是怎么回事?

您确定在预测时间的度量中没有包含训练时间吗?您有计时的代码片段吗?

完全可以肯定,我只计时一个命令:fit()或predict()。我对这类工具很有经验,对其他模型也很适用。好吧,那就是支持向量的数量随着训练集线性增长(例如,如果几乎所有样本都被选为SVs),然后样本的nb也在增长,因此是二次时间演化。好的观点,这确实可能是非线性增长的原因。只有在不断增加的样本数量上使用相同的模型时,您才会期望线性。然而,我仍然感到惊讶的是,对于这种规模的问题,预测比训练慢。是的,那些预测的时间似乎非常慢。可能还有另一个问题。您的数据集中有多少个不同的类?svc.support\u vectors和svc.dual\u coef的形状是什么?您是否批量进行预测?不幸的是,
SVC.predict
方法会产生大量开销,因为它必须重建一个类似于训练算法生成的LibSVM数据结构,在支持向量中进行浅拷贝,并将测试样本转换为可能不同于NumPy/SciPy格式的LibSVM格式。因此,对单个样本的预测必然是缓慢的。
prediction time for 10000 objects (model was also trained on those objects): 49.0s
prediction time for 12000 objects (model was also trained on those objects): 91.5s
prediction time for 14000 objects (model was also trained on those objects): 141.84s