我学习SVM(支持向量机):有几点仍然含糊不清:(线性可分,原始情况)
我知道如何找到weigth w
和hyperplan方程,但是如果我们可以从中推导出支持向量,为什么我们要计算余量?我需要先计算什么?在这种情况下 ? (对不起,那些混合的问题,但我真的迷失了它)
我在一些例子中看到边缘是以这种方式计算的:
1 / ||w||
而在其他人中,这样:
2 / ||w||
那么这两种情况有什么不同呢?
谢谢
答案 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的优化问题的凸形式。