php是最好的语言

python3实现灰色预测

import pandas as pd
import numpy as np
import sys
class GM():
    def do(self):
        result = pd.DataFrame([3831732.0, 3913824.0, 3928907.0, 4282130.0, 4453911.0, 4548852.0, 4962579.0, 5029338.0, 5070216.0, 5210706.0, 5407087.0, 5744550.0, 5994973.0, 6236312.0, 6529045.0, 6791495.0, 7110695.0, 7431755.0, 7512997.0, 7599295.0])

        data = result
        data.index = range(1,len(result) + 1)
        data.loc[21] = None
        data.loc[22] = None

        f = self.GM11(data[0][list(range(1,len(result) - 1))].as_matrix())[0]
        
        data[0][21] = f(len(data) - 1)
        data[0][22] = f(len(data))
        print(data)

    def GM11(self,x0): #自定义灰色预测函数

          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、首项、方差比、小残差概率

if __name__=='__main__':
    gm = GM()
    gm.do()


作者:xTao 分类:LNMP 浏览:2391 评论:0