系列文章目录
财政收入预测分析(灰色预测)
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
财政收入预测分析
- 系列文章目录
- 前言
- 一、步骤
- 1.数据探索和预处理
- 1.1数据探索
- 1.2数据预处理
- 2.自定义灰色预测模型
- 3.创建2014和2015年数据并对其x值进行预测实验
- 4.预测2014年和2015年数据x值
- 5.构建回归预测模型并预测y值
- 6.结果可视化
- 总结
前言
本文对财政收入进行预测分析,采用灰色预测
提示:以下是本篇文章正文内容,下面案例可供参考
一、步骤
1.数据探索和预处理
1.1数据探索
复制代码
1
2
3
4
5
6
7
8
9#导入所有需要的库 import numpy as np import pandas as pd from sklearn.linear_model import Lasso from sklearn.svm import LinearSVR #查看数据 data=pd.read_csv('D:/jupter notebook tmp/data.csv') data.head()
1.2数据预处理
复制代码
1
2
3
4
5
6
7
8
9#计算相关系数 per=data.corr() lasso=Lasso(1000)# 构建正则回归降维模型,参数可以从较大的开始尝试 lasso.fit(data.iloc[:,:13],data['y'])#对前13列进行正则降维 lasso.coef_#查看系数· #筛选特征的对应的索引(系数不为0) mask=lasso.coef_!=0 new_reg_data=data.iloc[:,:13].loc[:,mask]
2.自定义灰色预测模型
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#自定义灰色预测模型 def GM21(x0): #print('x0',x0) x1=x0.cumsum()#对x0进行进行一次累加所得 #print('x1',x1) z1=(x1[:len(x1)-1]+x1[1:])/2.0#z1为x1的紧邻均值生成的序列 z1=z1.reshape(len(z1),1)#将z1转换为矩阵 #print('z1',z1) B=np.append(-z1,np.ones_like(z1),axis=1)#合并z1和形状相同的1矩阵 #print('B',B) Yn=x0[1:].reshape(len(x0)-1,1) #print('Yn',Yn) [[a],[b]]=np.dot(np.dot(np.linalg.inv(np.dot(B.T,B)),B.T),Yn) #np.dot矩阵点积,np.dot([1,2,3][4,,5,6])=1*4+2*5+3*6 #np.linalg.inv 矩阵求逆 f=lambda k:(x0[0]-b/a)*np.exp(-a*(k-1))-(x0[0]-b/a)*np.exp(-a*(k-2)) return f,a,b,x0[0]
3.创建2014和2015年数据并对其x值进行预测实验
复制代码
1
2
3
4
5
6
7
8new_reg_data.index=range(1994,2014) new_reg_data.loc[2014]=None#创建2014年数据 new_reg_data.loc[2015]=None#创建2015年数据 #实验 f=GM21(new_reg_data.loc[range(1994,2014),'x1'].as_matrix())[0] #as_matrix()转换为矩阵,因为我们定义的灰色预测函数需要输入矩阵类型 f(len(new_reg_data)-1)#预测2014年x1的值
4.预测2014年和2015年数据x值
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13col=['x1', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x13'] for i in col: f=GM21(new_reg_data.loc[range(1994,2014),i].as_matrix())[0] new_reg_data.loc[2014,i]=f(len(new_reg_data)-1)#预测2014 new_reg_data.loc[2015,i]=f(len(new_reg_data))#预测2015 new_reg_data[i] = new_reg_data[i].round(2) # 保留两位小数 new_reg_data #添加2014年和2015年y值 y = list(data['y'].values) y.extend([np.nan,np.nan]) new_reg_data['y']=y
5.构建回归预测模型并预测y值
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14data_tr=new_reg_data.loc[range(1994,2014)]#提取1994年到2013年数据作为训练集进行训练 data_mean=data_tr.mean() data_std=data_tr.std() data_tr=(data_tr-data_mean)/data_std#数据标准化 X_tr=data_tr[col] y_tr=data_tr['y'] svr = LinearSVR()#模型构建 svr.fit(X_tr,y_tr)#模型训练 # 标准化处理 x = (new_reg_data[col]-data_mean[col])/data_std[col] # 预测值还原 y_pre = svr.predict(x) * data_std['y'] + data_mean['y'] new_reg_data["y_pre"] = y_pre
6.结果可视化
复制代码
1
2
3
4
5
6
7import matplotlib.pyplot as plt plt.figure(figsize=(20,8),dpi=80) plt.plot(new_reg_data["y"],"b-o") plt.plot(new_reg_data["y_pre"],"r-*") plt.legend(["y","y_pre"]) plt.show()
总结
本文仅作者的观点,若有异议,欢迎评论
最后
以上就是贪玩小土豆最近收集整理的关于2021-04-11系列文章目录前言一、步骤总结的全部内容,更多相关2021-04-11系列文章目录前言一、步骤总结内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复