我正在使用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分类图像。任何正确方向的建议将非常感谢!