def test_calculate_mean_squared_error(): input_dimensions = 5 number_of_nodes = 5 number_of_samples = 18 model = LinearAssociator(input_dimensions=input_dimensions, number_of_nodes=number_of_nodes, transfer_function="Linear") model.initialize_weights(seed=1) X_train = np.random.randn(input_dimensions, number_of_samples) assert model.calculate_mean_squared_error(X_train, model.predict(X_train)) == 0 target = np.random.randn(number_of_nodes, number_of_samples) mse = model.calculate_mean_squared_error(X_train, target) np.testing.assert_array_almost_equal(mse, 3.7144714504979635, decimal=4) model = LinearAssociator(input_dimensions=input_dimensions, number_of_nodes=number_of_nodes, transfer_function="Hard_limit") model.initialize_weights(seed=1) X_train = np.random.randn(input_dimensions, number_of_samples) assert model.calculate_mean_squared_error(X_train, model.predict(X_train)) == 0 target = np.random.randn(number_of_nodes, number_of_samples) mse = model.calculate_mean_squared_error(X_train, target) np.testing.assert_array_almost_equal(mse, 1.1234558948088766, decimal=4)
def test_train_hardlim_delta(): input_dimensions = 5 number_of_nodes = 5 for i in range(10): model = LinearAssociator(input_dimensions=input_dimensions, number_of_nodes=number_of_nodes, transfer_function="Hard_limit") model.initialize_weights(seed=i + 1) X_train = np.random.randn(input_dimensions, 100) out = model.predict(X_train) model.set_weights(np.random.randn(*model.get_weights().shape)) model.train(X_train, out, batch_size=10, num_epochs=200, alpha=0.1, gamma=0.1, learning="Delta") new_out = model.predict(X_train) np.testing.assert_array_almost_equal(out, new_out, decimal=4)
def test_pseudo_inverse_fit(): input_dimensions = 5 number_of_nodes = 5 model = LinearAssociator(input_dimensions=input_dimensions, number_of_nodes=number_of_nodes, transfer_function="Linear") model.initialize_weights(seed=1) X_train = np.random.randn(input_dimensions, 10) out = model.predict(X_train) model.set_weights(np.zeros_like(model.get_weights())) model.fit_pseudo_inverse(X_train, out) new_out = model.predict(X_train) np.testing.assert_array_almost_equal(out, new_out, decimal=4)
def test_predict_hard_limit(): input_dimensions = 2 number_of_nodes = 5 model = LinearAssociator(input_dimensions=input_dimensions, number_of_nodes=number_of_nodes, transfer_function="Hard_limit") model.initialize_weights(seed=1) X_train = np.array([[-1.43815556, 0.10089809, -1.25432937, 1.48410426], [-1.81784194, 0.42935033, -1.2806198, 0.06527391]]) y = np.array([[0, 0, 0, 1], [1, 0, 1, 0], [1, 0, 1, 1], [0, 0, 0, 1], [0, 0, 0, 1]]) y_hat = model.predict(X_train) np.testing.assert_array_almost_equal(y_hat, y, decimal=4)
def test_predict_linear(): input_dimensions = 2 number_of_nodes = 5 model = LinearAssociator(input_dimensions=input_dimensions, number_of_nodes=number_of_nodes, transfer_function="Linear") model.initialize_weights(seed=1) X_train = np.array([[-1.43815556, 0.10089809, -1.25432937, 1.48410426], [-1.81784194, 0.42935033, -1.2806198, 0.06527391]]) y = np.array([[-1.22398485, -0.09876447, -1.25403672, 2.37076614], [ 2.7100805 , -0.51397095, 2.0365662 , -0.8538988 ], [ 2.93924278, -0.90084842, 1.86188982, 1.13412472], [-1.12555691, -0.15077626, -1.21375201, 2.53979562], [-0.00551192, -0.07487682, -0.08083147, 0.4572099 ]]) y_hat = model.predict(X_train) np.testing.assert_array_almost_equal(y_hat, y, decimal=4)