我正在使用 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 数组上执行此操作。有没有办法为输入数据的自动切片指定块大小?我应该手动重塑输入数组吗?我想是什么让我自己找不到正确的答案是输入数据(3D)的形状,它应该会产生一个 2D 分类图像。任何正确方向的建议将不胜感激!