`
grunt1223
  • 浏览: 422956 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

我的数学之美(三) —— 使用支持向量机进行预测

阅读更多
现实生活中充满着预测问题,即对未知世界的大胆猜测。我们基于什么根据来推测呢?最多的当然是已有的经验,即之前所做的一些已知结果的推测,这就是所谓的“有监督的学习”。

这里,我举一个最简单的例子,就是公务员考试中那种最常见的数字推理题:1,4,9,16,?

当然,你一眼就看出了这是一个平方序列,下一个数字一定是25,但是,这是唯一的答案吗?

应该说,平方序列只是一个模型,比方说,我们可以假定这样一个多项式模型,
引用
a * x * x * x + b * x * x + c * x + d

其中a、b、c、d为未知数,而x分别为1、2、3、4,采用初中数学所学的待定系数法,就可以算得abcd的值,从而得到符合上述规律一个模型。对于上面我给出的多项式模型,由于我们有四个未知数和四个方程,因此解是唯一的。但是如果我们变换模型的样式(比如说采用更高阶或低阶或是指数或是对数的模型),总的来说,其解是无限的。

如果上述例子还不够有说服力的话,请看下面的例子:



这是一个回归的例子,即根据已有的数据点得出合理的模型,并预测新数据点的问题。由上图看出,我们可以使用sin函数完美拟合所有的已知点,但是,得出的模型却和真实函数大相径庭,预测出来的结果也肯定是有问题的。

那么,既然存在着多种可能的解释,我们如何来确保,所选用的模型一定是正确的呢?很遗憾,不存在一定的答案,除非模型是已知的,但如果是这样的话,有何必需要预测呢?

两个可能的努力方向,一是提高样本数量,这是显而易见的,可供训练的数量越多,模型一定是越可靠。另一点是降低模型的复杂度(VC维),这一点或许比较难以理解,但是我们可以这样去思考,越是复杂的模型或者分类器,输入的变化引起输出的波动也就越大。

下面再来细谈一下VC维。考虑平面内的N个点,需要进行简单的“是或否”的分类,总共会有2的N次方种划分方式。对于任何一种分类模型来说,其N的最大值就是该模型的VC维。例如对于直线来说,其VC维等于3,可以如下证明:假设平面内有四个点,而直线无法将处于对角的点两两分开。

接下来谈谈SVM,通常来说,它采用直线模型将数据分类,并且只有处于分界线附近的支撑向量才会对最后的分类结果又贡献,因此特别适合于处理高维向量分类问题(比如说文本分类等等)。



但是,现实生活中,许多复杂的问题并不是线性可分的。为了解决这类问题,SVM引入了核函数(kernal)的理念,将输入集映射到更高维度的另一个空间。在原始空间不可分的问题,总会存在另一个空间其实线性可分的,如图所示:



此外,在SVM的学习过程中,会遇到惩罚因子这个参数,通常是用来处理噪声问题的。现实的数据当中,往往会存在少量的噪声问题,我们与其寻找一个相当复杂的kernal,不如在训练过程中允许一定的误差,这样往往会简化问题的处理。

最后,这里给出一个使用OPENCV-SVM实现平面点预测的例子:



其中白色圈圈是支撑向量,十字点为训练数据,着色区域为训练器计算出来的区域。
  • 大小: 39.2 KB
  • 大小: 35.4 KB
  • 大小: 31.8 KB
  • 大小: 58.1 KB
8
1
分享到:
评论
2 楼 grunt1223 2011-04-14  
谢谢你的回复
恩,的确,sin函数是一个较为极端的例子
我的观点是:
1、是否覆盖到拐点,目前也没有好的方法,只能提高采样数目
2、在采样数目确定的情况下,选择VC维度小的模型,有利于降低风险;sin函数的那个例子,想说明的是,也许我们用很复杂的模型完美拟合出实验数据,但在真实运作时往往很糟糕
1 楼 ppgunjack 2011-04-14  
sin函数如果提供了极值拐点采样则不会出现混淆
我觉得关键不在采样数目,而在曲率变化处是否被采样点覆盖,当然采样数目的提高自然会提高这个的概率
了解模型大致情况应该是必要的,如果没覆盖到拐点情况,即使最简单的分段线性函数也不可能单凭数目获得准确拟合

相关推荐

Global site tag (gtag.js) - Google Analytics