Keras神经网络和SKlearn SVM.SVC

7

最近我在城里参加了一个数据科学聚会,其中有一个关于将神经网络与SVM连接的讲座。不幸的是,演讲者在演讲后不久就离开了,所以我没能问一些问题。

我想知道这是如何可能的?他谈到了使用神经网络进行分类,然后使用SVM分类器来提高精度和准确性约10%。

我正在使用Keras进行神经网络,SKlearn用于其余的机器学习。


2
可以始终使用集成/堆叠其中一些最终预测器是SVM。可能更有趣的方法是用SVM层替换最终层(并联合训练),如此论文所述。 - sascha
替换最后几层听起来有点“粗暴”。我在考虑将神经网络的最后一层取出,并尝试在 SVM 中进行处理。 - sebb
1
替换这些层对于每个任务都不起作用,但对某些任务会增加一些东西。这是一种很好的方法,为非线性预测器的某部分添加一些更具理论依据的方法。与您的方法的区别在于:如果将某些基于最大间隔的方法添加为层,它们将联合学习!这意味着,通过一点运气和良好的架构,神经网络可以充当一个经过调整的非线性预处理器,用于最后一层的最大间隔分类。而使用您的方法,您将同时学习两个模型,而无需了解神经网络内部的支持向量机。总体而言,这样做的能力较弱。 - sascha
1
如果你想要追求svm-after-nn的方法,那就试试吧。我认为这里没有太多问题,因为Keras可能支持sklearn接口(fit、maybe fit_transform等)。这意味着你可以构建一些流水线。但是由于它们并不像上面所解释的那样真正相互连接,所以你需要在架构、规则和其他方面进行大量调整。即使NN作为第一部分本身非常强大,作为进一步svm处理的好输入也并不意味着这些预测是好的(有一些松散连接的关键字(相反的方向):whitening)。 - sascha
好的,我想尝试你的方法,你以前尝试过实现这样的解决方案吗?我理解了主要思路,但此时此刻很难想象实现应该是什么样子。 - sebb
我没有尝试过,但你有一篇完整的科学论文解释了这个概念。如果你熟悉你的工具,那不会很难。但我认为你需要在theano中实现很多自定义内容才能在keras中使用它。我不确定你为什么或者为了什么想要尝试这个。也许对你来说这会是无用功(除了学习新思想和编程相关的东西)。很难事先说这种方法是否适用于某个任务X。 - sascha
1个回答

6
这是完全可行的,实际上相当普遍。您只需选择神经网络层的输出,并将其用作特征向量来训练SVM。通常还需要对特征向量进行归一化。
(卷积)神经网络学习到的特征足够强大,可以泛化到不同类型的对象甚至完全不同的图像。例如,请参见文献CNN Features off-the-shelf: an Astounding Baseline for Recognition
关于实现,您只需训练一个神经网络,然后选择其中一个层(通常是完全连接层之前的层或第一个完全连接层),在数据集上运行神经网络,存储所有特征向量,然后使用不同的库(例如sklearn)训练SVM。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接