python 实现灰色预测模型GM(1,1)及新陈代谢GM(1,1)
新陈代谢GM(1,1)预测
新陈代谢GM(1,1)也叫做等维灰数递补动态GM(1,1)。灰色预测模型GM(1,1)的简介就不再多叙述,其优点及缺点在其他博文中均有所体现(可参考:https://wenku.baidu.com/view/1eb04e05bf1e650e52ea551810a6f524ccbfcba6.html)。本文中主要是介绍新陈代谢GM(1,1)及其python实现。 新陈代谢GM(1,1)的特点如下:
step1 利用已知序列建GM(1,1)模型进行预测时,不用这个模型一直预测下去,而是只预测一个值,再将预测后的第一个值加入原始序,并将原始序列的第一个值删除,以致于更新原始序列;
step2 利用(1)得到的更新后的原始序列对其进行GM(1,1)预测;
step3 不断重复step1和step2,直至达到自己所需的要求。
新陈代谢GM(1,1)预测python实现(由于代码块长,GM(1,1)中的具体各函数就不上传了,也比较好写)
def newGM(new_x0):
'''
将所有的模型函数封装为一个函数,为新陈代谢GM调用
'''
a,x1,model_predict_applicability=_GM_model_a(new_x0)
predict_x1=_GM_model_predict_x1(new_x0,a)
predict_x0=_GM_model_predict_x0(predict_x1)
error_predict_x1_x1,error_predict_x0_x0=pre_x_minus_x(predict_x1,x1,predict_x0,new_x0)
s_x0,s_residual_preidct_x0,s_ratio,P_small_error,P_C=squre_x0(predict_x0,new_x0)
predict_length,predict_origin_x0=predict_new_x(a,new_x0,model_predict_applicability)
if predict_length==5 or predict_length==3:
new_x0.append(predict_origin_x0[len(x0)+1])
return new_x0,a,x1,model_predict_applicability,predict_x1,predict_x0,error_predict_x1_x1,error_predict_x0_x0,s_x0,s_residual_preidct_x0,s_ratio,P_small_error,P_C,predict_length,predict_origin_x0
调用newGM()函数
new_x0=x0
for i in range(5):
del new_x0[0]
if predict_length==4 or predict_length==8:
new_x0.append(predict_origin_x0[len(x0)+1])
new_x0,a,x1,model_predict_applicability,predict_x1,predict_x0,error_predict_x1_x1,error_predict_x0_x0,s_x0,s_residual_preidct_x0,s_ratio,P_small_error,P_C,predict_length,predict_origin_x0=newGM(new_x0)
print("循环次数为:",i)
print('a,x1,适用度 : ',a,x1,model_predict_applicability)
print("预测值 : ",predict_x0)
print("原始数据方差: ",s_x0)
print("残差方差 : ",s_residual_preidct_x0)
print("后验差比值C : ",s_ratio)
print("累加值残差 : ",error_predict_x1_x1)
print("原始数据残差: ",error_predict_x0_x0)
print("检验: ",s_x0,s_residual_preidct_x0,s_ratio,P_small_error,P_C)
print("预测值x: ",predict_length,predict_origin_x0)
print("new x0: ",new_x0)
print("循环结束",i)
print("\n")