介绍
灰色预测模型是对少量数据进行拟合确定方程的一种模型,通过累加的方式减少数据中的不确定因素。
记原始序列为 x ( 0 ) = ( x ( 0 ) ( 1 ) , x ( 0 ) ( 2 ) , . . . , x ( 0 ) ( n ) ) x^{(0)}=(x^{(0)}(1),x^{(0)}(2),...,x^{(0)}(n)) x(0)=(x(0)(1),x(0)(2),...,x(0)(n)),一次累加生成序列为 x ( 1 ) = ( x ( 0 ) ( 1 ) , x ( 0 ) ( 1 ) + x ( 0 ) ( 2 ) , . . . , ∑ i = 1 n x ( 0 ) ( i ) ) x^{(1)}=(x^{(0)}(1),x^{(0)}(1)+x^{(0)}(2),...,\sum_{i=1}^{n}x^{(0)}(i)) x(1)=(x(0)(1),x(0)(1)+x(0)(2),...,∑i=1nx(0)(i)),则可以视原始序列为一次累加生成序列对i的微分序列。
设微分方程 d x d i + a x = b \frac{dx}{di}+ax=b didx+ax=b,即 x ( 0 ) + a x ( 1 ) = b x^{(0)}+ax^{(1)}=b x(0)+ax(1)=b,可以利用最小二乘法估计a和b的数值。
解微分方程得 x ( 1 ) = ( x 0 ( 1 ) − b a ) e − a i + b a x^{(1)}=(x^{(1)}_0-\frac{b}{a})e^{-ai}+\frac{b}{a} x(1)=(x0(1)−ab)e−ai+ab,再将其每一位减去前一位还原为 x ( 0 ) = ( x 0 ( 1 ) − b a ) ( e − a i − e − a ( i − 1 ) ) x^{(0)}=(x^{(1)}_0-\frac{b}{a})(e^{-ai}-e^{-a(i-1)}) x(0)=(x0(1)−ab)(e−ai−e−a(i−1)),既可以得到原始序列关于i的拟合方程。
实例
下表是2000-2006年宁波市房地产价格的统计数据,试拟合模型。
年份 | 2000 | 2001 | 2002 | 2003 | 2004 | 2005 | 2006 |
---|---|---|---|---|---|---|---|
宁波市 | 105.5 | 107.2 | 116.4 | 116.6 | 113.9 | 106.5 | 102.2 |
设2000年为第1年,python代码如下:
import numpy as np
from scipy import optimize
from matplotlib import pyplot
lis=np.array([105.5,107.2,116.4,116.6,113.9,106.5,102.2])
lis1=lis.cumsum()
z1 = np.polyfit(lis1, lis, 1)
a=-z1[0]
b=z1[1]
print(a,b)
i=np.arange(1,8)
x1=(lis1[0]-b/a)*(np.exp(-a*i)-np.exp(-a*(i-1)))
pyplot.plot(i,x1)
pyplot.plot(i,lis,".")
pyplot.show()
计算出a值为0.004,b值为111.54,其拟合结果是一条几乎将散点一分为二的直线