python灰色预测_Python/灰色预测 at master · parther/Python · GitHub

import numpy as np

import pandas as pd

path = u'数据源\\第3周\\data\\data1.csv'

f = open(path, encoding = 'utf-8')

d = pd.read_csv(f)

# d.describe().T.round(2)

# d.corr().round(2)

# Lasso变量选择,相当于筛选特征值

from sklearn.linear_model import LassoLars

model = LassoLars(alpha=0.1) # alpha 代表惩罚项所占的大小

model.fit(d.iloc[:,0:13],d['y'])

pd.DataFrame(model.coef_) #各个特征的系数,也就是权重

# 灰色预测模型函数,适合短期预测

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

# 构建新行

d.index = range(1994, 2014)

d.loc[2014] = None

d.loc[2015] = None

d2 = d.copy()

# 运用灰色预测模型

l = ['x2', 'x3', 'x5', 'x8','x10','x12']

for i in l:

f = GM11(d2[i][list(range(1994, 2014))].as_matrix())[0]

d2[i][2014] = f(len(d2)-1) #2014年预测结果

d2[i][2015] = f(len(d2)) #2015年预测结果

d2[i] = d2[i].round(2) #保留两位小数

out_f = u'数据源\\第3周\\data\\data1_GM11_2.csv'

d2[l+['y']].to_csv(out_f) #结果输出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值