test_optimize.py 768 B

12345678910111213141516171819202122232425262728293031
  1. import numpy as np
  2. from scipy.optimize import fmin_ncg
  3. from sklearn.utils._testing import assert_array_almost_equal
  4. from sklearn.utils.optimize import _newton_cg
  5. def test_newton_cg():
  6. # Test that newton_cg gives same result as scipy's fmin_ncg
  7. rng = np.random.RandomState(0)
  8. A = rng.normal(size=(10, 10))
  9. x0 = np.ones(10)
  10. def func(x):
  11. Ax = A.dot(x)
  12. return 0.5 * (Ax).dot(Ax)
  13. def grad(x):
  14. return A.T.dot(A.dot(x))
  15. def hess(x, p):
  16. return p.dot(A.T.dot(A.dot(x.all())))
  17. def grad_hess(x):
  18. return grad(x), lambda x: A.T.dot(A.dot(x))
  19. assert_array_almost_equal(
  20. _newton_cg(grad_hess, func, grad, x0, tol=1e-10)[0],
  21. fmin_ncg(f=func, x0=x0, fprime=grad, fhess_p=hess),
  22. )