test_kernel_ridge.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import numpy as np
  2. import scipy.sparse as sp
  3. from sklearn.datasets import make_regression
  4. from sklearn.kernel_ridge import KernelRidge
  5. from sklearn.linear_model import Ridge
  6. from sklearn.metrics.pairwise import pairwise_kernels
  7. from sklearn.utils._testing import assert_array_almost_equal, ignore_warnings
  8. X, y = make_regression(n_features=10, random_state=0)
  9. Xcsr = sp.csr_matrix(X)
  10. Xcsc = sp.csc_matrix(X)
  11. Y = np.array([y, y]).T
  12. def test_kernel_ridge():
  13. pred = Ridge(alpha=1, fit_intercept=False).fit(X, y).predict(X)
  14. pred2 = KernelRidge(kernel="linear", alpha=1).fit(X, y).predict(X)
  15. assert_array_almost_equal(pred, pred2)
  16. def test_kernel_ridge_csr():
  17. pred = (
  18. Ridge(alpha=1, fit_intercept=False, solver="cholesky")
  19. .fit(Xcsr, y)
  20. .predict(Xcsr)
  21. )
  22. pred2 = KernelRidge(kernel="linear", alpha=1).fit(Xcsr, y).predict(Xcsr)
  23. assert_array_almost_equal(pred, pred2)
  24. def test_kernel_ridge_csc():
  25. pred = (
  26. Ridge(alpha=1, fit_intercept=False, solver="cholesky")
  27. .fit(Xcsc, y)
  28. .predict(Xcsc)
  29. )
  30. pred2 = KernelRidge(kernel="linear", alpha=1).fit(Xcsc, y).predict(Xcsc)
  31. assert_array_almost_equal(pred, pred2)
  32. def test_kernel_ridge_singular_kernel():
  33. # alpha=0 causes a LinAlgError in computing the dual coefficients,
  34. # which causes a fallback to a lstsq solver. This is tested here.
  35. pred = Ridge(alpha=0, fit_intercept=False).fit(X, y).predict(X)
  36. kr = KernelRidge(kernel="linear", alpha=0)
  37. ignore_warnings(kr.fit)(X, y)
  38. pred2 = kr.predict(X)
  39. assert_array_almost_equal(pred, pred2)
  40. def test_kernel_ridge_precomputed():
  41. for kernel in ["linear", "rbf", "poly", "cosine"]:
  42. K = pairwise_kernels(X, X, metric=kernel)
  43. pred = KernelRidge(kernel=kernel).fit(X, y).predict(X)
  44. pred2 = KernelRidge(kernel="precomputed").fit(K, y).predict(K)
  45. assert_array_almost_equal(pred, pred2)
  46. def test_kernel_ridge_precomputed_kernel_unchanged():
  47. K = np.dot(X, X.T)
  48. K2 = K.copy()
  49. KernelRidge(kernel="precomputed").fit(K, y)
  50. assert_array_almost_equal(K, K2)
  51. def test_kernel_ridge_sample_weights():
  52. K = np.dot(X, X.T) # precomputed kernel
  53. sw = np.random.RandomState(0).rand(X.shape[0])
  54. pred = Ridge(alpha=1, fit_intercept=False).fit(X, y, sample_weight=sw).predict(X)
  55. pred2 = KernelRidge(kernel="linear", alpha=1).fit(X, y, sample_weight=sw).predict(X)
  56. pred3 = (
  57. KernelRidge(kernel="precomputed", alpha=1)
  58. .fit(K, y, sample_weight=sw)
  59. .predict(K)
  60. )
  61. assert_array_almost_equal(pred, pred2)
  62. assert_array_almost_equal(pred, pred3)
  63. def test_kernel_ridge_multi_output():
  64. pred = Ridge(alpha=1, fit_intercept=False).fit(X, Y).predict(X)
  65. pred2 = KernelRidge(kernel="linear", alpha=1).fit(X, Y).predict(X)
  66. assert_array_almost_equal(pred, pred2)
  67. pred3 = KernelRidge(kernel="linear", alpha=1).fit(X, y).predict(X)
  68. pred3 = np.array([pred3, pred3]).T
  69. assert_array_almost_equal(pred2, pred3)