python 实现灰色预测模型GM(1,1)及新陈代谢GM(1,1)

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")
  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 36
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值