如何在Python中

时间:2016-09-05 11:30:42

标签: python arrays parallel-processing scikit-learn joblib

我正在使用scikit-learn包对2D图像进行SVM分类。每个像素具有9个特征,分类基于这些特征。假设我有一个成功训练的分类器clf,我想用它来对该2D图像进行分类,即3D阵列input(Xdim,Ydim,#features)。以最简单但效率极低的方式,这将是:

def svm_classification(svm_classifier,input_data):
    return svm_classifier.predict(input_data)

# Initialize output classification image
classified_image = np.empty([Xdim, Ydim])

# Do a very slow classification using nested loops
for x in range(Xdim):
    for y in range(Ydim):
        classified_image[x,y] = svm_classification(clf,input[x,y,:])

加快这一过程的有效方法是什么?在上面的示例中,只有一个点被赋予分类器,而它可以完美地处理向量(#samples X #features),因此svm_classification函数应该以更智能的方式使用。我在考虑使用'joblib'及其'并行'模块(https://pythonhosted.org/joblib/parallel.html),但我不确定如何在3D数组上执行此操作。有没有办法指定一个chunksize来自动切片输入数据?我应该手动重塑输入数组吗?我想是因为我自己无法找到正确答案的原因是输入数据(3D)的形状应该会产生2D分类图像。任何正确方向的建议将非常感谢!

0 个答案:

没有答案