non*_*e32 8 machine-learning svm neural-network scikit-learn keras
我正在尝试将一些旧代码从使用sklearn转换为Keras实现。由于保持相同的操作方式至关重要,因此我想了解自己是否正确执行了操作。
我已经转换了大多数代码,但是sklearn.svm SVC分类器转换遇到了麻烦。现在是这样的:
from sklearn.svm import SVC
model = SVC(kernel='linear', probability=True)
model.fit(X, Y_labels)
Run Code Online (Sandbox Code Playgroud)
超级容易,对。但是,我在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)
Run Code Online (Sandbox Code Playgroud)
但是,我认为这绝对不正确。您能帮我从Keras的sklearn中找到SVC分类器的替代方法吗?
谢谢。
如果要进行分类,则需要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)
Run Code Online (Sandbox Code Playgroud)
同样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), W_regularizer=l2(0.01))
model.add(activation('linear'))
model.compile(loss='hinge',
optimizer='adadelta',
metrics=['accuracy'])
model.fit(X, Y_labels)
Run Code Online (Sandbox Code Playgroud)
如果您看不懂本文或代码有问题,请随时发表评论。我前一段时间也遇到过同样的问题,这个GitHub线程帮助我理解了,也许也经历了,这里的一些想法直接来自这里https://github.com/keras-team/keras/issues/2588
| 归档时间: |
|
| 查看次数: |
4101 次 |
| 最近记录: |