def test_data2(self): gpfa = GPFA(bin_size=self.bin_size, x_dim=8, em_max_iters=self.n_iters) gpfa.fit(self.data2) n_trials = len(self.data2) returned_data = gpfa.valid_data_names seqs = gpfa.transform(self.data2, returned_data=returned_data) for key, data in seqs.items(): self.assertEqual(len(data), n_trials, msg="Failed ndarray field {0}".format(key)) t_start = self.data2[0][0].t_stop t_stop = self.data2[0][0].t_start n_bins = int(((t_start - t_stop) / self.bin_size).magnitude) assert_array_equal(gpfa.transform_info['num_bins'], [n_bins, ] * n_trials)
def test_data1(self): gpfa = GPFA(x_dim=self.x_dim, em_max_iters=self.n_iters) gpfa.fit(self.data1) xorth = gpfa.transform(self.data1) self.assertAlmostEqual(gpfa.transform_info['log_likelihood'], -8172.004695554373, places=5) # Since data1 is inherently 2 dimensional, only the first two # dimensions of xorth should have finite power. for i in [0, 1]: self.assertNotEqual(xorth[0][i].mean(), 0) self.assertNotEqual(xorth[0][i].var(), 0) for i in [2, 3]: self.assertAlmostEqual(xorth[0][i].mean(), 0, places=2) self.assertAlmostEqual(xorth[0][i].var(), 0, places=2)
def test_cross_validation(self): # If GPFA.__init__ is decorated, sklearn signature function parsing # magic throws the error # __init__() got an unexpected keyword argument 'args' lls = [] for x_dim in range(1, self.x_dim + 1): gpfa = GPFA(x_dim=x_dim, em_max_iters=self.n_iters) lls.append(np.mean(cross_val_score(gpfa, self.data1, cv=5))) self.assertTrue(np.argmax(lls) == 1)
def test_invalid_input_data(self): invalid_data = [(0, [0, 1, 2])] invalid_bin_size = 10 invalid_tau_init = 100 with self.assertRaises(ValueError): _ = GPFA(bin_size=invalid_bin_size) with self.assertRaises(ValueError): _ = GPFA(tau_init=invalid_tau_init) gpfa = GPFA() with self.assertRaises(ValueError): gpfa.fit(spiketrains=invalid_data) with self.assertRaises(ValueError): gpfa.fit(spiketrains=[])
def test_transform_testing_data(self): # check if the num. of neurons in the test data matches the # num. of neurons in the training data gpfa1 = GPFA(x_dim=self.x_dim, em_max_iters=self.n_iters) gpfa1.fit(self.data1) with self.assertRaises(ValueError): gpfa1.transform(self.data2)
def test_returned_data(self): gpfa = GPFA(bin_size=self.bin_size, x_dim=8, em_max_iters=self.n_iters) gpfa.fit(self.data2) seqs = gpfa.transform(self.data2) self.assertTrue(isinstance(seqs, np.ndarray)) returned_data = gpfa.valid_data_names seqs = gpfa.transform(self.data2, returned_data=returned_data) self.assertTrue(len(returned_data) == len(seqs)) self.assertTrue(isinstance(seqs, dict)) with self.assertRaises(ValueError): seqs = gpfa.transform(self.data2, returned_data=['invalid_name'])
def test_fit_transform(self): gpfa1 = GPFA(bin_size=self.bin_size, x_dim=self.x_dim, em_max_iters=self.n_iters) gpfa1.fit(self.data1) xorth1 = gpfa1.transform(self.data1) xorth2 = GPFA(bin_size=self.bin_size, x_dim=self.x_dim, em_max_iters=self.n_iters).fit_transform(self.data1) for i in range(len(self.data1)): for j in range(self.x_dim): assert_array_almost_equal(xorth1[i][j], xorth2[i][j])
def test_cross_validation(self): lls = [] for x_dim in range(1, self.x_dim + 1): gpfa = GPFA(x_dim=x_dim, em_max_iters=self.n_iters) lls.append(np.mean(cross_val_score(gpfa, self.data1, cv=5))) self.assertTrue(np.argmax(lls) == 1)