def cross_validate(network_shape, epochs_num, learn_rate, _groups_x, _groups_y): k = _groups_x.shape[0] _sum = 0 results = np.zeros(k) for i in range(k): train_x = None train_y = None valid_x = np.copy( _groups_x[i]) # the validation set for th i'th iteration. valid_y = np.copy(_groups_y[i]) net = NeuralNetwork(network_shape, epochs_num, learn_rate) for j in range(k): if j != i: # arrange the train set for the i'th iteration. if train_x is None: train_x = np.copy(_groups_x[j]) train_y = np.copy(_groups_y[j]) else: train_x = np.concatenate((train_x, _groups_x[j]), axis=0) train_y = np.concatenate((train_y, _groups_y[j]), axis=0) old_mins, denoms = norm.minmax_params(train_x) train_x = norm.minmax(train_x, 0, 1) valid_x = norm.minmax(valid_x, 0, 1, old_mins, denoms) net.train(train_x, train_y) results[i] = net.accuracy(valid_x, valid_y) old_mins, denoms = norm.minmax_params(train_x) train_x = norm.minmax(train_x, 0, 1) valid_x = norm.minmax(valid_x, 0, 1, old_mins, denoms) print(results) return np.average(results)