Странное поведение SVM в sklearn - PullRequest
0 голосов
/ 25 апреля 2020

Позвольте 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). Теперь я пытаюсь вычислить другой линейный разделитель таким же образом. Я ожидаю, что этот линейный разделитель будет, по крайней мере, таким же хорошим, как и предыдущий, поскольку вектор единиц должен давать такое же поведение, поскольку:

formula

Когда 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.

Есть идеи?

...