我正在使用 scikit-learn SVC 对一些数据进行分类。我想提高训练效果。
clf = svm.SVC(cache_size=4000, probability=True, verbose=True)
由于 sckikit-learn 与 libsvm 接口(interface),而 libsvm 使用 OpenMp,我希望:
export OMP_NUM_THREADS=16
将在多个内核上运行。 不幸的是,这没有帮助。
有什么想法吗?
谢谢
最佳答案
scikit-learn 中 libsvm 的当前绑定(bind)不支持 OpenMP。但是,如果您在使用 sklearn.svm.SVC
时遇到性能问题,您很可能应该改用更具可扩展性的模型。
如果您的数据是高维数据,它可能是线性可分的。在这种情况下,建议首先尝试更简单的模型,例如众所周知的训练速度非常快的朴素贝叶斯模型或 sklearn.linear_model.Perceptron
。您还可以尝试使用 liblinear
实现的 sklearn.linear_model.LogisticRegression
和 sklearn.svm.LinearSVC
比 libsvm< 更具可扩展性
尽管内存效率低于 scikit-learn 中的其他线性模型。
如果您的数据不是线性可分的,您可以尝试 sklearn.ensemble.ExtraTreesClassifier
(调整 n_estimators
参数以权衡训练速度与预测准确性)。
或者,您可以尝试使用 scikit-learn 的 RBFSampler
转换器来近似 RBF 核 + 在输出上拟合线性模型:
http://scikit-learn.org/dev/modules/kernel_approximation.html
关于python - scikit-learn OpenMP libsvm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13273738/