python灰色预测n年财政收入_财政收入影响因素分析及预测模型——数据可视化部分及灰色预测、...

财政收入影响因素分析及预测模型——数据可视化部分及灰色预测、

财政收入影响因素分析及预测模型——数据可视化部分及灰色预测、神经网络部分

参考博客:https://www.baidu.com/link?url=4MILI0qDOzidoShN_T6EJDdqoenGahXHn6dG3F3IqCgLAEg7o3Z3psR0jkHf5GcSGQ4No0ILEL2uHnKqvfcj6imTK3VmAUiOFX4a7SWrgqu&wd=&eqid=e3abd04100018371000000065ceb5266

运行环境:pycharm+python3.6

一、可视化代码部分:

#-*- coding: utf-8 -*-

import pandas as pd

from matplotlib import pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签

plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

inputfile = '../data/data1.csv' #输入的数据文件

data = pd.read_csv(inputfile) #读取数据

dataNM=(data-data.min())/(data.max()-data.min())

dataNM.plot()

plt.show()

结果:

不归一化的处理代码:

#-*- coding: utf-8 -*-

import pandas as pd

from matplotlib import pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签

plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

inputfile = r'D:/2.csv' #输入的数据文件

data = pd.read_csv(inputfile) #读取数据

# 画图

data.plot()

处理结果:

这里由于是扫参形式,频率点会出现往复,如蓝色线所示,先由小增大,再由小增大。在这个过程中,其他变量也在改变,整体来看,这个图比较的混乱,看不出明显的线性相关关系。

若归一化,结果如下:

二、灰色预测部分

#-*- coding: utf-8 -*-

import numpy as np

import pandas as pd

from GM11 import GM11 #引入自己编写的灰色预测函数

inputfile = '../data/data1.csv' #输入的数据文件

outputfile = '../tmp/data1_GM11.xls' #灰色预测后保存的路径

data = pd.read_csv(inputfile) #读取数据

data.index = range(1994, 2014)

data.loc[2014] = None

data.loc[2015] = None

l = ['x1', 'x2', 'x3', 'x4', 'x5', 'x7']

# a = list(range(1994, 2014))

# print(a)

for i in l:

f = GM11(data[i][list(range(1994, 2014))].values)[0]

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

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

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

data[l+['y']].to_excel(outputfile) #结果输出

这里主要修改了两个地方、同一行,即for循环的第一句部分。

灰色预测结果如下:

三、神经网络部分

#-*- coding: utf-8 -*-

import pandas as pd

inputfile = '../tmp/data1_GM11.xls' #灰色预测后保存的路径

outputfile = '../data/revenue.xls' #神经网络预测后保存的结果

modelfile = '../tmp/1-net.model' #模型保存路径

data = pd.read_excel(inputfile) #读取数据

feature = ['x1', 'x2', 'x3', 'x4', 'x5', 'x7'] #特征所在列

data_train = data.loc[range(1994,2014)].copy() #取2014年前的数据建模

data_mean = data_train.mean()

data_std = data_train.std()

data_train = (data_train - data_mean)/data_std #数据标准化

# x_train = data_train[feature].as_matrix() #特征数据

x_train = data_train[feature].values

# y_train = data_train['y'].as_matrix() #标签数据

y_train = data_train['y'].values

from keras.models import Sequential

from keras.layers.core import Dense, Activation

model = Sequential() #建立模型

# model.add(Dense(6, 12))

model.add(Dense(input_dim=6, output_dim=12))

model.add(Activation('relu')) #用relu函数作为激活函数,能够大幅提供准确度

# model.add(Dense(12, 1))

model.add(Dense(input_dim=12, output_dim=1))

model.compile(loss='mean_squared_error', optimizer='adam') #编译模型

model.fit(x_train, y_train, nb_epoch = 10000, batch_size = 16) #训练模型,学习一万次

model.save_weights(modelfile) #保存模型参数

#预测,并还原结果。

# x = ((data[feature] - data_mean[feature])/data_std[feature]).as_matrix()

x = ((data[feature] - data_mean[feature])/data_std[feature]).values

data[u'y_pred'] = model.predict(x) * data_std['y'] + data_mean['y']

data.to_excel(outputfile)

import matplotlib.pyplot as plt #画出预测结果图

p = data[['y','y_pred']].plot(subplots = True, style=['b-o','r-*'])

plt.show()

这里,修改主要为两种,多处。1、model.add(Dense(input_dim=6, output_dim=12))  2、全部改为.values 。这样运行就不会报错了。

注意:这里有一点需要说明,在前面用adaptive-lasso方法(尽管说3.6版本中sklearn中已经取消这个函数的实现,用lasso方法的话,选出来的有12个特征),这里不管选出来的有几个特征,都只是辅助后面神经网络的构建的,具体后面神经网络构建时选取任意几个作为特征,都能得到输出,比如,这里的代码,选择了6个特征,但若没有用adaptive-lasso方法,只能选出12个特征。

subplots = False即可将y与y_pred画在同一图上。

运行结果如下(多次运行,每次结果会稍有不同):

财政收入影响因素分析及预测模型——数据可视化部分及灰色预测、相关教程

你可能感兴趣的:(python灰色预测n年财政收入_财政收入影响因素分析及预测模型——数据可视化部分及灰色预测、...)