import pandas as pd
from pandas import Series,DataFrame
from sklearn import svm
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from sklearn.datasets import load_wine
wine = load_wine()
data = pd.DataFrame(wine.data, columns=wine.feature_names)
pd.set_option('display.max_columns', 1000)
print(data)
data_Y = data['hue']
data_X = data.drop("hue", axis=1)
x_train, x_test, y_train, y_test = train_test_split(data_X, data_Y, shuffle=False, test_size=80)
y_train = np.array(y_train, dtype = np.float32)
y_test = np.array(y_test, dtype = np.float32)
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(300, activation='relu', input_shape=(12,)))
model.add(tf.keras.layers.Dropout(0.1))
model.add(tf.keras.layers.Dense(300, activation='relu'))
model.add(tf.keras.layers.Dropout(0.0001))
model.add(tf.keras.layers.Dense(300, activation='relu'))
model.add(tf.keras.layers.Dropout(0.0001))
model.add(tf.keras.layers.Dense(300, activation='relu'))
model.add(tf.keras.layers.Dropout(0.1))
model.add(tf.keras.layers.Dense(1))
model.summary()
print("\n")
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mse'])
history = model.fit(x_train, y_train, batch_size=500, epochs=100, verbose=1, validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=1)
print("\n")
print("Test Loss:",score[0])
print("Test Accuracy:",score[1])
plt.plot(history.history['mse'], label="Error for Training", lw=0.5)
plt.plot(history.history['val_mse'], label="Error for Validation", lw=0.5)
plt.xlabel('Epoch')
plt.ylabel('Error')
plt.legend(loc='lower center', bbox_to_anchor=(.5, 1.0), ncol=3)
plt.savefig("error.pdf")
plt.close()
y_pred = model.predict(x_test)
plt.plot(y_test, lw=0.5, marker='.')
plt.plot(y_pred, lw=0.5, marker='.')
plt.xlabel('Number of Data')
plt.ylabel('Objective Variable')
plt.ylim(0,2)
plt.legend(['Testing','Estimate'], loc='lower center', bbox_to_anchor=(.5, 1.0), ncol=2)
plt.savefig("test.pdf")
plt.close()