import pandas as pd
import numpy as np
from GM11 import GM11 # 引入自己编写的灰色预测函数
data = pd.read_csv('D:\软件\python\《Python数据分析与挖掘实战(张良均等)》中文PDF+源代码\'
'《Python数据分析与挖掘实战(张良均等)》中文PDF+源代码\数据及代码\chapter13\test\data\data1.csv',engine='python')
data.index = range(1994,2014)
data
data.loc[2014] = None
data.loc[2015] = None
h = ['x1', 'x2', 'x3', 'x4', 'x5', 'x7']
P = []
C = []
for i in h:
gm = GM11(data[i][:-2].values)[0] # 利用返回的灰色预测函数,仅和对对应期数及位置有关
f = gm([0] ) ##获得灰色预测函数
P = gm[-1] # 获得小残差概率
C = gm[-2] # 获得后验比差值
data[i][2014] = f(len(data) - 1)
data[i][2015] = f(len(data))
data[i] = data[i].round(2)
if (C < 0.35 and P > 0.95): # 评测后验差判别
print( '对于模型%s,该模型精度为---好' % i)
elif (C < 0.5 and P > 0.8):
print('对于模型%s,该模型精度为---合格' % i)
elif (C < 0.65 and P > 0.7):
print('对于模型%s,该模型精度为---勉强合格' % i)
else:
print('对于模型%s,该模型精度为---不合格' % i)
data[h + ['y']].to_excel('D:\软件\python\《Python数据分析与挖掘实战(张良均等)》中文PDF+源代码\'
'《Python数据分析与挖掘实战(张良均等)》中文PDF+源代码\数据及代码\chapter13\test\data\2_1_2_1greyPredict(最新5).xlsx')
补充:
gm为自定义函数:
def GM11(x0): #自定义灰色预测函数
import numpy as np
x1 = x0.cumsum() #1-AGO序列
z1 = (x1[:len(x1)-1] + x1[1:])/2.0 #紧邻均值(MEAN)生成序列
z1 = z1.reshape((len(z1),1))
B = np.append(-z1, np.ones_like(z1), axis = 1)
Yn = x0[1:].reshape((len(x0)-1, 1))
[[a],[b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Yn) #计算参数
f = lambda k: (x0[0]-b/a)*np.exp(-a*(k-1))-(x0[0]-b/a)*np.exp(-a*(k-2)) #还原值
delta = np.abs(x0 - np.array([f(i) for i in range(1,len(x0)+1)]))
C = delta.std()/x0.std()
P = 1.0*(np.abs(delta - delta.mean()) < 0.6745*x0.std()).sum()/len(x0)
return f, a, b, x0[0], C, P #返回灰色预测函数、a、b、首项、方差比、小残差概率