【发布时间】:2014-02-21 01:44:56
【问题描述】:
我有用于文本分类的大型 SVC 模型(~50Mb cPickles),我正在尝试在生产环境中使用它们的各种方法。对文档批次进行分类效果非常好(使用predict 和predict_proba,每分钟大约可以处理1k 个文档)。
但是,对单个文档的预测是另一回事,正如this question 的评论中所解释的那样:
你是在批量做预测吗?不幸的是,SVC.predict 方法会产生大量开销,因为它必须重建类似于训练算法产生的 LibSVM 数据结构,浅拷贝支持向量,并将测试样本转换为 LibSVM 格式可能与 NumPy/SciPy 格式不同。因此,对单个样本的预测必然会很慢。 – larsmans
我已经将 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))
【问题讨论】:
-
不要使用
SVC进行文本分类,不值得。 -
嗨,我明白你的意思,但我应该指定它是一个多类情感分类(非常不同的类大小)。目前,我正在努力达到最高精度。到目前为止,带有 RBF 内核的 SVC 的性能优于其他所有分类器,尽管差距很小(例如 SVC 0.898、PassiveAggressiveClassifier 0.868、MultinomialNB 0.837)。然而,SVC 在很大程度上优于最小类别的竞争(例如 F1 SVC 0.84、PAC 0.76、MNB 0.68)。如果 SVC 对单个文档的处理速度稍微快一点,我看不出有任何理由不将它用于我当前的数据。
标签: python svm scikit-learn svc