# Simple NN using TensorFlow # April 2019 # Eduardo Moura Cirilo Rocha # compate optimizers and learning rates import numpy as np import pandas as pd # load csv data from sklearn.model_selection import train_test_split # split into training and test set import dataset as ds # load dataset import matplotlib.pyplot as plt # plotting import NN_Sigmoid as nn # load dataset noShow = ds.import_data_df([ds._FILE_PATHS['merged']]) noShow_X, noShow_y = noShow.iloc[:, :-1].values, noShow.iloc[:, -1].values noShow_y = np.array([[i] for i in noShow_y]) # separate training and test set randomly keeping classes ratio trainX, testX, trainY, testY = train_test_split(noShow_X, noShow_y, test_size=0.2, random_state=42, stratify=noShow_y) # separate training in validation and training set trainX, valX, trainY, valY = train_test_split(trainX, trainY, test_size=0.15, random_state=42, stratify=trainY)
def k_fold_cross_validation(k, hiddenLayers, numEpochs): # load dataset noShow = ds.import_data_df([ds._FILE_PATHS['merged']]) noShow_X, noShow_y = noShow.iloc[:, :-1].values, noShow.iloc[:, -1].values noShow_y = np.array([[i] for i in noShow_y]) # Stratified k-fold skf = StratifiedKFold(n_splits=k, shuffle=True) skf.get_n_splits(noShow_X, noShow_y) #print(skf) # store results losses = [] accuracies = [] f1s = [] fold = 1 for train_index, test_index in skf.split(noShow_X, noShow_y): #print("Fold: "+str(fold)) fold += 1 trainX, testX = noShow_X[train_index], noShow_X[test_index] trainY, testY = noShow_y[train_index], noShow_y[test_index] # separate training in validation and training set trainX, valX, trainY, valY = train_test_split(trainX, trainY, test_size=0.15, random_state=42, stratify=trainY) # number of features numFeatures = trainX.shape[1] # number of classes numLabels = trainY.shape[1] # init NN = nn.NN_Sigmoid(hiddenLayers, numFeatures, numLabels, learning_rate=0.05, cross_entropy_weight=4, optimizer="Adam") # train NN.train(numEpochs, trainX, trainY, valX=valX, valY=valY, val_epochs=25, val_patience=5) # test _, loss, acc, f1 = NN.predict(testX, testY) # close tf session NN.close_session() losses.append(loss) accuracies.append(acc) f1s.append(f1) return losses, accuracies, f1s