Как правило, вы не будете тренироваться непосредственно на функциях SIFT. Кластеризируйте их (используя k-средства) и затем обучайтесь на гистограмме идентификаторов принадлежности к кластеру (то есть k-мерного вектора, который в позиции i подсчитывает, сколько объектов было назначено для я -й кластер).
Таким образом, вы получаете один выход для каждого изображения (и один k-мерный вектор объектов).
Вот квази-код (с использованием mahotas и milk в Pythonn):
from mahotas.surf import surf
from milk.unsupervised.kmeans import kmeans,assign_centroids
import milk
# First load your data:
images = ...
labels = ...
local_features = [surfs(im, 6, 4, 2) for im in imgs]
allfeatures = np.concatenate(local_features)
_, centroids = kmeans(allfeatures, k=100)
histograms = []
for ls in local_features:
hist = assign_centroids(ls, centroids, histogram=True)
histograms.append(hist)
cmatrix, _ = milk.nfoldcrossvalidation(histograms, labels)
print "Accuracy:", (100*cmatrix.trace())/cmatrix.sum()