我正在使用scikit-学习SVC对一些数据进行分类。我想提高训练成绩。
clf = svm.SVC(cache_size=4000,probability=True,verbose=True)
由于sckikit-学习与libsvm和libsvm的接口使用OpenMp,所以我希望:
导出OMP_NUM_THREADS=16
会在多个核上运行。不幸的是,这并没有帮助。
有什么想法吗?
谢谢
发布于 2012-11-07 17:47:36
在当前的OpenMP绑定中没有支持libsvm在scikit-learn中。但是,如果sklearn.svm.SVC存在性能问题,那么很可能应该使用更可伸缩的模型。
如果你的数据是高维的,它可能是线性可分的。在这种情况下,建议您首先尝试一些简单的模型,比如朴素的bayes模型或sklearn.linear_model.Perceptron,因为这些模型的训练速度非常快。您还可以尝试使用比sklearn.linear_model.LogisticRegression更具有可伸缩性的liblinear来实现liblinear和sklearn.svm.LinearSVC,尽管它们的内存效率低于scikit中的其他线性模型--学习。
如果您的数据不是线性可分的,您可以尝试sklearn.ensemble.ExtraTreesClassifier (调整n_estimators参数以权衡训练速度和预测精度)。
或者,您可以尝试使用scikit的RBFSampler转换器来近似RBF内核--学习+拟合输出的线性模型:
approximation.html
发布于 2014-11-19 22:43:50
如果您在scikit中使用交叉验证或网格搜索,那么您可以使用带有n_jobs参数的多个CPU:
GridSearchCV(..., n_jobs=-1)
cross_val_score(..., n_jobs=-1)请注意,每个cross_val_score只需要一个作业,所以如果您的折叠数小于CPU,您仍然不会使用所有的处理能力。
LibSVM可以使用OpenMP,如果您可以编译它并按照LibSVM常见问题中的这些说明直接使用它。因此,您可以以LibSVM格式导出您的缩放数据(下面是关于如何实现的StackOverflow问题 ),并直接使用LibSVM来训练您的数据。但这只会有好处,如果你是网格搜索或想知道准确性的分数,据我所知,LibSVM创建的模型不能用于科学知识学习。
还有一个GPU加速版LibSVM,我已经尝试过了,而且速度非常快,但不是基于当前的LibSVM版本。我已经和开发者谈过了,他们说他们希望尽快发布一个新版本。
发布于 2016-01-15 21:52:32
虽然这个线程是一个year+的旧线程,我认为它是值得回答的。
我在scikit上编写了一个openmp支持补丁-为libsvm和liblinear (linearSVC)学习这里可用的- https://github.com/fidlr/sklearn-openmp。
它基于libsvm关于如何添加OpenMP支持的FAQ,以及liblinear的多核实现。
只需克隆回购并运行sklearn build-openmp.sh来应用该修补程序并构建它。
定时OMP_NUM_THREADS=4 python plot_permutation_test_for_classification.py
有关详细信息和使用信息可以在这里找到- http://fidlr.org/post/137303264732/scikit-learn-017-with-libsvm-openmp-support
https://stackoverflow.com/questions/13273738
复制相似问题