Python 如何并行化scikit学习SVM(SVC)分类器的.predict()方法?

Python 如何并行化scikit学习SVM(SVC)分类器的.predict()方法?,python,concurrency,scikit-learn,Python,Concurrency,Scikit Learn,我最近遇到一个需求,我需要一个经过培训的.fit()scikit learn

我最近遇到一个需求,我需要一个经过培训的
.fit()
scikit learn
分类器实例,并且需要
.predict()
大量实例

是否有一种方法可以通过任何
scikit学习
内置工具仅并行化此
.predict()
方法

from sklearn import svm

data_train = [[0,2,3],[1,2,3],[4,2,3]]
targets_train = [0,1,0]

clf = svm.SVC(kernel='rbf', degree=3, C=10, gamma=0.3, probability=True)
clf.fit(data_train, targets_train)

# this can be very large (~ a million records)
to_be_predicted = [[1,3,4]]
clf.predict(to_be_predicted)

如果有人知道一个解决方案,如果你能与我分享,我会非常高兴。

这可能有问题,但像这样的东西应该可以解决问题。基本上,将数据分成块,在
joblib.Parallel
循环中分别在每个块上运行模型

from sklearn.externals.joblib import Parallel, delayed

n_cores = 2
n_samples = to_be_predicted.shape[0]
slices = [
    (n_samples*i/n_cores, n_samples*(i+1)/n_cores))
    for i in range(n_cores)
    ]

results = np.vstack( Parallel( n_jobs = n_cores )( 
    delayed(clf.predict)( to_be_predicted[slices[i_core][0]:slices[i_core][1]
    for i_core in range(n_cores)
    ))

上面的工作示例

from joblib import Parallel, delayed
from sklearn import svm

data_train = [[0,2,3],[1,2,3],[4,2,3]]
targets_train = [0,1,0]

clf = svm.SVC(kernel='rbf', degree=3, C=10, gamma=0.3, probability=True)
clf.fit(data_train, targets_train)

to_be_predicted = np.array([[1,3,4], [1,3,4], [1,3,5]])
clf.predict(to_be_predicted)

n_cores = 3

parallel = Parallel(n_jobs=n_cores)
results = parallel(delayed(clf.predict)(to_be_predicted[i].reshape(-1,3))
    for i in range(n_cores))

np.vstack(results).flatten()

results
行没有在我的机器上运行。谢谢,我发现这个示例非常有用。我认为它并没有完全回答这个问题,尽管关于“被预测”,我只会计算三个条目,以你为例,很好,但OP的列表将有数百万长,正如所写的,这个解决方案只计算前三个条目……还是我误解了?
array([1, 1, 0])