def test_landmark_registration_warping(self): fd = make_multimodal_samples(n_samples=3, n_modes=2, random_state=9) landmarks = make_multimodal_landmarks(n_samples=3, n_modes=2, random_state=9) landmarks = landmarks.squeeze() # Default location warping = landmark_registration_warping(fd, landmarks) center = (landmarks.max(axis=0) + landmarks.min(axis=0)) / 2 np.testing.assert_almost_equal(warping(center), landmarks, decimal=1) # Fixed location center = [.3, .6] warping = landmark_registration_warping(fd, landmarks, location=center) np.testing.assert_almost_equal(warping(center), landmarks, decimal=3)
def test_mse_decomposition(self): fd = make_multimodal_samples(n_samples=3, random_state=1) landmarks = make_multimodal_landmarks(n_samples=3, random_state=1) landmarks = landmarks.squeeze() warping = landmark_registration_warping(fd, landmarks) fd_registered = fd.compose(warping) ret = mse_decomposition(fd, fd_registered, warping) np.testing.assert_almost_equal(ret.mse_amp, 0.0009866997121476962) np.testing.assert_almost_equal(ret.mse_pha, 0.11576861468435257) np.testing.assert_almost_equal(ret.rsq, 0.9915489952877273) np.testing.assert_almost_equal(ret.cr, 0.9999963424653829)
def test_mse_decomposition(self): fd = make_multimodal_samples(n_samples=3, random_state=1) landmarks = make_multimodal_landmarks(n_samples=3, random_state=1) landmarks = landmarks.squeeze() warping = landmark_registration_warping(fd, landmarks) fd_registered = fd.compose(warping) scorer = AmplitudePhaseDecomposition(return_stats=True) ret = scorer.score_function(fd, fd_registered, warping=warping) np.testing.assert_allclose(ret.mse_amp, 0.0009866997121476962) np.testing.assert_allclose(ret.mse_pha, 0.11576935495450151) np.testing.assert_allclose(ret.r_squared, 0.9915489952877273) np.testing.assert_allclose(ret.c_r, 0.999999, rtol=1e-6)
def __call__(self): """ Calculate the warping function, registered curves and landmark shift deltas Returns ------- self """ self.warping_function = landmark_registration_warping(self.original_functions, self.landmarks, location=np.mean(self.landmarks, axis=0)) self.adjusted_functions = self.original_functions.compose(self.warping_function) self.landmark_shift_deltas = landmark_shift_deltas(self.original_functions, self.landmarks) return self