将sklearn.svm SVC分类器转换为Keras实现

j5fpnvbx  于 2022-11-13  发布在  其他
关注(0)|答案(3)|浏览(230)

我正在尝试将一些旧代码从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)

但是,我认为这是不正确的任何手段。你能,请,帮我找到一个替代的SVC分类器从sklearn在Keras?

  • 谢谢-谢谢
gg58donl

gg58donl1#

如果您正在创建分类器,则需要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), 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

e37o9pze

e37o9pze2#

如果你使用的是Keras 2.0,那么你需要修改anand v sing的答案中的以下几行。
W正则化器-〉核正则化器
Github link

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

或者您可以使用follow

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'])
bvk5enib

bvk5enib3#

你可以使用SVM与Keras实现起诉scikeras。这是一个Scikit-Learn API Package 器的Keras。它是第一次发布于2020年5月。下面我附上了它的官方文档链接。我希望你会找到你的答案在那里。
https://pypi.org/project/scikeras/#description

相关问题