将 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 分类器的替代品吗?

谢谢。

如果你正在制作一个分类器,你需要squared_hingeregularizer,以获得完整的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), kernel_regularizer=l2(0.01))
model.add(activation('softmax'))
model.compile(loss='squared_hinge',
              optimizer='adadelta',
              metrics=['accuracy'])
model.fit(X, Y_labels)

此外,hinge在 keras 中实现用于二元分类,因此如果您正在使用二元分类模型,请使用以下代码。

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), kernel_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

如果您使用的是 Keras 2.0,那么您需要更改 anand v sing 答案的以下行。

W_regularizer -> kernel_regularizer

Github链接

model.add(Dense(nb_classes, kernel_regularizer=regularizers.l2(0.0001)))
model.add(Activation('linear'))
model.compile(loss='squared_hinge',
                      optimizer='adadelta', metrics=['accuracy'])

或者您可以使用关注

top_model = bottom_model.output
  top_model = Flatten()(top_model)
  top_model = Dropout(0.5)(top_model)
  top_model = Dense(64, activation='relu')(top_model)
  top_model = Dense(2, kernel_regularizer=l2(0.0001))(top_model)
  top_model = Activation('linear')(top_model)
  
  model = Model(bottom_model.input, top_model)
  model.compile(loss='squared_hinge',
                      optimizer='adadelta', metrics=['accuracy'])
  

您可以将 SVM 与 Keras 实现一起使用,起诉 scikeras。它是Keras的Scikit-Learn API包装器。它于 2020 年 5 月首次发布。下面我附上了它的官方文档链接。我希望你能在那里找到答案。

https://pypi.org/project/scikeras/#description

相关内容

  • 没有找到相关文章

最新更新