machine-learning - 将 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_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), 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
推荐阅读
- kotlin - Kotlin 错误智能转换为“X”是不可能的,因为“状态”是一个在尝试观察状态时具有打开或自定义 getter 的属性
- mongodb - 如何使用springboot应用程序在mongodb的不同数据库中创建集合
- python - 根据另一列删除熊猫数据框中的整行
- ios - 如何在 swiftUI 中将 Top Tabbar 与 ScrollView 或 List 同步?
- c++ - 是否可以在类定义中添加包含指令?
- django - 如何在 docker-compose 上运行 prometheus 并抓取本地运行的 django 服务器?
- python - jupyter and notbook installation issue in python 3.10
- java - Decrypting PDF using .enc file
- sql - 如何在 postgres 中显示每个类别的最大日期和条件
- firebase - 从cloudfunctions在firestore中设置数据时是否需要使用await