帮助我理解支持向量机

机器算法验证 机器学习 分类 支持向量机
2022-02-01 23:40:13

我了解支持向量机的基本目标是将输入集分类为几个不同的类,但我不明白的是一些基本细节。对于初学者,我对使用 Slack 变量感到有些困惑。他们的目的是什么?

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

1个回答

我认为你正试图从一个糟糕的结局开始。关于 SVM 使用它应该知道的只是该算法在属性的超空间中找到一个超平面,可以最好地分离两个类,其中最好的意味着类之间的边距最大(知道它是如何完成的就是你的敌人,因为它模糊了整体图片),如这样一张著名的图片所示: 替代文字

现在,还有一些问题。
首先,那些讨厌的异常值无耻地躺在不同类别的点云中心怎么办?
替代文字
为此,我们允许优化器留下错误标记的某些样本,但惩罚每个这样的样本。为了避免多目标优化,对错误标记案例的惩罚与边距大小合并,并使用控制这些目标之间平衡的附加参数 C。
其次,有时问题不是线性的,找不到好的超平面。在这里,我们介绍核技巧——我们只是通过一些非线性变换将原始的非线性空间投影到更高维空间,当然是由一堆附加参数定义的,希望在结果空间中问题适用于普通的支持向量机:

替代文字

再一次,通过一些数学运算,我们可以看到,通过用所谓的核函数替换对象的点积来修改目标函数,可以优雅地隐藏整个转换过程。
最后,这一切都适用于 2 个类,你有 3 个;怎么办?在这里,我们创建了 3 个 2 类分类器(坐着 - 不坐,站 - 不站,步行 - 不走),并在分类中将这些分类器与投票相结合。

好的,问题似乎解决了,但我们必须选择内核(这里我们根据直觉咨询并选择 RBF)并至少适合几个参数(C+内核)。而且我们必须有过拟合安全的目标函数,例如来自交叉验证的误差近似。所以我们让计算机继续工作,去喝杯咖啡,回来看看有一些最佳参数。伟大的!现在我们刚刚开始嵌套交叉验证以进行误差逼近,瞧。

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