Esempio n. 1
0
# 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)
Esempio n. 2
0
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