1、随便说点 这个系列就是想要记述一下自己学习机器学习算法的一个心路历程的对算法的认识,如果有帮助到更多人(还是小开心的~~~~),如果有错误的话欢迎各路大神积极的跟我联系修正错误,免的误导大家。 2、正题 2.1、课前知识 SVM是一种监督式学习方法。对于线性不可分的情况,支持向量机通过使用非线性映射把向量映射到一个更高维的空间里,基于机构风险最小化理论,在这个空间里建立有一个分割超平面,使得学习期得到全局最优化,并且在整个样本空间的期望风险以某个概率满足一定上界。在分开数据的超平面两边建有两个相互平行的超平面。分割超平面使得两个平行的超平面的距离最大化。这个距离越大,分类器的总体误差就会越小,分类效果越好。 2.2、带领大家再看一遍logistic回归 Logistic回归的目的是从特征学习出一个0/1分类模型,而这个模型是将特征的线性组合作为自变量,由于自变量的取值是负无穷到正无穷。因此,使用logistic函数将自变量映射到(0,1)上,映射后的值被认为是属于y=1的概率。 形式化表示: 假设函数: 其中x是n维的特征向量,函数g就是logistic函数。 函数g(x)的图像是: 可以看到,无穷被映射到了(0,1)上。而假设函数就是特征属于y=1的概率。 当新来一个特征时候,我们只需要求出如果大于0.5,则特征就是属于y=1的类,反之,则是属于y=0的类。 回过头来再看一遍,我们会发现,只与有关,>0,那么>0.5,g(z)只不过是用来映射的函数,真正的决定特征是属于哪一个类别的还是。可以看出当趋近于正无穷的时候,特征值是接近于1的,反之则是接近于-1。我们训练模型的目的就是希望训练数据中y=1的特征>>0,而y=0的特征远远小于0。Logistic回归的目的就是要学习得到这个θ,使得正例的特征远远大于0,负例的特征远远小于0,而且是要在所有的实例上达到这个训练目的。 2.3形式化表示 在SVM中使用的标签是-1和1,替换的是logistic回归中的0和1 (其实标签数据都是无所谓多少的,只是为了更好的区分而已)。θ替换成了w和b。以前,其中=1的。我们现在把替换为b,其他的θ替换为w,替换后为:可以进一步简化为,同时。也就是说最终y由y=0和y=1变为y=-1和y=1,只是这些标记数据变化之外。其他都没有什么区别。现在的假设函数为:。上一小节我们说过只需要考虑的正负问题,不用关心函数g(z)的大小变化,因此这里我们将g(z)做一个简化处理,把他简单的映射到-1和1上。映射关系如下所示: 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 2.4函数间隔和几何间隔 我跟你们分享一下我理解的函数间隔和几何间隔。函数间隔顾名思义由函数出发计算出来的间隔,就是我们数学上学习到的计算点到平面的距离;几何间隔就是计算的点到平面的距离除以系数。接下来听我慢慢道来。 函数间隔 概念:点到超平面的距离。给定一个训练样本,x是特征,y是标签,i标示第i个样本。 定义函数间隔如下: 超平面(w,b)关于训练样本集中所有样本点的函数间隔的最小值就是超平面关于训练样本集的函数间隔: 我们能够想象的到。当=1的时候,在我们的g(z)中,是大于等于0的,此时的函数间隔实际上就是。为了使函数间隔最大(也就是确定样本是正例还是反例的确信度最大化),当=1时,应该是一个极大数(是一个绝对值极大的数)。因此,函数间隔代表了我们认为特征是正例还是反例的置信度。 但是,这样定义的函数间隔是有问题的,我们为了使最大化,我们可以试着同时按照比例增大w和b的值(比如2w,2b)则这个时候的函数间隔变为原来的2倍,但是超平面并没有发生变化,所以,这个函数间隔是由BUG存在的,只是使用这一个来定义远远不够,这个时候就要我们的几何间隔出面了。 几何间隔 先看一张图 对于图中A点,其垂直投影到超平面的对应点为B,w是垂直于超平面的一个向量,r为样本点A到超平面的距离,此时有单位向量为,所以B点的坐标为(利用几何知识计算),带入到超平面=0得到: 进一步得到: r就是点到超平面的距离。为了求得r的绝对值,令r乘上对应的类别y,即可得出几何间隔。R=yr 由此可以看出,及时同时增大w和b的倍数,几何间隔的大小是不会改变的。当||w||=1时,几何间隔即为函数间隔。 从上面的定义中我们可以看出来,几何间隔和函数间隔之间的区别就在于||w||,几何间隔就等于函数间隔除以||w||。函数间隔实际上就是f(x),只是认为定义的间隔度量,而几何间隔f(x)/||w||才是直观上的点到超平面的距离。 2.5最优间隔分类器 在前面我们说过,我们的目标就是寻找到一个超平面,这个超平面使得离这个超平面的距离是越大越好,达到最大就是我们想要的效果。(就是我们所说的使得所有的点都必须远离超平面,如果最近的都远离了,那么其他的点肯定也都是远离的),我们现在所关心的就是要尽量使得离得最近的点到超平面的距离最大。画个图比较明了************************(好丑的图,不忍直视) 就是图中A点和B点离超平面的距离最大化。 形式化表示为: 这里||w||=1规约w,使得求得的是几何间隔而不是函数间隔。 到现在为止,我们已经把模型定义出来了,如果我们已经求得w和b,那么对于新到来的一个x,我们只需要代入到公式当中,就可以对他进行分类,这个就成为最优间隔分类器。我们现在的问题就是怎么去把w和b求出来。 由于||w||=1不是凸函数,我们把这个进行处理,考虑到我们前面2.4节中讲到的几何间隔和函数间隔的关系,,我们把上面等式重新换个方式写出来: 这个时候其实我们求得的最大值还是几何间隔,只不过此时的w不需要再受到||w||=1的约束。但是这个时候目标函数并不是凸函数,没有现成的算法求最优,所以我们还是要修改,前面说到,同时扩大w和b的倍数,对结果并没有什么影响,但是我们还是要求出一组w和b的值,因此,我们需要对函数间隔做一些限制,以保证我们的解是唯一的。我们为了简单,取函数间隔为1,也即是距离超平面最近的点的距离定义为:1/||w||。由于求1/||w||的最大值,就相当于求的最小值,因此,改写之后的结果为: 这个就比较让我们满意了,只有线性约束,而且这还是一个典型的二次规划问题(目标函数是自变量的二次函数)。代入现有的优化软件求解即可。 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 总算把前面一些知识算是说完了,有啥新增的我会在更新,下面一篇就要好好的步入正题中的正题,我们的核心————SVM。