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

标签 machine-learning keras scikit-learn neural-network svm

我正在尝试将一些旧代码从使用 sklearn 转换为 Keras 实现。由于保持相同的操作方式至关重要,因此我想了解我的做法是否正确。

我已经转换了大部分代码,但是我在 sklearn.svm SVC 分类器转换方面遇到了问题。这是现在的样子:

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

super 简单,对吧。但是,我在 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 损失函数,如 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

关于machine-learning - 将 sklearn.svm SVC 分类器转换为 Keras 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54414392/

相关文章:

C# Accord.net。文本分类

python - scikit-learn, keras, tensorflow 和 mxnet 中保存机器学习模型的所有格式是什么?

python - 如何在 sklearn Python 中绘制 SVM 决策边界?

python-3.x - k 表示聚类方法得分为负

python - One-Hot 编码的 Keras 自定义损失

python - 逻辑回归的批量梯度下降

python - Keras 序列模型 非线性回归模型 错误预测

python - Tensorflow LSTM 有状态选项不维护批处理之间的状态

python - 一个问题以及如何在创建模型时处理批处理

python - 如何修复 '' 发现输入变量的样本数量不一致 : [219, 247 ]''