| @ -0,0 +1,96 @@ | |||
| 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_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(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() | |||