序贯模型作回归预测
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: Jia ShiLin
'''
數據集是UCI庫中的讀入用pandas,CSV文件,原因1.包含空字段,2.數據集為歐洲國家通常習慣的逗號作為小數點
'''from keras.layers import Input
from keras.layers.core import Dense
from keras.models import Model
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import numpy as np
import os
import pandas as pdDATA_DIR = './data'
AIRQUALITY_FILE = os.path.join(DATA_DIR, 'AirQualityUCI.csv')
aqdf = pd.read_csv(AIRQUALITY_FILE, sep=';', decimal=',', header=0)# 移除前面和后面倆列
del aqdf['Date']
del aqdf['Time']
del aqdf['Unnamed: 15']
del aqdf['Unnamed: 16']# 使用平均值填充空缺值,并將數據導出為矩陣
aqdf = aqdf.fillna(aqdf.mean())
Xorig = aqdf.as_matrix()
# Xorig = aqdf.values# 標準化
scaler = StandardScaler()
Xscaler = scaler.fit_transform(Xorig)
# 保存均值和標準差,以用于預測新數據
Xmeans = scaler.mean_
Xstds = scaler.scale_# 數據集,
x = np.delete(Xscaler, 3, axis=1)
y = Xscaler[:, 3] # 目標為第四列train_size = int(0.7 * X.shape[0]) # 劃分數據集的長度
xtrain, xtest, ytrain, ytest = x[0:train_size], x[train_size:], y[:train_size], y[train_size:]# layers,輸入是一個12特征的向量,輸出是伸縮值預測,hiddenlayers有8個神經元
# 初始化機制glorot uniform來初始化全連接權重矩陣,
readings = Input(shape=(12,))
x = Dense(8, activation='relu',kernel_initializer = 'glorot_uniform')(readings)
benzene = Dense(1,kernel_initializer='glorot_uniform')(x)
model =Model(inpus =[readings],outputs =[benzene])
model.compile(loss='mse',optimizer='adam')#batch,epoch
NUM_EPOCHS =20
BATCH_SIZE =10history =model.fit(xtrain,ytrain,batch_size=BATCH_SIZE,epochs=NUM_EPOCHS,validation_split=0.2)
ytest_ = model.predict(xtest).flatten()#預測值和真實值對比,將伸縮后的z值重新伸縮
for i in range(10):label =(ytest[i]*Xstds[3])+Xmeans[3]prediction =(ytest_[i]*Xstds[3])+Xmeans[3]print('Benzene Conc. expected:{:.3f},prdicted:{:.3f}'.format(label,prediction))#最后繪制
plt.plot(np.arange(ytest.shape[0]),(ytest*Xstds[3])/Xmeans[3],color='b',label='actual')
plt.plot(np.arange(ytest_.shape[0]),(ytest_*Xstds[3])/Xmeans[3],color='r',alpha=0.5,label='predicted')
plt.xlabel('time')
plt.ylabel('苯含量')
plt.legend(loc ='best')
plt.show()
?
總結
- 上一篇: 到医院不给开康复证明为什么
- 下一篇: 批改网如何进行复制粘贴