web-dev-qa-db-ja.com

sklearn.svm SVC分類器をKeras実装に変換する

古いコードをsklearnを使用してKeras実装に変換しようとしています。同じ操作方法を維持することが重要であるため、正しく実行しているかどうかを理解したいと思います。

ほとんどのコードは既に変換しましたが、sklearn.svm SVC分類器の変換に問題があります。これが今どのように見えるかです:

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

とても簡単です。しかし、Kerasで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)

でも、どうしても正しくないと思います。 KerasのsklearnからSVC分類子の代替を見つけるのを手伝ってくれませんか?

ありがとうございました。

9
none32

分類子を作成する場合は、squared_hingeregularizer、ご覧のように完全なSVM損失関数を取得するには here。 したがって、アクティベーションを実行する前に最後のレイヤーを分割して正則化パラメーターを追加する必要があります。ここにコードを追加しました。

これらの変更はあなたに出力を与えるはずです

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

9
anand_v.singh