查看原文
其他

样条回归(之一)——为什么要用样条回归

Editor's Note

从直线回归到多项式回归,再到分段回归,再到样条回归,最后是限制性立方样条回归! 两篇文章带你彻底搞清楚非线性拟合。 这是第1篇

The following article is from 小白学统计 Author 小白学统计

要讲好一个完整故事,就得先从一开始讲起,比如我们经常用的开场白就是“很久很久以前,有一个……”。有时甚至一开始出场的并不是主人公,这也是必须的。比如《射雕英雄传》先出场的并不是郭靖,《白发魔女传》先出场的也不是白发魔女。
同样,要了解一个统计学方法,往往也得这样。所以,虽然我们这个题目是样条回归,但想要了解样条回归,却必须从其它的方法开始讲起。我们要先行直线回归开始讲起。
(1)直线回归
直线回归大家一般都知道是干什么的,用来描述两个变量的直线关系。比如下图,我们用一条直线描述身高和体重的关系。

直线回归很容易理解,也很容易解释,通常就是说,自变量x每增加1个单位,因变量y变化有多大。

如果现实中所有的现象都可以用直线回归,那就完美了。可惜的是,直线回归能用来描述的实际问题太少了,现实中绝大多数的关系都不是直线关系。这种情况下,就必须用其他的回归来拟合了。

(2)从直线回归到多项式回归

直线回归比较常用的替代方法是多项式回归,事实上,直线回归也可以算是多项式回归的特例,也就是一次项。不过一般我们所说的“多”,都是指2个以上,所以一般把直线回归和多项式回归分开。

所谓的“项”,也就是我们在初中学到的次方,比如二次方、三次方。所以,直线回归,我们如果用公式来表示,那就是:

y=a+bx

二次项回归,用公式表示,就是在直线回归的基础上,增加一个二次项:

y=a+bx+bx^2(x^2表示x的平方)

如果用图形来表示,二次项回归,就是曲线拐了一个弯,就像下面这个图:

对于这种非直线的点,你如果强行用直线回归,结果会让你很失望(当然,实际数据往往没有这么明显,很多时候也许你并不经意间就把非线性的关系用直线回归给做了,甚至可能也发表文章了,更甚至审稿人也没看出来)。

比如上面这个数据,如果你用直线回归,你会发现结果非常不靠谱(下图中的绿色直线),根本无法体现x和y的真正关系。

多项式回归可以在一定程度上很好地解决非直线的问题。古龙曾说过,没有什么数据是不能用一个3次项来解决的,如果有,那就用4次项、5次项、6次项、……(原话可能说的是酒)。总之,只要你的项数足够多,一定能完美拟合数据。

(3)多项式存在的问题

然而,有一个问题就是,随着项数的增多,尽管可以对数据拟合越来越好,但随之而来的问题是过拟合。也就是说,在现在这个数据上拟合效果是很完美,然而一旦换个数据,很可能效果就很差。

比如下面这两个变量,time和y的关系,可以看出,从直线一直到6次项(更多的就不加了,否则图要看不清楚了),R2是逐渐增加的,分别是0.82, 0.95, 0.96, 0.97, 0.98, 0.99。

然而我们也看到,阶次很高的拟合,后面的变化特别大。这些数据真的可能会有这种走向趋势吗?看样子其实不像。然而就只针对这12个数据而言,6次项显然是最好。但是,如果数据一扩展,这就很难说了。

除了上面这个原因,多项式还有其它问题,最常见的一个就是共线性。很容易理解,你把一个变量x变成一个平方后,平方值和原始值肯定有关联,原始值越大,平方值也越大。也就是说,自变量x和它的平方、立方等是存在共线性的。

当然还有其它原因,多项式回归是针对所有数据的,这叫做全局性。也就是说,所有我用来拟合的数据,都符合多项式的规律。如二次项,那就是符合抛物线的类似形状。然而,如果有的数据可能在小于某个值之前,是直线关系,到了这个值之后,开始成了二次项关系。这时候就不叫全局性了,因为所有数据不能用一种关系来表示,这就叫局部性。这种数据,无论用直线和二次项,都没法很好地拟合所有数据。就像是你家的猫喜欢待在家里,不想出去,你家的狗总想出门。猫和狗如果非得作为一个总体,那就没法处理。那怎么办呢,很简单,把它们分开,狗带出去,猫留在家里。这也就是样条回归的基本思路,如果所有数据在某一点上有不同的变化趋势,怎么办,把数据分开,分别拟合。

(4)样条回归

我们可以先看一下下面这个数据:

看到后你会怎么想?有经验的人立马脑海中就会想出好几种解决方案,多项式绝对是其中之一。事实上,这个数据很明显是拐了2个弯,那可以考虑用3次项回归。

3次项回归的拟合效果是这样的:

可以看出,基本能反映出大概的趋势,但仍有不足。

如果我们换种思路,就可以考虑:这个就像是有3段数据,分别是横坐标1-15、16-30、31-45,可以想象,在每一段内,都是一个比较明显的直线关系,那就可以考虑用样条回归(当然这不是唯一方法)。

样条回归拟合的效果如下图:

就算不用R2等指标,也可以很明显看出,样条回归的拟合效果优于3次项回归。

样条回归,可以看做是一个逐段回归或分段回归,通俗点说,就是把数据分为几段,在每一段内分别拟合模型,每一段内可以拟合直线、二次项、三次项等,根据实际情况而定。

可能直观上有的人会觉得,分段,那不是跟多项式差不多。比如两段直线,不就跟二次项差不多?的确如此!然而就如上面这个数据,可以看出,尽管这个数据形式上很像三次项,而且三次项拟合效果确实也不差,然而从更好的角度来看,样条回归拟合效果更优。我们拟合模型的目的是尽量寻找相对最优的模型,有好的,肯定不用差的。

所以,最后总结一下,为什么要用样条回归?可能是因为你的数据没法用一条直线描述;也可能因为你的数据虽然看起来像多项式,但拟合也没那么好;也可能是因为你本身就是想了解在某个事件前后的变化;也可能是因为你发现数据在某个节点前后趋势发生了改变,等等。如果有上述这几点原因,你就可以考虑用样条回归。至于什么是样条回归,怎么做,那就留待后续慢慢讲来。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存