缺失,几乎是不可避免的。
只要做数据处理,不可避免的工作就是插值。而插值里面比较常用的方法之一就是拉格朗日插值法,这篇文章就跟大家讲讲拉格朗日插值的理论基础。
我们进行数据处理的理想,当然是希望数据非常的完备,啥玩意儿都有。但现实往往不尽如人意,数据经常会缺东少西的,那怎么办呢?
我们需要对一些不存在的数据进行一些插补。比如,我们分析某个餐馆在一段时间内的营收情况,但某一天收银系统出问题了,这天都是手工收款入账的,我们的系统里面就没有这一天的营收数据。那怎么办呢?我们就需要根据一定的办法把这天的营收数据给找补回来,那怎么找补呢?
常用的方法有:
插补方法 | 描述 |
---|---|
均值/中位数/众数 | 取已知值的平均数/中位数/众数进行插补 |
固定值 | 使用一个常量。好比缺考的考生全部算0分 |
最近邻插值 | 离缺失样本最近的那个完整点的值来插补 |
回归 | 建立一个回归模型,然后预测这个点上的缺失值 |
插值法 | 构建一种插值函数,比如拉格朗日插值、牛顿插值 |
上图表中的均值、中位数、众数、固定值什么的都比较好理解,看上去比较高大上的一个是回归方法,另一个就是插值法。
回归方法,我们后面另外起文讨论。插值法里面常用的就是拉格朗日插值、牛顿插值两类,我们重点看看拉格朗日插值法。
拉格朗日插值,是一种多项式插值,那多项式插值定理怎么一回事呢?
拉格朗日插值本质上是多项式插值的一种,而多项式插值是什么意思呢?这里有个定理叫多项式插值定理,说的是咋个一回事呢?
就是说假设我们已知有n个点,(x1,y1),(x2,y2),...,(xn,yn),很明显这是一组二维平面上的点。这定理告诉我们必然存在唯一的一个(n-1)次多项式,使得这n个点的x、y值带入这个(n-1)次的多项式都是成立的。
那么如果我们引入第n+1个点的话,这个点呢,我们只知道它的x值,不知道它的y值,这个时候我们就可以用上面那个n-1次的多项式来把这个点给算出来。这样,就完成了一次插值。
那么,具体的这个多项式是什么样子的呢?拉格朗日给出了这种方法。
对某个多项式函数,已知有给定的k + 1个取值点:
对应平面上k+1个点
假设任意两个不同的xj都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为:
插值函数
其中每个
为拉格朗日基本多项式(或称插值基函数),其表达式为:
插值基函数
上面这个拉格朗日基本多项式的有个很好的特点,只有当x=xj的时候它才等于1,否则等于0.
假设有某个二次多项式函数f(x),已知它在三个点上的取值为:f(4)=10,f(5)=5.25,f(6)=1。有一个点,我们只知道它的x值为18,要我们求这个点的y值,即f(18)=?
首先写出每个拉格朗日基本多项式:
然后应用拉格朗日插值法,就可以得到p的表达式p为函数f的插值函数:
此时代入数值18就可以求出所需之值:
需要注意的一点是,我们实际上要进行预处理的数据大多数情况下都是很长很长的一段。比如,我们要分析某个餐馆一年内的营收情况,我们会有365组数据,这里面可能会有一天的营收数据是不存在的,那么我们该怎样利用剩下的364组数据对缺失的这一天的数据进行插值呢?
实质上,我们直观、大胆地想象一下,这一天的营收情况可能只和前后几天的有点关联。所以,我们在使用拉格朗日插值函数的时候没有必要把k设置为365,我们只需要拿出这个缺省数据这一天的前后几天的数据来构建拉格朗日插值函数就行了。
换成数学语言来表述,我们所构建的拉格朗日插值多项式的最高次数k不宜太高,否则的话可能会引起较大的震荡,即所谓的龙格现象。
本篇文章介绍了拉格朗日插值的一般方法,那在Python中具体如何实现呢?前面已经有文章说过了。
参考资料:
拉格朗日插值法_百度百科baike.baidu.com
拉格朗日插值法(图文详解) - Angel_Kitty - 博客园www.cnblogs.com