帮助我了解支持向量机


76

我了解支持向量机旨在将输入集分为几个不同类的基础知识,但是我不了解其中的一些细节。首先,我对Slack变量的使用有些困惑。他们的目的是什么?

我正在做一个分类问题,在该问题中,我从放在鞋垫上的传感器捕获了压力读数。在记录压力数据的同时,受试者将坐,站和走几分钟。我想训练一个分类器,以便能够确定一个人是坐着,站着还是走着,并能够对将来的任何测试数据进行分类。我需要尝试哪种分类器?对我来说,从捕获的数据中训练分类器的最佳方法是什么?我有1000个坐,站和行走条目(总计3x1000 = 3000),并且它们都具有以下特征向量形式。(来自传感器1的压力,来自传感器2的压力,来自传感器3的压力,来自传感器4的压力)


Answers:


103

我认为您正在尝试从头绪开始。关于SVM的使用应该知道的只是该算法正在属性的超空间中找到一个将两个类最好分开的超平面,其中best意味着在类之间具有最大的余量(知识的完成方式是您的敌人,因为它模糊了整体图片),如以下著名图片所示: 替代文字

现在,还有一些问题。
首先,如何将那些令人讨厌的离群值无耻地放置在不同类别的点云的中心?
替代文字
为此,我们允许优化器留下某些标签错误的样本,但惩罚每个这样的例子。为了避免多目标优化,对于标签错误的案件,应将罚金与边际大小合并,并使用附加参数C来控制这些目标之间的平衡。
其次,有时问题只是非线性的,找不到好的超平面。在这里,我们介绍内核技巧-我们只是将原始的非线性空间投影到具有某些非线性变换的高维空间,当然要由一堆附加参数定义,希望在所得的空间中该问题适合于简单的问题支持向量机:

替代文字

再一次,通过一些数学运算,我们可以看到,通过用所谓的核函数代替对象的点积来修改目标函数,可以很好地隐藏整个转换过程。
最后,这全部适用于2个班级,而您有3个班级;怎么办呢?在这里,我们创建了3个2类分类器(坐着-没坐着,站着-没有站着,走路-没走过),并且在分类中将那些投票结合起来。

好的,这样看来问题就解决了,但是我们必须选择内核(在此我们凭直觉进行咨询并选择RBF)并至少拟合几个参数(C + kernel)。而且,我们必须为其提供过拟合安全的目标函数,例如,来自交叉验证的误差近似值。因此,我们让计算机继续工作,去喝咖啡,再回来看看是否有一些最佳参数。大!现在我们开始嵌套交叉验证,以得到误差近似值和瞧。

这个简短的工作流程当然过于简化而无法完全正确,但是显示了我认为您应该首先尝试使用随机森林的原因,该随机森林几乎是参数独立的,本机多类的,提供了无偏的错误估计,并且性能几乎与拟合的SVM一样好。


5
(+1)很高兴您添加一些图片来说明整个事情!
chl

3
@mbq既然您似乎在SVM方面非常称职,请让我澄清一下我的疑问:一旦我们找到了最好的分离超平面,我们将其用于什么?我们可以将SVM定义为一种方法,首先,选择最佳的超平面来正确地对数据点进行分类,其次,它使用该超平面来分割两个类别中的新数据点。对?(我对第二部分有些怀疑)
DavideChicco.it 2012年

3
@ DavideChicco.it基本上,整个ML的核心问题是建立一个可以可靠地预测新数据的模型,所以可以。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.