在OpenCV 3.1.0中,是否可以指定SVM隐藏层中的节点数量?

我只是想更好地控制SVM的输出结果。

我尝试搜索文档,但找不到似乎能实现此功能的函数。


回答:

有人可能会说SVM没有隐藏节点,但这只是部分正确。

最初,SVM被称为支持向量网络(这是Vapnik本人对它们的称呼),它们被视为一种具有单隐藏层的 neural networks。由于当时神经网络的流行,许多人至今仍使用sigmoid “kernel”,尽管它很少是有效的Mercer核(仅因为神经网络社区习惯于使用它,他们开始使用它,尽管它没有数学依据)。

那么SVM是神经网络吗?是的,它可以被视为神经网络。事实上,许多分类器都可以通过这种视角来看。然而,使SVM真正不同的是它们的训练和参数化方式。特别是,SVM使用有效的Mercer核作为“激活函数”(它们表示某些空间中的点积)。此外,隐藏节点的权重等于训练样本,因此你得到的隐藏单元数量与训练样本数量相同。在训练过程中,SVM会通过解决一个偏好稀疏解(移除隐藏单元)的优化问题,自动减少隐藏单元的数量,从而最终得到由训练样本子集组成的隐藏层,我们称之为支持向量。需要强调的是,这不是SVM的经典观点,但它是一个有效的视角,对于来自神经网络社区的人来说可能更容易理解。

那么你能控制这个数量吗?是也不是。不是,因为SVM需要所有这些隐藏单元来进行有效的优化问题,它会自动移除所有冗余的单元。是的,因为存在一种替代的优化问题,称为nu-SVM,它使用nu-超参数,这是支持向量的下限,因此也是隐藏单元的下限。不幸的是,你不能直接指定上限。

但我真的需要这样做! 如果真是这样,你可以使用遵循你限制的近似解决方案。你可以使用H维采样器来显式地近似核空间(http://scikit-learn.org/stable/modules/kernel_approximation.html)。其中一种方法是Nystroem方法。简而言之,如果你想拥有”H隐藏单元”,你只需拟合Nystroem模型以产生H维输出,通过它转换你的输入数据,并在其上拟合线性SVM。从数学角度来看,**这是在以给定核近似真正的非线性SVM,尽管速度较慢。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注