为什么我们计算SVM的保证金?

时间:2017-11-24 12:19:41

标签: vector svm

我学习SVM(支持向量机):有几点仍然含糊不清:(线性可分,原始情况)

我知道如何找到weigth w和hyperplan方程,但是如果我们可以从中推导出支持向量,为什么我们要计算余量?我需要先计算什么?在这种情况下 ? (对不起,那些混合的问题,但我真的迷失了它)

我在一些例子中看到边缘是以这种方式计算的:

1 / ||w||

而在其他人中,这样:

2 / ||w||
那么这两种情况有什么不同呢?

谢谢

1 个答案:

答案 0 :(得分:0)

分离超平面和SVM的类边界之间的边界是该算法的基本特征。

请参阅,您有两个超平面Traceback (most recent call last): File "/usr/local/bin/airflow", line 28, in <module> args.func(args) File "/usr/local/lib/python3.5/dist-packages/airflow/bin/cli.py", line 839, in scheduler job.run() File "/usr/local/lib/python3.5/dist-packages/airflow/jobs.py", line 200, in run self._execute() File "/usr/local/lib/python3.5/dist-packages/airflow/jobs.py", line 1309, in _execute self._execute_helper(processor_manager) File "/usr/local/lib/python3.5/dist-packages/airflow/jobs.py", line 1441, in _execute_helper self.executor.heartbeat() File "/usr/local/lib/python3.5/dist-packages/airflow/executors/base_executor.py", line 132, in heartbeat self.sync() File "/usr/local/lib/python3.5/dist-packages/airflow/executors/celery_executor.py", line 88, in sync state = async.state File "/home/userName/.local/lib/python3.5/site-packages/celery/result.py", line 436, in state return self._get_task_meta()['status'] File "/home/userName/.local/lib/python3.5/site-packages/celery/result.py", line 375, in _get_task_meta return self._maybe_set_cache(self.backend.get_task_meta(self.id)) File "/home/userName/.local/lib/python3.5/site-packages/celery/backends/amqp.py", line 156, in get_task_meta binding.declare() File "/home/userName/.local/lib/python3.5/site-packages/kombu/entity.py", line 605, in declare self._create_queue(nowait=nowait, channel=channel) File "/home/userName/.local/lib/python3.5/site-packages/kombu/entity.py", line 614, in _create_queue self.queue_declare(nowait=nowait, passive=False, channel=channel) File "/home/userName/.local/lib/python3.5/site-packages/kombu/entity.py", line 649, in queue_declare nowait=nowait, File "/home/userName/.local/lib/python3.5/site-packages/amqp/channel.py", line 1147, in queue_declare nowait, arguments), File "/home/userName/.local/lib/python3.5/site-packages/amqp/abstract_channel.py", line 50, in send_method conn.frame_writer(1, self.channel_id, sig, args, content) File "/home/userName/.local/lib/python3.5/site-packages/amqp/method_framing.py", line 166, in write_frame write(view[:offset]) File "/home/userName/.local/lib/python3.5/site-packages/amqp/transport.py", line 258, in write self._write(s) **ConnectionResetError: [Errno 104] Connection reset by peer** (1) w^tx+b>=1, if y=1。这表示任何带有标签(2) w^tx+b<=-1, if y=-1的向量必须位于超平面y=1之上或之后。这同样适用于标签为(1)和超平面y=-1的载体。

注意:如果可以满足这些要求,则隐含意味着数据集可线性分离。这是有道理的,因为否则不能构造这样的余量。

因此,SVM试图找到的是一个决策边界,它位于(2)(1)之间的中间位置。我们将此边界定义为(2)。您在此处看到的是(3) w^tx+b=0(1)(2)是并行超平面,因为它们共享相同的参数(3)w。参数b保持这些平面的方向。回想一下,矢量总是有方向和幅度/长度。

现在的问题是:如何计算超平面w?方程(3)(1)告诉我们,任何最接近(2)的标签y=1的向量都恰好位于超平面(3)上,因此{{1对于此类(1),变为(1)。类似的情况适用于具有负标签和w^tx+b=1的最接近的矢量。飞机上的那些矢量被称为“支持向量”&#39;决策边界x仅取决于那些,因为人们可以从(2)中减去(3)的支持向量并得到:

(2)

注意:两个平面的(1)是不同的支持向量。

现在,我们希望获得w^tx+b-w^tx+b=1-(-1) => wt^x-w^tx=2 的方向,但忽略它的长度以获得x与其他平面之间的最短距离。该距离是从w到其他的垂直线段。为此,可以将(3)的长度除以得到与(3)垂直的范数向量,从而w。通过忽略左手站点(它相等),我们看到两个平面之间的距离实际上是(3)。这个距离必须最大化。

修改 正如其他人在此所述,使用拉格朗日乘数或SMO算法来最小化该项 (wt^x-w^tx)/||w||=2/||w|| 这是原始svm的优化问题的凸形式。