为什么scikit-learn SVM分类器在使用如此少的CPU时运行这么长时间?

sha*_*ala 6 python performance svm scikit-learn

我正在从python 2.7.10执行scikit-learn SVM分类器(SVC),现在已经运行了2个多小时.我已经使用pandas.read_csv预处理的数据读取数据然后运行

clf = SVC(C = 0.001, kernel = 'linear', cache_size = 7000, verbose = True)
clf.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)

我有使用R在H2O中运行分类器(随机森林和深度神经网络)的经验,他们从来没有这么长时间!我运行的机器有16 GB RAM和i7,每个核心有3.6 GHz.任务监视器告诉我,python正在使用8.6 Gb RAM,但只占CPU的13%.我不太明白它为什么这么慢,甚至没有使用所有资源.

我拥有的数据有12000000行和22列,唯一详细的sklearn给我的是一行:

[LIBSVM]

这是正常的行为还是我应该看到更多?任何人都可以发布完成的svc的详细信息吗?另外,除了降低C参数外,我还能做些什么来加快速度吗?使用较少的行并不是一个真正的选择,因为我想要对算法进行基准测试,如果使用不同的训练数据,它们将无法比较.最后,任何人都可以解释为什么我的资源很少被使用?

Nik*_*rov 2

您可以尝试使用算法的加速实现 - 例如 scikit-learn-intelex - https://github.com/intel/scikit-learn-intelex

对于 SVM,您肯定能够获得更高的计算效率,但是对于如此大的数据集,这仍然是显而易见的。

首先安装包

pip install scikit-learn-intelex
Run Code Online (Sandbox Code Playgroud)

然后添加你的python脚本

from sklearnex import patch_sklearn
patch_sklearn()
Run Code Online (Sandbox Code Playgroud)