def test_fit_eval(self):
     """LinearLeastSquaresFit: Basic function fitting and evaluation using data from a known function."""
     interp = LinearLeastSquaresFit()
     self.assertRaises(NotFittedError, interp, self.x)
     interp.fit(self.x, self.y)
     y = interp(self.x)
     assert_almost_equal(interp.params, self.params, decimal=10)
     assert_almost_equal(y, self.y, decimal=10)
Exemple #2
0
 def test_fit_eval(self):
     """LinearLeastSquaresFit: Basic function fitting and evaluation using data from a known function."""
     interp = LinearLeastSquaresFit()
     self.assertRaises(NotFittedError, interp, self.x)
     interp.fit(self.x, self.y)
     y = interp(self.x)
     assert_almost_equal(interp.params, self.params, decimal=10)
     assert_almost_equal(y, self.y, decimal=10)
 def test_fit_eval_linear(self):
     """NonLinearLeastSquaresFit: Compare to LinearLeastSquaresFit on a linear problem (and check use of Jacobian)."""
     lin = LinearLeastSquaresFit()
     lin.fit(self.x3, self.y3, std_y=2.0)
     nonlin = NonLinearLeastSquaresFit(self.func3, self.init_params3, func_jacobian=self.jac3)
     nonlin.fit(self.x3, self.y3, std_y=2.0)
     # A correct Jacobian helps a lot...
     assert_almost_equal(nonlin.params, self.true_params3, decimal=11)
     assert_almost_equal(nonlin.cov_params, lin.cov_params, decimal=11)
     nonlin_nojac = NonLinearLeastSquaresFit(self.func3, self.init_params3)
     nonlin_nojac.fit(self.x3, self.y3, std_y=0.1)
     assert_almost_equal(nonlin_nojac.params, self.true_params3, decimal=6)
 def test_fit_eval_linear(self):
     """NonLinearLeastSquaresFit: Do linear problem and check Jacobian."""
     lin = LinearLeastSquaresFit()
     lin.fit(self.x3, self.y3, std_y=2.0)
     nonlin = NonLinearLeastSquaresFit(self.func3, self.init_params3,
                                       func_jacobian=self.jac3)
     nonlin.fit(self.x3, self.y3, std_y=2.0)
     # A correct Jacobian helps a lot...
     assert_almost_equal(nonlin.params, self.true_params3, decimal=11)
     assert_almost_equal(nonlin.cov_params, lin.cov_params, decimal=11)
     nonlin_nojac = NonLinearLeastSquaresFit(self.func3, self.init_params3)
     nonlin_nojac.fit(self.x3, self.y3, std_y=0.1)
     assert_almost_equal(nonlin_nojac.params, self.true_params3, decimal=5)
 def test_enabled_params(self):
     """NonLinearLeastSquaresFit: Check whether subset of parameters can be optimised."""
     lin = LinearLeastSquaresFit()
     lin.fit(self.x3[self.enabled_params_int, :], self.y3, std_y=2.0)
     lin_cov_params = np.zeros((len(self.true_params3), len(self.true_params3)))
     lin_cov_params[np.ix_(self.enabled_params_int, self.enabled_params_int)] = lin.cov_params
     nonlin = NonLinearLeastSquaresFit(self.func3, self.init_params3, self.enabled_params_int, self.jac3)
     nonlin.fit(self.x3, self.y3, std_y=2.0)
     assert_almost_equal(nonlin.params, self.true_params3, decimal=11)
     assert_almost_equal(nonlin.cov_params, lin_cov_params, decimal=11)
     nonlin = NonLinearLeastSquaresFit(self.func3, self.init_params3, self.enabled_params_bool, self.jac3)
     nonlin.fit(self.x3, self.y3, std_y=2.0)
     assert_almost_equal(nonlin.params, self.true_params3, decimal=11)
     assert_almost_equal(nonlin.cov_params, lin_cov_params, decimal=11)
Exemple #6
0
 def test_enabled_params(self):
     """NonLinearLeastSquaresFit: Check whether subset of parameters can be optimised."""
     lin = LinearLeastSquaresFit()
     lin.fit(self.x3[self.enabled_params_int, :], self.y3, std_y=2.0)
     lin_cov_params = np.zeros(
         (len(self.true_params3), len(self.true_params3)))
     lin_cov_params[np.ix_(self.enabled_params_int,
                           self.enabled_params_int)] = lin.cov_params
     nonlin = NonLinearLeastSquaresFit(self.func3, self.init_params3,
                                       self.enabled_params_int, self.jac3)
     nonlin.fit(self.x3, self.y3, std_y=2.0)
     assert_almost_equal(nonlin.params, self.true_params3, decimal=11)
     assert_almost_equal(nonlin.cov_params, lin_cov_params, decimal=11)
     nonlin = NonLinearLeastSquaresFit(self.func3, self.init_params3,
                                       self.enabled_params_bool, self.jac3)
     nonlin.fit(self.x3, self.y3, std_y=2.0)
     assert_almost_equal(nonlin.params, self.true_params3, decimal=11)
     assert_almost_equal(nonlin.cov_params, lin_cov_params, decimal=11)
 def test_cov_params(self):
     """LinearLeastSquaresFit: Obtain sample statistics of parameters and compare to calculated covariance matrix."""
     interp = LinearLeastSquaresFit()
     std_y = 1.0
     M = 200
     param_set = np.zeros((len(self.params), M))
     for n in range(M):
         yn = self.poly_y + std_y * np.random.randn(len(self.poly_y))
         interp.fit(self.poly_x, yn, std_y)
         param_set[:, n] = interp.params
     mean_params = param_set.mean(axis=1)
     norm_params = param_set - mean_params[:, np.newaxis]
     cov_params = np.dot(norm_params, norm_params.T) / M
     std_params = np.sqrt(np.diag(interp.cov_params))
     self.assertTrue((np.abs(mean_params - self.params) / std_params < 0.25).all(),
                     "Sample mean parameter vector differs too much from true value")
     self.assertTrue((np.abs(cov_params - interp.cov_params) / np.abs(interp.cov_params) < 1.0).all(),
                     "Sample parameter covariance matrix differs too much from expected one")
Exemple #8
0
 def test_vs_numpy(self):
     """LinearLeastSquaresFit: Compare fitter to np.linalg.lstsq."""
     interp = LinearLeastSquaresFit()
     interp.fit(self.x, self.y)
     params = np.linalg.lstsq(self.x.T, self.y)[0]
     assert_almost_equal(interp.params, params, decimal=10)
     rcond = 1e-3
     interp = LinearLeastSquaresFit(rcond)
     interp.fit(self.poly_x, self.poly_y)
     params = np.linalg.lstsq(self.poly_x.T, self.poly_y, rcond)[0]
     assert_almost_equal(interp.params, params, decimal=10)
 def test_cov_params(self):
     """LinearLeastSquaresFit: Compare param stats to covariance matrix."""
     interp = LinearLeastSquaresFit()
     std_y = 1.0
     M = 200
     param_set = np.zeros((len(self.params), M))
     for n in range(M):
         yn = self.poly_y + std_y * np.random.randn(len(self.poly_y))
         interp.fit(self.poly_x, yn, std_y)
         param_set[:, n] = interp.params
     mean_params = param_set.mean(axis=1)
     norm_params = param_set - mean_params[:, np.newaxis]
     cov_params = np.dot(norm_params, norm_params.T) / M
     std_params = np.sqrt(np.diag(interp.cov_params))
     self.assertTrue(
         (np.abs(mean_params - self.params) / std_params < 0.25).all(),
         "Sample mean parameter vector differs too much from true value")
     self.assertTrue(
         (np.abs(cov_params - interp.cov_params) / np.abs(interp.cov_params)
          < 1.0).all(),
         "Sample parameter covariance matrix differs too much")
 def test_vs_numpy(self):
     """LinearLeastSquaresFit: Compare fitter to np.linalg.lstsq."""
     interp = LinearLeastSquaresFit()
     interp.fit(self.x, self.y)
     params = np.linalg.lstsq(self.x.T, self.y, rcond=-1)[0]
     assert_almost_equal(interp.params, params, decimal=10)
     rcond = 1e-3
     interp = LinearLeastSquaresFit(rcond)
     with warnings.catch_warnings(record=True) as warning:
         interp.fit(self.poly_x, self.poly_y)
         assert_equal(str(warning[0].message),
                      "Least-squares fit may be poorly conditioned")
     params = np.linalg.lstsq(self.poly_x.T, self.poly_y, rcond)[0]
     assert_almost_equal(interp.params, params, decimal=10)
 def test_vs_numpy(self):
     """LinearLeastSquaresFit: Compare fitter to np.linalg.lstsq."""
     interp = LinearLeastSquaresFit()
     interp.fit(self.x, self.y)
     params = np.linalg.lstsq(self.x.T, self.y)[0]
     assert_almost_equal(interp.params, params, decimal=10)
     rcond = 1e-3
     interp = LinearLeastSquaresFit(rcond)
     interp.fit(self.poly_x, self.poly_y)
     params = np.linalg.lstsq(self.poly_x.T, self.poly_y, rcond)[0]
     assert_almost_equal(interp.params, params, decimal=10)
 def test_vs_numpy(self):
     """LinearLeastSquaresFit: Compare fitter to np.linalg.lstsq."""
     interp = LinearLeastSquaresFit()
     interp.fit(self.x, self.y)
     params = np.linalg.lstsq(self.x.T, self.y, rcond=-1)[0]
     assert_almost_equal(interp.params, params, decimal=10)
     rcond = 1e-3
     interp = LinearLeastSquaresFit(rcond)
     with warnings.catch_warnings(record=True) as warning:
         interp.fit(self.poly_x, self.poly_y)
         assert_equal(str(warning[0].message),
                      "Least-squares fit may be poorly conditioned")
     params = np.linalg.lstsq(self.poly_x.T, self.poly_y, rcond)[0]
     assert_almost_equal(interp.params, params, decimal=10)