import tensorflow as tf import pandas as pd import numpy as np def time_series_sigmoid_classification(X, Y, k, n0, x_columns, y_columns): inp = X[x_columns] out = Y[y_columns] col = "day" x = [] y = [] input_shape = 0 output_shape = 0 for player in Y["playerID"].unique(): XPlayer = inp[inp["playerID"] == player] YPlayer = out[out["playerID"] == player] for day in YPlayer[col][n0 - 1:]: prev = day - k xprev = XPlayer[XPlayer[col] == prev].drop(columns=[col]).to_numpy() if xprev.shape[0] != 1: continue else: xprev = xprev[0, :] yt = YPlayer[YPlayer[col] == day].drop(columns=[col]).to_numpy()[0, :] if input_shape == 0: input_shape = xprev.shape[0] else: if input_shape != xprev.shape[0]: print("INCONSISTENT INPUT DIMENSION") exit(2) if input_shape == 0: output_shape = yt.shape[0] else: if output_shape != yt.shape[0]: print("INCONSISTENT OUTPUT DIMENSION") exit(2) x.append(xprev) y.append(yt) x = np.array(x) y = np.array(y) model = tf.keras.Sequential([ tf.keras.layers.Flatten(input_shape=input_shape), tf.keras.layers.Dense(output_shape, activation=tf.nn.softmax) ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy', 'categorical_accuracy']) model.fit(x, y, epochs=100) loss, accuracy = model.evaluate(x, y) print(loss, accuracy) return model.get_weights() def time_series_dnn_classification(X, Y, k, n0, x_columns, y_columns): inp = X[x_columns] out = Y[y_columns] col = "day" x = [] y = [] input_shape = 0 output_shape = 0 for player in Y["playerID"].unique(): XPlayer = inp[inp["playerID"] == player] YPlayer = out[out["playerID"] == player] for day in YPlayer[col][n0 - 1:]: prev = day - k xprev = XPlayer[XPlayer[col] == prev].drop(columns=[col]).to_numpy() if xprev.shape[0] != 1: continue else: xprev = xprev[0, :] yt = YPlayer[YPlayer[col] == day].drop(columns=[col]).to_numpy()[0, :] if input_shape == 0: input_shape = xprev.shape[0] else: if input_shape != xprev.shape[0]: print("INCONSISTENT INPUT DIMENSION") exit(2) if input_shape == 0: output_shape = yt.shape[0] else: if output_shape != yt.shape[0]: print("INCONSISTENT OUTPUT DIMENSION") exit(2) x.append(xprev) y.append(yt) x = np.array(x) y = np.array(y) model = tf.keras.Sequential([ tf.keras.layers.Flatten(input_shape=input_shape), tf.keras.layers.Dense(32), tf.keras.layers.Dense(output_shape, activation=tf.nn.softmax) ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy', 'categorical_accuracy']) model.fit(x, y, epochs=100) loss, accuracy = model.evaluate(x, y) print(loss, accuracy) return model.get_weights()