从错误中学习,往往能够发现新的东西。
例如,青霉素就是这样被发现的;
笔者上一篇文章里,因为通过聚类算法尝试对“鸢尾花”的样本进行分类
(点击阅读)
,在分错的样本中,发现鸢尾花的样本有可能存在一些变异的问题,也引起了部分的数据分析爱好者的关注。
这一次笔者的写作灵感则完全来源于在测试环境中试算SVR(支持向量回归)算法的报错。
一般来说,出现算法报错,是根据报错内容,把根因找到排除掉就行了。
但我却对造成这次报错的原因感到好奇,深入研究了一下,反而加深了对于支持向量机(回归)的理解。
一切要从几天前的一次对SVR的试算说起。
当时我们正在试算SVR作为一种融合算法来整合预测值,为了方便说明,我更换了一下当时的数据,让读者容易理解。
上面的数据,大家一眼就能发现一个问题,就是所有的y值都是2。
说实话,也正是因为这个原因,算法报错了。报错的内容是“找不到支持向量”!
在后面我发散的研究中,使用SVM进行分类也这样处理时,报错的内容是“error in index [[j]] subscribe out of bounds ”,后来查询了下其他论坛的研究,发现还是这个原因所引起的。
为什么说用SVR或者SVM的过程中,样本的y值或者标签值为2(或者为一个常数)的话,算法会执行不下去呢?
其实这是有直观的逻辑和数学的解释来支撑的。
我们先来看分类算法,也就是SVM。
之所以这么写,是因为大家对分类比较熟悉,对回归反而没那么熟悉。机器学习里面的很多教材或者帖子,都是在讲SVM时首先介绍分类问题。
首先我们用定性直观的方式去理解为什么这组数据会让算法报错。
分类的本意,就是要将目标对象区别开来,既然是要区别,那么至少要有2个类别。
比方说0-1,比方说黑-白,比方说高-矮……
但是从上表的样本数据来看,因为y=一个常数,就相当于只有一个类别。
这样一来就尴尬了,
你要让我去学会分辨0-1、高-矮、黑-白,但是却只告诉我啥是、高、黑,却不告诉我另外一种对立的东西长啥样,你让我怎么分辩?
更有意思的是,我曾经在一个讨论人工智能的群里展开了一次类似讨论,
讨论的话题是“如果只训练苹果的图片,问人工智能能否识用来别出海棠果?”
苹果和海棠长的是很像的,如下图
上图的海棠果,我没想到群里面居然很多人没见过,
我刚贴出这2种水果,他们都懵了!
但凡没见过海棠果的人,纷纷惊呼:这海棠不就是苹果吗?
而以前见过海棠果的人,反而淡定了一会儿才说,确实不好分辨
所以说嘛,人的智能都会有如此的现象,而模仿人的思考所发明的机器学习或人工智能也必然会出现这种现象。
所以,从直观的逻辑上看,算法对这种数据处理不报错,就是天理不容。
刚才说完了分类,那么对于回归问题,该如何直观的理解呢?
其实也不难,
SVR回归的本意,统计意义上是想找到一个线性规律,
在这个规律下,即随着自变量的变化,因变量会如何线性变化。
但是看上面的表你会发现,无论自变量x1和x2怎么变化,因变量y就是不受影响。
因为y是一个常数。
也即是说,自变量和因变量之间其实没有相关性。
没有相关性就是没有规律呗,所以算法要报错也就自然了。
接下来,我们从数学的角度去看为什么算法会报错
对于分类而言,我们是希望找到一个超平面,能够将样本线性按照类别进行切割。
而对于一个三维的样本来说,已知x1和x2(暂且理解为长、宽),和它们的y(暂且理解为高度),要找到一个超平面将他们进行分类切割。
而切割的依据,就在于这些不同类别的样本有不同的y,也就是呈现出不同的高度。
如下图
大家看,因为蓝球和红球之间存在着高度差,这样才有可能通过一个超平面穿插进去,从而将其进行分类。
但现实的情况是这样,蓝球和红球的高度是一样的,而且要命的是红球的颜色变了,都变成了蓝色(y是常数),这让超平面怎么分呢?
或许读者看上面的图还有些不习惯,因为CSDN或者大部分的机器学习或者统计学习的教材案例,它们的图长得是一个平面的样子。然后再在平面上找线性分割边界。
那好,我们也就按照平面图形的样子,做一个例子,如下
在上面的图上,我们看到了很熟悉的教科书式的图片案例。
不过我们也看到,在上图上因为只有一个分类,假设y=1,却看不到另一个分类,那么这样的话如何去找一个边界wx+b=0?
因为没有另一个分类,这样一来也就无所谓的分类边界了。
我们再严格一些,通过SVM的数学表达式来分析
还是按照经典的例子,假定有如下分类,其中一类是y=1,
通过拉格朗日乘子,我们将目标函数和约束条件放在同一个式子中
由于凸函数的求解最值往往通过偏导数,上式经过推导得到
上面的式子中,有个地方需要注意的是w=0,b有无穷多个解,说明只要是平行于样本本身的平面,包括样本本身,就是一个符合要求的超平面。这样的超平面由于不唯一,因此也就无解。
所以算法也会报错。
说完分类的SVM场景下算法报错的数学理解,那么回归的场景SVR又是咋分析呢?
其实也不难
下图是笔者摘录自网上SVM和SVR的区别,
可以看出SVR在回归场景上,类别只有一个,所寻求的超平面是尽可能的将所有样本点都囊括其中,是的所有样本点距离超平面的“总距离”最小。
它的拉格朗日函数的表达式就稍微复杂些
同样的,我们还是对L进行偏导数(w和b),结论和SVM还是比较类似
我们得到这样的结果
因此,在回归场景下,算法还是会报错。
--------------------------------------------------
领取专属 10元无门槛券
私享最新 技术干货