Keras 神经网络和 SKlearn SVM.SVC

Posted

技术标签:

【中文标题】Keras 神经网络和 SKlearn SVM.SVC【英文标题】:Keras Neural Networks and SKlearn SVM.SVC 【发布时间】:2017-03-17 00:12:29 【问题描述】:

最近我在我的城市参加了一个数据科学聚会,讨论了将神经网络与 SVM 连接起来。不幸的是,演示者在演示后不得不立即退出,所以我无法提出一些问题。

我想知道这怎么可能?他在谈论使用神经网络进行分类,后来,他使用 SVM 分类器将他的准确率和精度提高了大约 10%。

我将 Keras 用于神经网络,将 SKlearn 用于机器学习的其余部分。

【问题讨论】:

人们总是可以使用ensembling/stacking,其中某个最终预测器是 SVM。一种可能更有趣的方法是用 SVM 层(并联合训练)替换最后一层,如 this paper 中所述 替换最后一层听起来像是一种“苛刻”的方法。我正在考虑采用神经网络的最后一层,然后尝试在 SVM 中对其进行处理。 替换这些层并不适用于所有任务,但会为某些任务添加一些内容。这是一种为非线性预测器的某些部分添加一些理论上合理的方法的好方法。您的方法的不同之处在于:如果将一些基于最大边距的方法作为层添加,它是共同学习的!这意味着,如果运气好和架构良好,NN 可以充当为最大边缘分类调整的非线性预处理器。到最后一层。使用您的方法,您将学习这两种模型,而无需了解 NN 中的 SVM。这通常不太强大 如果你想追求你的 svm-after-nn 方法,那就试试吧。我没有看到很多问题,因为 keras 可能支持 sklearn 接口(fit,也许 fit_transform 和 co.)。这意味着您可以构建一些管道。但是由于这些并没有像上面解释的那样真正连接,因此您需要在架构、规范化等方面进行大量调整。即使作为第一部分的 NN 作为分类单元本身非常强大,但这并不意味着这些预测是进一步 svm 处理的良好输入(一些松散连接的关键字(相反方向):whitening )。 好的,我想试试你的方法,你以前有没有尝试过这样的解决方案?我明白了主要的想法,但目前我很难想象实现应该是什么样子。 【参考方案1】:

这是完全可能的,实际上很常见。您只需选择神经网络层的输出并将其用作特征向量来训练 SVM。通常也会对特征向量进行归一化。

(卷积)神经网络学习的特征足够强大,可以泛化到不同类型的对象甚至完全不同的图像。示例见论文CNN Features off-the-shelf: an Astounding Baseline for Recognition。

关于实现,您只需要训练一个神经网络,然后选择其中一个层(通常是在全连接层或第一个全连接层之前的层),在您的数据集上运行神经网络,存储所有特征向量,然后使用不同的库(例如 sklearn)训练 SVM。

【讨论】:

以上是关于Keras 神经网络和 SKlearn SVM.SVC的主要内容,如果未能解决你的问题,请参考以下文章

你需要一个神经网络(keras)来使用分类器(sklearn)[关闭]

将 Keras 集成到 SKLearn 管道?

无法使用 Sklearn 和 Keras Wrappers 使 pipeline.fit() 工作

这是正确使用sklearn分类报告进行多标签分类报告吗?

使用 Keras 和 sklearn GridSearchCV 交叉验证提前停止

无法使用 Keras 和 Sklearn 将字符串列转换为分类矩阵