想学理论的同学请移步Bilibili白板推导机器学习https://www.bilibili.com/video/BV1Hs411w7ci?spm_id_from=333.337.search-card.all.click

科研工具分享(由研二某大佬创建,欢迎提PR,issue):https://github.com/Les1ie/Awesome-research-tools

Notes

(1)二分类:就是给的一坨数据有两种类别啦,比如有一堆大佬和菜鸡写的文章,拿出一篇文章来判断它是到底是大佬还是菜鸡写的,如果你看完本文章之后判断出我是菜鸡,那么恭喜,你是一个好的分类器。
(2)线性可分:字面意思,对于二维平面上的两类数据样本点,可以通过一条直线分开,对于三维空间数据点,可以通过一个平面分开,
(3)超平面:有的时候我们的数据点不仅仅有一个,两个或者三个维度特征,有可能有三个以上的维度特征,那么我们可以统称直线、平面、高维平面啥的为超平面。每个样本点支持向量机SVM - 图1都有支持向量机SVM - 图2个维度特征的话就是支持向量机SVM - 图3,向量化之后就是支持向量机SVM - 图4。这其实就是点法式啦,请你不要试图寻找支持向量机SVM - 图5在哪里,因为,假设一个二维坐标,那么横纵坐标分别表示支持向量机SVM - 图6.
(4)数据样式:数据样本的话基本上就是特征点和标签的样式,即支持向量机SVM - 图7支持向量机SVM - 图8出来喽,它指样本的标签,对于二分类就是支持向量机SVM - 图9.
(5)对偶问题:svm涉及到对偶问题,有对偶问题必然存在原问题。原问题的对偶问题可以简单理解为从另一个角度去求解原问题,最终是等价的。比如你想毕业以后进BAT,你可以每天刷题,写代码提高工程能力,最终进BAT;也可以每天搞科研,发一堆论文,最终进BAT,反正我是进不了,你们加油。

SVM略讲

  1. SVM无论之前还是现在都是非常受欢迎的机器学习算法,那你可能会问现在不都用深度学习嘛,额,等你参加过几次面试之后,当面试官随意的说一句“你聊一聊SVM吧”,你就知道它为啥现在还受欢迎了(不是)。<br /> 言归正传,对于一个**二分类**问题,假设它是**线性可分**的,那么我们希望能够得到一个超平面![](https://cdn.nlark.com/yuque/__latex/d119a896f9afcb28ab00902215228637.svg#card=math&code=w%5ETx%2Bb%3D0&id=dlyAI)可以将这两类数据样本分开,那么这样的超平面**可能有很多个**,我们希望找到那个**最优的超平面**,即正样本(+1)在超平面上方,负样本(-1)在超平面下方,**并且正负样本离超平面尽可能的远**,防止出现分类模棱两可的问题,这个超平面有参数![](https://cdn.nlark.com/yuque/__latex/aa3f29b7b082772dd2123a59e3f6a725.svg#card=math&code=%28w%2Cb%29&id=s9O92)确定。假设超平面![](https://cdn.nlark.com/yuque/__latex/aa3f29b7b082772dd2123a59e3f6a725.svg#card=math&code=%28w%2Cb%29&id=PjnUC)能够进行正确分类,对于样本集中的数据点![](https://cdn.nlark.com/yuque/__latex/e1b22a94bd6fb5e430efa18091a9b75d.svg#card=math&code=%28x_i%2Cy_i%29&id=F0RAd)满足下面不等式:<br />![](https://cdn.nlark.com/yuque/__latex/a57194e0625fb21cc1cc34c3e4e3c211.svg#card=math&code=w%5ETx_i%2Bb%20%5Cgeq%20%2B1%2C%20y_i%20%3D%20%2B1%20%5C%5C%0Aw%5ETx_i%20%2Bb%20%5Cleq%20-1%2Cy_i%3D-1&id=RgwbQ)<br />我们边缘的样本点使得上述不等式的等号成立,即![](https://cdn.nlark.com/yuque/__latex/0c6a7aa3ca03e45a02dfe30143f65be3.svg#card=math&code=w%5ETx_i%2Bb%3D%2B1%2C%20w%5ETx%2Bb%3D-1&id=WzRxH),这两个超平面被称为为**支持向量**,这两个不等式合起来其实是![](https://cdn.nlark.com/yuque/__latex/febd14b9b686305bdf7ca7667467ecf0.svg#card=math&code=y_i%28w%5ETx%2Bb%29%5Cgeq1&id=ICuHE)(细品)。那么我们可以通过**最大化这两个超平面到我们所求的超平面之间的距离来优化参数**,其距离之和可以表示为![](https://cdn.nlark.com/yuque/__latex/681a52706297790932460351ac5cc0f5.svg#card=math&code=d%3D%5Cfrac%7B2%7D%7B%7C%7Cw%7C%7C%7D&id=Qtr3E)(平行平面之间的距离,小学二年级学过嗷),最大化这个距离就是最小化![](https://cdn.nlark.com/yuque/__latex/41301a26c3f4bd803a89a7ef8fa92d5c.svg#card=math&code=%5Cfrac%7B1%7D%7B2%7D%7C%7Cw%7C%7C%5E2&id=Nm6YG),这显然是个凸优化问题,而且要满足限制条件![](https://cdn.nlark.com/yuque/__latex/febd14b9b686305bdf7ca7667467ecf0.svg#card=math&code=y_i%28w%5ETx%2Bb%29%5Cgeq1&id=jdGoR)。(下图很形象)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/2423900/1649840104609-73a804b8-40a7-4e59-86ef-49f105e508e5.png#clientId=u6b87556f-74fb-4&from=paste&height=406&id=u61fc0b9f&margin=%5Bobject%20Object%5D&name=image.png&originHeight=812&originWidth=922&originalType=url&ratio=1&size=111502&status=done&style=none&taskId=u16098142-e42f-49d5-a690-92b5bf243b0&width=461)<br /> 这个优化问题可以通过构建**拉格朗日乘子法**(拉格朗日乘子法求解带限制条件的函数的最优解,小学二年级学过嗷)进行求解,从而将原问题转化为其**对偶问题,如下公式,最终得到最大间隔划分超平面所对应的模型**![](https://cdn.nlark.com/yuque/__latex/c5a92aa6bf7d1e1735389268e19d7eb5.svg#card=math&code=f%28x%29%3Dw%5ETx%2Bb&id=KMFfT)。需要优化的参数就是![](https://cdn.nlark.com/yuque/__latex/cef9aae69406c5ffe6c0f7fcd03b8f3b.svg#card=math&code=w%EF%BC%8Cb&id=GT4Aw)和乘子参数![](https://cdn.nlark.com/yuque/__latex/b6e5086e7de011bfa94a1259d3d971bb.svg#card=math&code=%5Calpha_i%20%5Cgeq0&id=jRVzi),我们输入的样本有多少个,![](https://cdn.nlark.com/yuque/__latex/7b7f9dbfea05c83784f8b85149852f08.svg#card=math&code=%5Calpha&id=ntMFh)就有多少个。<br />![](https://cdn.nlark.com/yuque/__latex/d099b9ddb4374c1dd4bd04a03721e767.svg#card=math&code=L%28w%2Cb%2C%5Calpha%29%20%3D%20%5Cfrac%7B1%7D%7B2%7D%7C%7Cw%7C%7C%5E2%2B%5Csum_%7Bi%3D1%7D%5Em%20%5Calpha_i%281-y_i%28w%5ETx%2Bb%29%29&id=u3fD8)<br />然后就是经典的拉格朗日乘子法步骤啦,对![](https://cdn.nlark.com/yuque/__latex/f1290186a5d0b1ceab27f4e77c0c5d68.svg#card=math&code=w&id=rCes4)和![](https://cdn.nlark.com/yuque/__latex/92eb5ffee6ae2fec3ad71c777531578f.svg#card=math&code=b&id=IUH30)求导等于0得到![](https://cdn.nlark.com/yuque/__latex/3fa5b22d08cc54cc23311adf64a6f7fb.svg#card=math&code=w%3D%5Csum_%7Bi%3D1%7D%5Em%5Calpha_iy_ix_i&id=SNb7I),![](https://cdn.nlark.com/yuque/__latex/fb597c334a0bbf93f0add5512d2acb92.svg#card=math&code=0%3D%5Csum_%7Bi%3D1%7D%5Em%28%5Calpha_iy_i%29&id=UWz4L),然后将这个两个式子带到上面公式就能消掉![](https://cdn.nlark.com/yuque/__latex/cef9aae69406c5ffe6c0f7fcd03b8f3b.svg#card=math&code=w%EF%BC%8Cb&id=Z3CvL),会变成它的对偶求解公式:<br />![](https://cdn.nlark.com/yuque/__latex/c948ac56269c4d24fc1680ccb270a31d.svg#card=math&code=max_%7B%5Calpha%7D%5Csum_%7Bi%3D1%7D%5Em%5Calpha_i-%5Cfrac%7B1%7D%7B2%7D%5Csum_%7Bi%3D1%7D%5Em%5Csum_%7Bj%3D1%7D%5Em%20%5Calpha_i%20%5Calpha_jy_iy_jx_i%5ETx_j&id=DOUCG)。(这里的公式是需要推导的,感兴趣的可以推推看。另外这里是![](https://cdn.nlark.com/yuque/__latex/adb953aef0d99379673a28ff2515e98f.svg#card=math&code=min_%7Bw%2Cb%7Dmax_%7B%5Calpha%7DL%28w%2Cb%2C%5Calpha%29&id=m0Hin),经典的最小最大化套娃,对于最大化![](https://cdn.nlark.com/yuque/__latex/d20caec3b48a1eef164cb4ca81ba2587.svg#card=math&code=L&id=vJi5K),![](https://cdn.nlark.com/yuque/__latex/72fe2f6145f222084e1d59e9ec7dbaf4.svg#card=math&code=%5Csum_%7Bi%3D1%7D%5Em%20%5Calpha_i%281-y_i%28w%5ETx%2Bb%29%29&id=tpgn3)这一项显然是小于等于0的,那么这项最大值是啥,那肯定是0咯,那么![](https://cdn.nlark.com/yuque/__latex/b7aed7f1dbc7382f669073ffc1feeb75.svg#card=math&code=min_%7Bw%2Cb%7Dmax_%7B%5Calpha%7DL%28w%2Cb%2C%5Calpha%29%3Dmin_%7Bw%2Cb%7D%5Cfrac%7B1%7D%7B2%7D%7C%7Cw%7C%7C%5E2&id=Av0Ta),套娃成功。由此也引出使用拉格朗日乘子法所需满足的KKT条件:![](https://cdn.nlark.com/yuque/__latex/79bcfe38fb6f032e17a3878ad03422ee.svg#card=math&code=1.%20%5Calpha%20%5Cgeq%200%3B%20%5C%202.y_i%28w%5ETx_i%2Bb%29%5Cgeq%200%3B%20%5C%203.%5Calpha_i%281-y_i%28w%5ETx_i%2Bb%29%29%3D0&id=dOE7K)。)<br />因此我们要去求解这一堆![](https://cdn.nlark.com/yuque/__latex/7b7f9dbfea05c83784f8b85149852f08.svg#card=math&code=%5Calpha&id=FZVS0),它其实是一个二次规划问题,但是参数量等于样本量,直接求解开销巨大。优于限制条件![](https://cdn.nlark.com/yuque/__latex/fb597c334a0bbf93f0add5512d2acb92.svg#card=math&code=0%3D%5Csum_%7Bi%3D1%7D%5Em%28%5Calpha_iy_i%29&id=hhQXp),因此可以可以使用**SMO算法**。其大致思想是,每次求一对![](https://cdn.nlark.com/yuque/__latex/6384d9a5fa53298c08582a7c77bae123.svg#card=math&code=%5Calpha_i%2C%5Calpha_j&id=x2Xv5),固定其他的![](https://cdn.nlark.com/yuque/__latex/7b7f9dbfea05c83784f8b85149852f08.svg#card=math&code=%5Calpha&id=fQJ9n)不变,以此求解完所有的参数,直到参数收敛。解出![](https://cdn.nlark.com/yuque/__latex/7b7f9dbfea05c83784f8b85149852f08.svg#card=math&code=%5Calpha&id=MTDeZ)后,求出![](https://cdn.nlark.com/yuque/__latex/cef9aae69406c5ffe6c0f7fcd03b8f3b.svg#card=math&code=w%EF%BC%8Cb&id=ionvM),最终我们求得模型:<br />![](https://cdn.nlark.com/yuque/__latex/417bd8e6e822853ef2c1229886fa8ed7.svg#card=math&code=f%28x%29%3Dw%5ETx%2Bb%3D%5Csum_%7Bi%3D1%7D%5Em%5Calpha_iy_ix_i%5ETx%2Bb&id=nwVaR).。(至于这个![](https://cdn.nlark.com/yuque/__latex/92eb5ffee6ae2fec3ad71c777531578f.svg#card=math&code=b&id=jR6Y8)怎么求,可以把所有样本点带进去求得b取均值啦。)

对于线性不可分的情况,我们可以通过将样本映射到高维空间使得其在高维空间可分,假设升维函数为支持向量机SVM - 图10,即超平面为支持向量机SVM - 图11,我们在用拉格朗日乘子法优化时,需要计算支持向量机SVM - 图12,计算这样的高维内积是复杂的,因此我们将其转换为它们在低维的计算,引入一个核函数来表示其内积,即支持向量机SVM - 图13。常用的核函数有线性核,多项式核,高斯核,sigmoid核,拉普拉斯核等等。

有时候,我们可能找不到这样一个超平面,或者说我们不知道找到的这个超平面是不是优于过拟合引起的。我们称必须要满足条件支持向量机SVM - 图14硬间隔,而如果我们可以容忍间隔之间存在一些样本,给它一个容忍参数,这种方式为软间隔
支持向量机SVM - 图15,对于函数支持向量机SVM - 图16是一个离散函数,即不满足限制条件时为1,满足时为0,C为容忍系数。当C为无穷大时,我们要求强制满足限制条件。

SVM可以用于做回归问题,即转化为SVR,SVR和线性回归有所不同,线性回归是当点不在回归线上时就计算损失,而SVR允许一定的误差,设其为支持向量机SVM - 图17,当样本点落在支持向量机SVM - 图18支持向量机SVM - 图19之间就不计算损失。因此SVR的优化目标和SVM一样,只是目的是为了容下更多的点。

在SVM中感悟生活

SVM比较重要的几个地方就是:限制条件求最优,对偶问题,SMO,核函数,软间隔。
我们可以对应这几个地方发表一些生活感悟嗷:

  1. 很喜欢罗翔说的一句话,人是具有社会属性的,不可能存在跟别人利益绝对无关的个人性,蝴蝶震动翅膀都有可能影响整个世界的气候,更何况是人的行为呢,你要承担因为追求自由而造成的后果,也要接受别人不喜欢你的自由。
  2. 换一种角度看问题,或许能得到更好地求解方式。
  3. 当你有很多想法要去实现而不知所措的时候,不妨每次实现其中一两个,慢慢的时间久了,或许所有的想法都能完成。
  4. 当生活遇到瓶颈走不出去的时候,不妨想一想初心,清楚自己真正想要的是什么,或许就能释然了。
  5. 不要对自己要求太严格,或许可以容忍自己犯一两次错误,在心情轻松的同时也能收获好的结果。

    有啥理论或者感悟上的意见,大家可以在评论区提嗷,我读书少,欢迎批评指正!