我只是想更好地控制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,尽管速度较慢。