web-dev-qa-db-fra.com

Convertir le classificateur sklearn.svm SVC en implémentation Keras

J'essaie de convertir un ancien code de l'utilisation de sklearn en implémentation Keras. Puisqu'il est crucial de maintenir le même mode de fonctionnement, je veux comprendre si je le fais correctement.

J'ai déjà converti la plupart du code, mais j'ai des problèmes avec la conversion du classificateur SVC sklearn.svm. Voici à quoi cela ressemble en ce moment:

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

Super facile, à droite. Cependant, je n'ai pas pu trouver l'analogue du classificateur SVC dans Keras. Donc, ce que j'ai essayé, c'est ceci:

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)

Mais je pense que ce n'est pas correct du tout. Pourriez-vous, s'il vous plaît, m'aider à trouver une alternative au classificateur SVC de sklearn dans Keras?

Je vous remercie.

9
none32

Si vous créez un classificateur, vous avez besoin de squared_hinge et regularizer, pour obtenir la fonction de perte SVM complète comme on peut le voir ici. Donc, vous devrez également casser votre dernière couche pour ajouter un paramètre de régularisation avant d'effectuer l'activation, j'ai ajouté le code ici.

Ces changements devraient vous donner la sortie

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 est également implémenté en keras pour la classification binaire, donc si vous travaillez sur un modèle de classification binaire, utilisez le code ci-dessous.

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)

Si vous ne comprenez pas l'article ou si vous rencontrez des problèmes avec le code, n'hésitez pas à commenter. J'ai eu ce même problème il y a un certain temps, et ce fil GitHub m'a aidé à comprendre, peut-être à le parcourir aussi, certaines des idées ici viennent directement d'ici https://github.com/keras-team/keras/ problèmes/2588

9
anand_v.singh