2022-04-04 01:27:04 +02:00
|
|
|
import pandas as pd
|
2022-06-05 22:18:07 +02:00
|
|
|
import numpy as np
|
2022-04-04 01:27:04 +02:00
|
|
|
from sklearn.model_selection import train_test_split
|
2022-06-05 22:18:07 +02:00
|
|
|
from sklearn import metrics
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
import tensorflow as tf
|
|
|
|
import math
|
2022-04-04 01:27:04 +02:00
|
|
|
|
2022-06-05 22:18:07 +02:00
|
|
|
from tensorflow import keras
|
|
|
|
#from tensorflow.keras import layers
|
2022-04-04 01:27:04 +02:00
|
|
|
|
2022-06-05 22:18:07 +02:00
|
|
|
|
|
|
|
def process_data_and_get_x_y(data):
|
|
|
|
data.columns = ["date", "Usage_kWh", "Lagging_Current_Reactive.Power_kVarh", "Leading_Current_Reactive_Power_kVarh",
|
|
|
|
"CO2(tCO2)", "Lagging_Current_Power_Factor", "Leading_Current_Power_Factor", "WeekStatus",
|
|
|
|
"Day_of_week", "Load_Type"] #without NSM column
|
|
|
|
data = data.set_index('date')
|
|
|
|
data = pd.get_dummies(data, drop_first=True)
|
|
|
|
|
|
|
|
x = data.drop('Usage_kWh', axis=1)
|
|
|
|
#x = data['Lagging_Current_Reactive.Power_kVarh']
|
|
|
|
y = data['Usage_kWh']
|
|
|
|
return data, x, y
|
|
|
|
|
|
|
|
|
|
|
|
def plot_loss(history):
|
|
|
|
plt.plot(history.history['loss'], label='loss')
|
|
|
|
plt.plot(history.history['val_loss'], label='val_loss')
|
|
|
|
plt.ylim([0, 10])
|
|
|
|
plt.xlabel('Epoch')
|
|
|
|
plt.ylabel('Error')
|
|
|
|
plt.legend()
|
|
|
|
plt.grid(True)
|
|
|
|
plt.show()
|
|
|
|
|
|
|
|
|
|
|
|
energy_data_train = pd.read_csv('Steel_industry_data_train.csv')
|
|
|
|
|
|
|
|
energy_data_train, x_train, y_train = process_data_and_get_x_y(energy_data_train)
|
|
|
|
|
|
|
|
#x_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.2, random_state=1)
|
|
|
|
# x_test, x_dev, y_test, y_dev = train_test_split(x_test, y_test, test_size=0.5, random_state=1)
|
2022-04-04 01:27:04 +02:00
|
|
|
|
|
|
|
# stats
|
2022-06-05 22:18:07 +02:00
|
|
|
print(x_train.describe(include='all'))
|
|
|
|
#print(np.array(x_train).reshape(-1, 1))
|
|
|
|
|
|
|
|
normalizer = tf.keras.layers.Normalization(axis=1)
|
|
|
|
normalizer.adapt(np.array(x_train))
|
|
|
|
print(normalizer.mean.numpy())
|
|
|
|
|
|
|
|
# powinno być niezmienione
|
|
|
|
print(np.array(x_train[:1]))
|
|
|
|
|
|
|
|
usage_model = tf.keras.Sequential([
|
|
|
|
normalizer,
|
|
|
|
keras.layers.Dense(units=10, activation='relu'),
|
|
|
|
keras.layers.Dense(units=1)
|
|
|
|
])
|
|
|
|
|
|
|
|
print(usage_model.summary())
|
|
|
|
|
|
|
|
usage_model.compile(
|
|
|
|
optimizer=tf.optimizers.Adam(learning_rate=0.1),
|
|
|
|
loss='mean_absolute_error')
|
|
|
|
|
|
|
|
history = usage_model.fit(
|
|
|
|
x_train,
|
|
|
|
y_train,
|
|
|
|
epochs=100,
|
|
|
|
# Suppress logging.
|
|
|
|
verbose=0,
|
|
|
|
# Calculate validation results on 20% of the training data.
|
|
|
|
validation_split=0.2)
|
|
|
|
|
|
|
|
hist = pd.DataFrame(history.history)
|
|
|
|
hist['epoch'] = history.epoch
|
|
|
|
print(hist.tail())
|
|
|
|
|
|
|
|
plot_loss(history)
|
|
|
|
|
2022-06-06 00:28:02 +02:00
|
|
|
usage_model.save('steel_industry_model')
|