Esempio n. 1
0
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]