Преобразовать SVC-классификатор sklearn.svm в реализацию Keras - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь преобразовать старый код из sklearn в реализацию Keras.Поскольку важно поддерживать такой же способ работы, я хочу понять, правильно ли я это делаю.

Я уже преобразовал большую часть кода, однако у меня возникли проблемы с sklearn.svmПреобразователь классификатора SVC.Вот как это выглядит сейчас:

from sklearn.svm import SVC
model = SVC(kernel='linear', probability=True)
model.fit(X, Y_labels)

Супер просто, верно.Однако я не смог найти аналог классификатора SVC в Керасе.Итак, я попробовал вот что:

from keras.models import Sequential
from keras.layers import Dense

model = Sequential()
model.add(Dense(64, activation='relu'))
model.add(Dense(1, activation='softmax'))
model.compile(loss='squared_hinge',
              optimizer='adadelta',
              metrics=['accuracy'])
model.fit(X, Y_labels)

Но я думаю, что это неверно.Не могли бы вы помочь мне найти альтернативу классификатору SVC от sklearn в Керасе?

Спасибо.

1 Ответ

0 голосов
/ 29 января 2019

Если вы создаете классификатор, вам нужно squared_hinge и regularizer, чтобы получить полную функцию потерь SVM, как можно увидеть здесь. Так что вам также нужно будет разбить последний слой надобавьте параметр регуляризации перед выполнением активации, я добавил код здесь.

Эти изменения должны дать вам вывод

from keras.regularizers import l2
from keras.models import Sequential
from keras.layers import Dense

model = Sequential()
model.add(Dense(64, activation='relu'))
model.add(Dense(1), W_regularizer=l2(0.01))
model.add(activation('softmax'))
model.compile(loss='squared_hinge',
              optimizer='adadelta',
              metrics=['accuracy'])
model.fit(X, Y_labels)

Также hinge реализован в кератах для двоичной классификации, так что есливы работаете над моделью двоичной классификации, используйте приведенный ниже код.

from keras.regularizers import l2
from keras.models import Sequential
from keras.layers import Dense

model = Sequential()
model.add(Dense(64, activation='relu'))
model.add(Dense(1), W_regularizer=l2(0.01))
model.add(activation('linear'))
model.compile(loss='hinge',
              optimizer='adadelta',
              metrics=['accuracy'])
model.fit(X, Y_labels)

Если вы не можете понять статью или у вас возникли проблемы с кодом, не стесняйтесь комментировать.У меня была такая же проблема некоторое время назад, и эта ветка GitHub помогла мне понять, может быть, пройти через это, некоторые идеи здесь прямо отсюда https://github.com/keras-team/keras/issues/2588

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...