import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
def read_51412():
df_1=pd.read_csv('51412/Diesel_LFWSRXSJ1K1F51412_2020-03-02_382.csv')
df_2=pd.read_csv('51412/Diesel_LFWSRXSJ1K1F51412_2020-02-29_382.csv')
df_3=pd.read_csv('51412/Diesel_LFWSRXSJ1K1F51412_2020-03-01_382.csv')
df_4 = pd.read_csv('51412/Diesel_LFWSRXSJ1K1F51412_2020-03-03_382.csv')
return df_1,df_2,df_3,df_4
def read_50379():
df_1=pd.read_csv('50379/Diesel_LFWSRXSJ2K1F50379_2020-01-25_372.csv')
df_2=pd.read_csv('50379/Diesel_LFWSRXSJ2K1F50379_2020-01-26_372.csv')
df_3=pd.read_csv('50379/Diesel_LFWSRXSJ2K1F50379_2020-01-31_372.csv')
return df_1,df_2,df_3
#变量选择
corr_label=(['EESP_VAR_N_W','TQMOD_VAR_TRQ_ACT_W','EBP_VAR_W'])
#变量选择及工况选择
def dataselect(X):
# X = X[(X['EESP_VAR_N_W'] > 900) &(X['EESP_VAR_N_W'] <1300)&(X['TQMOD_VAR_TRQ_ACT_W'] >= 1000) & (X['TQMOD_VAR_TRQ_ACT_W'] <= 1100)]
data=[]
for i in corr_label:
data.append(X[i])
data=pd.DataFrame(data)
data = pd.DataFrame(data.values.T, index=data.columns, columns=corr_label) #data存储了筛选出的变量的所有数值
data.dropna(axis=0, how='any', inplace=True)
return data
#数据读取
df_1,df_2,df_3,df_4=read_51412()
data_1=dataselect(df_1)
data_2=dataselect(df_2)
data_3=dataselect(df_3)
data_4=dataselect(df_4)
#超参数定义
batch_size=10
epochs=3000
lr=0.0001
#数据标准化
from tensorflow.keras import optimizers
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
train_X=pd.concat([data_1,data_2,data_3,data_4])
scaler.fit(train_X)
train, validation = train_test_split(train_X, train_size = 0.7, random_state = 1)
train = scaler.transform(train)
validation = scaler.transform(validation)
#使用主成分分析
use_PCA=True
from sklearn.decomposition import PCA
if use_PCA:
n_components=1
pca = PCA(n_components=n_components)
pca.fit(train)
train = pca.transform(train)
validation = pca.transform(validation)
else:
n_components = len(corr_label)
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
from tensorflow.keras.callbacks import ModelCheckpoint, TensorBoard
#模型搭建
if run_code==None:
Dense_autoencoder = Sequential()
Dense_autoencoder.add(layers.Dense(10,activation='tanh',input_shape=(1, n_components)))
Dense_autoencoder.add(layers.Dense(6, activation='relu'))
Dense_autoencoder.add(layers.Dense(4, activation='relu'))
Dense_autoencoder.add(layers.Dense(1, activation='tanh'))
Dense_autoencoder.add(layers.Dense(2, activation='relu'))
Dense_autoencoder.add(layers.Dense(n_components, activation='tanh'))
Dense_autoencoder.summary()
adam = optimizers.Adam(lr)
Dense_autoencoder.compile(loss='mse', optimizer=adam)
cp = ModelCheckpoint(filepath="model.h5",
save_best_only=True,
verbose=1)
autoencoder_history=Dense_autoencoder.fit(train, train, epochs=epochs, batch_size=batch_size,
validation_data=(validation,validation),verbose=2,
callbacks=[cp]).history
else:
print('run_code')
plt.plot(autoencoder_history['loss'], linewidth=2, label='Train')
plt.plot(autoencoder_history['val_loss'], linewidth=2, label='Valid')
plt.legend(loc='upper right')
plt.title('Model loss')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.show()