class MLPBandit: def __init__(self, data, lr, final_hidden_dim=50): self.mlp = MLP(hidden_layer_sizes=(50, 50, final_hidden_dim), learning_rate_init=lr, verbose=True) if type(data) is str: raw = pd.read_csv(data).sample(frac=1, replace=False) else: raw = data cutoff = int(.8 * len(raw)) labels = raw[GROUND] bins = [0, 3 * 7, 7 * 7, labels.max()] bucketed = pd.cut(labels, bins, include_lowest=True, labels=False) self.train_y = bucketed[:cutoff] self.test_y = bucketed[cutoff:] raw.drop(GROUND, inplace=True, axis=1) self.train_x = raw[:cutoff] self.test_x = raw[cutoff:] def train(self): self.mlp.fit(self.train_x, self.train_y) def test(self): return self.mlp.score(self.test_x, self.test_y) def get_activations(self, X): hidden_layer_sizes = self.mlp.hidden_layer_sizes if not hasattr(hidden_layer_sizes, "__iter__"): hidden_layer_sizes = [hidden_layer_sizes] hidden_layer_sizes = list(hidden_layer_sizes) layer_units = [X.shape[1]] + hidden_layer_sizes + \ [self.mlp.n_outputs_] activations = [X] for i in range(self.mlp.n_layers_ - 1): activations.append(np.empty((X.shape[0], layer_units[i + 1]))) self.mlp._forward_pass(activations) return activations[-2]