Позвольте x
быть набором матриц формы (n, d, q)
с некоторыми двоичными тегами (например, MNIST с -1 для (0, 1, 2, 3, 4)
и 1 для (5, 6, 7, 8, 9)
).
Для исследовательских целей Я вычисляю оптимальную матрицу для работы в качестве линейного разделителя, обозначенную M
, используя SVM с SGD, затем получаю набор матриц y = x * M
(то есть точечное умножение).
Затем я суммирую строки y
, что означает y = y.sum(axis=-1)
. Теперь я пытаюсь вычислить другой линейный разделитель таким же образом. Я ожидаю, что этот линейный разделитель будет, по крайней мере, таким же хорошим, как и предыдущий, поскольку вектор единиц должен давать такое же поведение, поскольку:
Когда d != q
, это именно то, что я получаю, но по какой-то причине я не могу понять, я получаю приблизительную производительность, когда d == q
.
SVM выполняется через:
from sklearn.linear_model import SGDClassifier
svm_classifier = SGDClassifier(alpha=alpha, max_iter=max_iter, verbose=verbose, tol=tol, fit_intercept=False)
svm_classifier.fit(x, y)
return svm_classifier.coef_
Это все верно с множеством параметров и количеством примеров (n
).
Идем еще дальше - когда я вручную задаю 2-й разделяющий вектор как вектор единиц через svm_separator.coef_ = np.ones(svm_separator.coef_.shape)
, я получаю ожидаемое ( т. е. идентичные) производительность при d != q
, и угадающее поведение для d == q
.
Есть идеи?