我有用于文本分类的大型 SVC 模型(~50Mb cPickles),我正在尝试在生产环境中使用它们的各种方法。对一批文档进行分类非常有效(使用predict
和 ,每分钟大约 1k 个文档predict_proba
)。但是,对单个文档的预测是另一回事,正如对此问题的评论中所解释的那样:
您是否在批量进行预测?不幸的是,SVC.predict 方法会产生大量开销,因为它必须重建与训练算法产生的相似的 LibSVM 数据结构,浅拷贝支持向量,并将测试样本转换为 LibSVM 格式可能与 NumPy/SciPy 格式不同。因此,对单个样本的预测必然会很慢。– 拉尔斯曼斯
我已经将 SVC 模型作为 Flask Web 应用程序提供服务,因此一部分开销已经消失(unpickling),但单个文档的预测时间仍然偏高(0.25 秒)。我查看了predict
方法中的代码,但无法弄清楚是否有办法“预热”它们,在服务器启动时提前重建 LibSVM 数据结构......有什么想法吗?
def predict(self, X):
"""Perform classification on samples in X.
For an one-class model, +1 or -1 is returned.
Parameters
----------
X : {array-like, sparse matrix}, shape = [n_samples, n_features]
Returns
-------
y_pred : array, shape = [n_samples]
Class labels for samples in X.
"""
y = super(BaseSVC, self).predict(X)
return self.classes_.take(y.astype(np.int))