今天给大家带来深度学习框架keras的实战项目,用于基本的企业数据分析,预测企业净利润情况,并利用灰色预测函数GM11进行预测模型。我们拿到企业数据,这里参数抽象成x1-x9,y表示净利润,数据如下:
下面我们开始编写代码进行分析,首先我们引入库:
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers.core import Dense, Activation
import matplotlib.pylab as plt # 绘制图像库
编写GM11灰色预测函数, 灰色预测函数是通过少量的、不完全的信息,建立数学模型并做出预测的一种预测方法。它是基于客观事物的过去和现在的发展规律,利用科学的方法对未来的发展趋势和状况进行描述和分析,灰色预测函数如下:
def GM11(x0): #自定义灰色预测函数
import numpy as np
x1 = x0.cumsum() #1-AGO序列
z1 = (x1[:len(x1)-1] + x1[1:])/2.0
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、首项、方差比、小残差概率
读取数据:
data = pd.read_csv('data.csv') #读取数据
data.index = range(2000,2020) # 标注索引信息年份
数据操作,预测2020-2022这三年的企业各参数的预测值
data.loc[2020] = None
data.loc[2021] = None
data.loc[2022] = None
l = ['x1', 'x2', 'x3', 'x4', 'x5', 'x7']
l1 = ['x3','x5','x7']
for i in l1:
f,_,_,_,C,_ = GM11(data[i].loc[range(2000,2020)].values)
print("%s后验差比值:%0.4f"%(i,C)) #后验差比值c,即:真实误差的方差同原始数据方差的比值。
data[i].loc[2020] = f(len(data)-2) #2014年预测结果
data[i].loc[2021] = f(len(data)-1) #2015年预测结果
data[i].loc[2022] = f(len(data)) # 2016年预测结果
data[i] = data[i].round(2) #保留两位小数
data[l1+['y']].to_csv('GM11.csv') #结果输出
生成的数据并读取:
data = pd.read_csv('GM11.csv',index_col = 0) #读取数据
feature = ['x3','x5','x7'] # 提取特征
取2020年前的数据进行建模,数据标准化 后进行训练
data_train = data.loc[range(2000,2020)] #取2014年前的数据建模
print(data_train)
data_mean = data_train.mean()
data_std = data_train.std()
data_train = (data_train - data_mean)/data_std #数据标准化 后进行训练
x_train = data_train[feature].values #特征数据
y_train = data_train['y'].values #标签数据
建立keras神经网络
model = Sequential() #建立模型
model.add(Dense(12,activation='relu',input_dim=3))
model.add(Dense(24,activation='relu')) # 隐藏层
model.add(Dense(1)) # 输出层
model.compile(loss='mean_squared_error', optimizer='adam') #编译模型
model.fit(x_train, y_train, epochs = 10000, batch_size = 16,verbose=2) #训练模型,训练1000次
model.save_weights('net.model') #保存模型参数
训练过程:
Epoch 1/10000
2/2 - 0s - loss: 0.6044 - 421ms/epoch - 210ms/step
Epoch 2/10000
2/2 - 0s - loss: 0.5691 - 996us/epoch - 498us/step
Epoch 3/10000
2/2 - 0s - loss: 0.5365 - 2ms/epoch - 975us/step
Epoch 4/10000
2/2 - 0s - loss: 0.5037 - 3ms/epoch - 1ms/step
Epoch 5/10000
2/2 - 0s - loss: 0.4765 - 2ms/epoch - 997us/step
Epoch 6/10000
2/2 - 0s - loss: 0.4492 - 2ms/epoch - 1ms/step
Epoch 7/10000
2/2 - 0s - loss: 0.4218 - 2ms/epoch - 997us/step
Epoch 8/10000
2/2 - 0s - loss: 0.3960 - 2ms/epoch - 998us/step
Epoch 9/10000
2/2 - 0s - loss: 0.3678 - 993us/epoch - 496us/step
Epoch 10/10000
2/2 - 0s - loss: 0.3436 - 2ms/epoch - 980us/step
模型预测与保存
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_csv('result.csv')
预测结果绘图:
p = pd.read_csv('result.csv')
p = p[['y','y_pred']].copy()
p.index=range(2000,2023)
p.plot(style=['b-o','r-*'],xticks=p.index,figsize=(15,5))
plt.xlabel("Year")
plt.show()
可以看出2000-2019预测值基本与真实值吻合,2020-2022预测结果呈现上升趋势。
具体数据文件可以私信我,我会发给读者,后续更多深度学习实战内容,敬请关注!
往期作品:
深度学习实战项目
1.深度学习实战1-(keras框架)企业数据分析与预测
2.深度学习实战2-(keras框架)企业信用评级与预测
3.深度学习实战3-文本卷积神经网络(TextCNN)新闻文本分类
4.深度学习实战4-卷积神经网络(DenseNet)数学图形识别+题目模式识别
5.深度学习实战5-卷积神经网络(CNN)中文OCR识别项目
6.深度学习实战6-卷积神经网络(Pytorch)+聚类分析实现空气质量与天气预测
7.深度学习实战7-电商产品评论的情感分析
8.深度学习实战8-生活照片转化漫画照片应用
9.深度学习实战9-文本生成图像-本地电脑实现text2img
10.深度学习实战10-数学公式识别-将图片转换为Latex(img2Latex)
11.深度学习实战11(进阶版)-BERT模型的微调应用-文本分类案例
12.深度学习实战12(进阶版)-利用Dewarp实现文本扭曲矫正
13.深度学习实战13(进阶版)-文本纠错功能,经常写错别字的小伙伴的福星
14.深度学习实战14(进阶版)-手写文字OCR识别,手写笔记也可以识别了
15.深度学习实战15(进阶版)-让机器进行阅读理解+你可以变成出题者提问
16.深度学习实战16(进阶版)-虚拟截图识别文字-可以做纸质合同和表格识别
17.深度学习实战17(进阶版)-智能辅助编辑平台系统的搭建与开发案例
18.深度学习实战18(进阶版)-NLP的15项任务大融合系统,可实现市面上你能想到的NLP任务
19.深度学习实战19(进阶版)-ChatGPT的本地实现部署测试,自己的平台就可以实现ChatGPT
...(待更新)