![机器学习的算法分析和实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/407/52842407/b_52842407.jpg)
2.1 分类问题的刻画
首先考虑k=2的情况。在空间中有有限个点,每个点都有两个分量,为了简化记号,将这些点记为
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P19_6797.jpg?sign=1739105236-EJrcCHm5INPOTh862LO0GFEZVQrHF8Qr-0-8ced05f9d4d90075ca88d94de6e5a270)
每个点都赋予一个值yi∈{−1,1}。也可以想象成平面上的这些点被染成两种颜色。其目的就是试图找出最简单的函数来区分这些点。区分点的方法可以使用函数,如。函数值为1的点是一种颜色,函数值为−1的点是另外一种颜色。
从使用参数最少的角度来考量,最简单的函数是线性函数,对应的几何形状就是空间中的超平面。下面使用向量和矩阵的语言。在中的向量记为列向量的形式,为了节省空间,也可以使用转置的写法
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P20_6802.jpg?sign=1739105236-Nd7m5meDwGeDqb9JxgTKWfLgp7BTWkEf-0-e963c04416b9fab2b1cf91d06ffee12b)
来表示一个k维向量。在空间中的超平面函数是
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P20_6808.jpg?sign=1739105236-pIKaxwCbrKrnwKOuIeQENkWdDwvPEJl5-0-3afb8fabf0fd977c7947115890d2400b)
其中,。超平面的一边满足f(x)>0,另一边满足f(x)<0。所以希望找到一个超平面,即w,b满足
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P20_6812.jpg?sign=1739105236-adJFkzRkiU1PI45ywnvaFSn1rIZXMtRN-0-ce38b49e47a4f6bac377cbfeceea4b70)
为了简化计算和符号,可以扩充维数,如果xi是有k个分量的向量
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P20_6814.jpg?sign=1739105236-wHfiracq8AkJBpVz5fowJ20l5nLVnlGK-0-0f7f4693b4dfae4d6068b9bfdf903d1f)
那么添加第一个分量1成为
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P20_6816.jpg?sign=1739105236-3ZdOm0aOIKpBqwXh6ER44dvCvlgsmndb-0-0704a790bfb68603cac044a0a0b320c8)
同样,对于
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P20_6818.jpg?sign=1739105236-iK1r9OYslrzQO9ko2tDCuIyIA0KSTQYQ-0-63c8ef3c513e4a969467d6a9806d27b2)
也可以添加一个分量成为
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P20_6819.jpg?sign=1739105236-PNcRZuk3cxeeJn297aBWG9C8C0Yz9v6P-0-2b3592a3293d7373cdd764629be7b9fc)
所以有
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P20_6821.jpg?sign=1739105236-nQiLXtZuxFQHGQAqEaeh3gLSoEZA9rTK-0-8b82d38fde2a26d3917e41555fdf9ccd)
在达到这个共识以后,可以忽略掉新的记号,还是沿用旧的记号来表达新的内容。
现在的目的是找出合适的w,使得线性函数
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P20_6823.jpg?sign=1739105236-PV4nZIAXqcUkeVgyc889MJgcoFLdIlIc-0-a3b98e0b2e6c25cdd956d80ba6fa8e74)
可以区分开平面上的点集,即对于每个i,都有
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P21_6825.jpg?sign=1739105236-6hm8xeLo1gxvXnaOddmvmKB8nn6eWRxe-0-4e37d1f92aa8410317e72e6172bbe58c)
如果这个问题可以得到解决,就需要一个基础假设,可以假设这些点集本来就在一个超平面的两边,那么问题就归结于如何找到这个超平面。
数学上的存在性是解决问题的前提,但是我们更关心在实际操作中的算法问题。算法问题可归结为:给出一个有限的、在平面(二维)或者空间(高维)可分的点集,如何在有限步骤之内找到这个超平面。
为此,可以尝试迭代方法。下面来回顾几种使用迭代方法求解的经典问题。
对于一个连续函数,如果f(a)f(b)<0,那么根据中间值定理一定有c∈(a;b),使得f(c)=0。为了实际寻找这个零点,可以采用二分法。
另外一个例子是关于连续函数的收缩映像定理。如果一个函数满足|f(x)−f(y)|<λ|x−y|,那么一定有一个点满足f(x)=x。这个点称为不动点。为了得到这个点,可以使用
xn+1=f(xn)
来进行迭代,最终会收敛到所需要的不动点上。
又如利用牛顿法求解函数的零点,其迭代方式为
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P21_6831.jpg?sign=1739105236-p71ADVXKBYUFJZ4hIenKG2mOcKLiFq1R-0-26086fb90a7c30aaf2b5d8d8dfbc46d3)
在一定条件下也可以逐渐收敛到所需要的函数零点上。
这些方法都使得计算机在不断更新的过程中逐渐得到一个我们希望得到的解。所以机器学习的一些方法也是通过不断迭代以期达到学习的目的。
回到本节的问题,先从一个超平面开始,这意味着有了一个w,超平面就是f(x)=wTx。如果分类已经完全正确,那么对于每个i都有sign(wTxi)=yi。否则,至少有一个n使得sign(wTxn)≠yn。例如,wTxn>0,但yn=−1。这样w′=w−xn作为超平面就会把xn试图拉到超平面负面的一侧。又如wTxn<0,但yn=1,这样w′=w+xn作为新的超平面就会把xn试图拉到超平面正面的一侧。所以w′=w+ynxn就会同时满足上面两种情况。
一般来讲,从任意的一个w0开始,如果这个点已经正确完成分类,那么我们就有了结果。如果有一个k使得
sign(wTxn)≠yn
成立,则迭代的方式如下
wn+1=wn+ynxn
然后持续更新w,直到最后完成所有正确的分类为止。
定理2.1 如果这些点本来就是可以区分的,那么上述算法必然会在有限步骤内结束。
证明 可以从两个方面来看wn的增长。一方面,因为序列更新
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P22_6466.jpg?sign=1739105236-XEMtDNjQLScnkqF2UqlMvdxOFnNtheYC-0-0420fa7a73b5ce1ec421b6b524d3e958)
其中n满足,所以有
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P22_6851.jpg?sign=1739105236-JkZyvM9cIXOjK6vGYgUlJ9fYuO3dYTUn-0-ad52ffa9c4978358dcadd8989edf91e9)
考虑到,从而有常数使得
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P22_6853.jpg?sign=1739105236-0itX1QVX4cq352Oi0ADciQIZvUzE0Td5-0-14617ca9f243ea012788814e7e0e2109)
其中A是正实数,可以选为所有|xi|2的上界。
另一方面,因为有向量w*可以区分平面上的点,所以将式(2.1)等号两边同时和w*做内积,得到
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P22_6868.jpg?sign=1739105236-tLO2FLPXqKJU6JB9gQG2QTE835mxuUxc-0-fb514494d3fc25a129cc3fb162dbfd8a)
又因为有,所以有
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P22_6857.jpg?sign=1739105236-ZFwdCG85iRabMjwJfHykEizAKOdmuq2b-0-967c41d7e8a38b8c9f61fcb54fd70741)
其中,C可以选择为所有中最小的正值。从上面两个不等式可以看到
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P22_6870.jpg?sign=1739105236-IgsY5pXgaV66ahFBgQ3CTj58C1Ssmf4w-0-a7368944171574bc33e5c59a32647421)
从而可以得到这样的n一定是有限的,无法持续更新下去。这就说明一定会在某一步终止,最后达到完全可分状态。 证毕
上面是为了简化记号而做出的算法和证明。现在来看不简化记号时,迭代算法应该是什么样子。回到样本点
(x1,y1),(x2,y2),···,(xn,yn)
其中,且yi∈{−1,1}。目标是寻找
和
,使得
yi(wTxi+b)>0
其迭代算法是先选择初始值,假设在选择了
以后,有xn使得
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P22_6865.jpg?sign=1739105236-Fm2HeTs7lpH1qsUWN9Xqlb6sPv8uvRHy-0-071f12c56e297a25a80a85f14d8edecf)
那么有
wn+1=wn+ynxn
bn+1=bn+yn
这个过程就是不简化记号的迭代过程。
感知机模型迭代收敛如图2.1所示。
![](https://epubservercos.yuewen.com/A39478/31397781004970606/epubprivate/OEBPS/Images/Figure-P23_764.jpg?sign=1739105236-hxT2NhmFSgArSQ2SdwyHI6NQ4hyMmr4R-0-b0c45876dbeab639f494b91664e14636)
图2.1 感知机模型迭代收敛
感知机的模型算法是可以加强的,在后面会看到各种加强的探索。但无论如何,这个简单算法都让我们看到了机器学习的基本想法,那就是不断地优化探索,直到找到最优或者局部最优的算法为止。