⚙️ 第十二章 如何让计算机【学习】
📄 一句话概括

支持向量机(SVM)的直觉只有一句话:在两类点之间画一条分界线,而且要离两边的点都尽量远——决定这条线的,只有离得最近的那几个点。

📝 本节和前面几节的关系

12.1 讲了机器学习的总思路,这一节看一个具体算法把思路落成了什么形状。

一、一句话讲完的直觉

要给两类东西分类,最直接的办法就是在它们中间画一条界线。 可界线能画的位置很多——凭什么是这一条? SVM 的回答是:选那条离两边都尽量远的。 中间那个空隙叫间隔(margin),SVM 要的就是间隔最大的那条线。 为什么追求【尽量远】?因为线离点越远,将来新来的点越不容易分错。

二、支持向量这个名字的来历

一维的情况最好看。一类点在 -0.6 附近、一类点在 0.6 附近: 最佳分界位置就在 0——正好落在两边最近的点的中间。 注意这里的关键:决定分界线的,只有【离得最近的那几个点】。 把远处的点全删掉,分界线一动不动。 这几个点就叫【支持向量】——名字就是从这儿来的:它们【支撑】着这条线。

三、直线画不出来的时候

现实里经常遇到两类点搅在一起、根本画不出直线的情况。 SVM 的办法是:把数据映射到更高的维度,在那里就容易分开了。 打个比方:桌上混在一起的两种豆子,摊平了分不开,可要是能往上抬一层,就分开了。 实现这件事的工具叫核函数,它是个很巧的数学技巧,这里只记结论就够。

四、它的长处和短处

长处:小样本也管用。 别的算法要大量数据,SVM 靠的是【边界上那几个点】。 长处:有理论支撑。 追求最大间隔这件事,不是经验拍脑袋,是能证明的。 短处:数据一大就慢。 短处:核函数和参数要选,选不好效果差很多。 所以它是一种很经典、很值得懂原理的算法,但不一定是每个问题的最优解。

五、动手 Demo:支持向量机

SVM 的直觉是:在两类点之间画一条分界线,而且离两边都尽量远。 用一维数据看这条线是怎么定下来的。

a = [-1.4, -1.1, -0.8, -0.6]
b = [0.6, 0.9, 1.2, 1.5]
lo, hi = max(a), min(b)
print("最近的左点", lo, "最近的右点", hi)
print("间距", hi - lo)
print("最佳分界位置", (lo + hi) / 2)

实跑输出:

--------------------------------------------------------------------
支持向量机
--------------------------------------------------------------------

**支持向量机(SVM)是一种分类算法**,它的直觉只有一句话:

    **在两类点之间画一条分界线——而且要离两边的点都尽量远。**

  为什么追求【尽量远】?**因为线离点越远,将来新来的点越不容易分错。**
  中间那个宽度有个名字:**间隔(margin)。SVM 要的就是间隔最大的那条线。**

  一维的情况最好看。实测:**一类点在 -1 附近、一类点在 +1 附近:**

    第一类(标签 0)     -1.4   -1.1   -0.8   -0.6
    第二类(标签 1)      0.6    0.9    1.2    1.5

    离得最近的左点      -0.6(它俩之间的间距 = 1.2)
    离得最近的右点      0.6
    最佳分界位置        0.00(正中间,两边余量一样大)

  **关键在这一句:决定分界线位置的,只有【离得最近的那几个点】。**
  **把远处的点全删掉,分界线一动不动——这几个点就叫【支持向量】。**
  名字就是从这儿来的:**它们【支撑】着这条分界线。**

  那要是两类点搅在一起、根本画不出直线呢?
  **SVM 有办法:把数据映射到更高的维度,在那里就容易分开了。**
  实现这件事的工具叫**核函数**,**它是个很巧的数学技巧,这里只记结论就够。**

实测:最近的左点 -0.6、右点 0.6,间距 1.2,最佳分界位置是 0。 决定这条线的只有离得最近的那几个点——它们就是【支持向量】。

30 秒实验

  1. 在纸上把最左和最右的点各挪远一点,看分界线位置会不会变。
  2. 把中间两个最近的点删掉再算一次,看看分界线动没动。

常见误区

  1. 以为分界线由所有数据决定。只有离得最近的那几个点说了算。
  2. 以为 SVM 只能画直线。线性不可分时可以用核函数升到更高维度。
自测三问(点开对答案) 1. SVM 想要的分界线有什么特点? —— 离两类点都尽量远,也就是间隔最大的那条线。 2. 支持向量指什么? —— 离分界线最近的那几个点,它们决定了线的位置,其他点删掉也不影响。 3. 为什么追求最大间隔? —— 线离点越远,将来新来的数据越不容易被分错。

相关笔记