我是靠谱客的博主 贪玩小土豆,最近开发中收集的这篇文章主要介绍2021-04-11系列文章目录前言一、步骤总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

系列文章目录

财政收入预测分析(灰色预测)


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

财政收入预测分析

  • 系列文章目录
  • 前言
  • 一、步骤
    • 1.数据探索和预处理
      • 1.1数据探索
      • 1.2数据预处理
    • 2.自定义灰色预测模型
    • 3.创建2014和2015年数据并对其x值进行预测实验
    • 4.预测2014年和2015年数据x值
    • 5.构建回归预测模型并预测y值
    • 6.结果可视化
  • 总结


前言

本文对财政收入进行预测分析,采用灰色预测


提示:以下是本篇文章正文内容,下面案例可供参考

一、步骤

1.数据探索和预处理

1.1数据探索

#导入所有需要的库
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数据预处理

#计算相关系数
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.自定义灰色预测模型

#自定义灰色预测模型
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值进行预测实验

new_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值

col=['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值

data_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.结果可视化

import 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系列文章目录前言一、步骤总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(89)

评论列表共有 0 条评论

立即
投稿
返回
顶部