scikit-learn パッケージを使用して、2D 画像で SVM 分類を行っています。各ピクセルには、分類の基になる 9 つの特徴があります。正常にトレーニングされた classifierがあり、それを使用してその 2D 画像、つまり 3D 配列(Xdim,Ydim,#features)clf
の分類を実行したいとします。input
最も単純ですが、非常に非効率的な方法では、次のようになります。
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,:])
このプロセスをスピードアップする効率的な方法は何でしょうか? 上記の例では、分類子に与えられるポイントは 1 つだけですが、ベクトル (#samples X #features) を完全に処理できるため、svm_classification
関数はよりスマートな方法で使用する必要があります。「joblib」とその「parallel」モジュール ( https://pythonhosted.org/joblib/parallel.html ) を使用することを考えていましたが、3D 配列でこれを行う方法がわかりません。入力データの自動スライスのチャンクサイズを指定する方法はありますか? 入力配列を手動で再形成する必要がありますか? 自分で正しい答えを見つけられないのは、2D分類画像になるはずの入力データ(3D)の形状にあると思います。正しい方向への提案は大歓迎です!