def __init__(self, X_train, y_train, n_hidden, n_epochs=40, normalize=False): """ Constructor for the class implementing a Bayesian neural network trained with the probabilistic back propagation method. @param X_train Matrix with the features for the training data. @param y_train Vector with the target variables for the training data. @param n_hidden Vector with the number of neurons for each hidden layer. @param n_epochs Numer of epochs for which to train the network. The recommended value 40 should be enough. @param normalize Whether to normalize the input features. This is recommended unles the input vector is for example formed by binary features (a fingerprint). In that case we do not recommend to normalize the features. """ # We normalize the training data to have zero mean and unit standard # deviation in the training set if necessary if normalize: self.std_X_train = np.std(X_train, 0) self.std_X_train[self.std_X_train == 0] = 1 self.mean_X_train = np.mean(X_train, 0) else: self.std_X_train = np.ones(X_train.shape[1]) self.mean_X_train = np.zeros(X_train.shape[1]) X_train = (X_train - np.full(X_train.shape, self.mean_X_train)) / \ np.full(X_train.shape, self.std_X_train) self.mean_y_train = np.mean(y_train) self.std_y_train = np.std(y_train) y_train_normalized = (y_train - self.mean_y_train) / self.std_y_train # We construct the network self.net = pbp.construct_PBP_network(n_hidden, X_train.shape[1]) # We iterate the learning process pbp.train_PBP_network(self.net, X_train, y_train_normalized, n_epochs)
def __init__(self, X_train, y_train, n_hidden, n_epochs = 40, normalize = False): """ Constructor for the class implementing a Bayesian neural network trained with the probabilistic back propagation method. @param X_train Matrix with the features for the training data. @param y_train Vector with the target variables for the training data. @param n_hidden Vector with the number of neurons for each hidden layer. @param n_epochs Numer of epochs for which to train the network. The recommended value 40 should be enough. @param normalize Whether to normalize the input features. This is recommended unles the input vector is for example formed by binary features (a fingerprint). In that case we do not recommend to normalize the features. """ # We normalize the training data to have zero mean and unit standard # deviation in the training set if necessary if normalize: self.std_X_train = np.std(X_train, 0) self.std_X_train[ self.std_X_train == 0 ] = 1 self.mean_X_train = np.mean(X_train, 0) else: self.std_X_train = np.ones(X_train.shape[ 1 ]) self.mean_X_train = np.zeros(X_train.shape[ 1 ]) X_train = (X_train - np.full(X_train.shape, self.mean_X_train)) / \ np.full(X_train.shape, self.std_X_train) self.mean_y_train = np.mean(y_train) self.std_y_train = np.std(y_train) y_train_normalized = (y_train - self.mean_y_train) / self.std_y_train # We construct the network self.net = pbp.construct_PBP_network(n_hidden, X_train.shape[ 1 ]) # We iterate the learning process pbp.train_PBP_network(self.net, X_train, y_train_normalized, n_epochs)
def re_train(self, X_train, y_train, n_epochs): """ Function that re-trains the network on some data. @param X_train Matrix with the features for the training data. @param y_train Vector with the target variables for the training data. @param n_epochs Numer of epochs for which to train the network. """ # We normalize the training data X_train = (X_train - np.full(X_train.shape, self.mean_X_train)) / \ np.full(X_train.shape, self.std_X_train) y_train_normalized = (y_train - self.mean_y_train) / self.std_y_train pbp.train_PBP_network(self.net, X_train, y_train_normalized, n_epochs)