()
| 2166 | |
| 2167 | |
| 2168 | def test_center_kernel(): |
| 2169 | # Test that KernelCenterer is equivalent to StandardScaler |
| 2170 | # in feature space |
| 2171 | rng = np.random.RandomState(0) |
| 2172 | X_fit = rng.random_sample((5, 4)) |
| 2173 | scaler = StandardScaler(with_std=False) |
| 2174 | scaler.fit(X_fit) |
| 2175 | X_fit_centered = scaler.transform(X_fit) |
| 2176 | K_fit = np.dot(X_fit, X_fit.T) |
| 2177 | |
| 2178 | # center fit time matrix |
| 2179 | centerer = KernelCenterer() |
| 2180 | K_fit_centered = np.dot(X_fit_centered, X_fit_centered.T) |
| 2181 | K_fit_centered2 = centerer.fit_transform(K_fit) |
| 2182 | assert_array_almost_equal(K_fit_centered, K_fit_centered2) |
| 2183 | |
| 2184 | # center predict time matrix |
| 2185 | X_pred = rng.random_sample((2, 4)) |
| 2186 | K_pred = np.dot(X_pred, X_fit.T) |
| 2187 | X_pred_centered = scaler.transform(X_pred) |
| 2188 | K_pred_centered = np.dot(X_pred_centered, X_fit_centered.T) |
| 2189 | K_pred_centered2 = centerer.transform(K_pred) |
| 2190 | assert_array_almost_equal(K_pred_centered, K_pred_centered2) |
| 2191 | |
| 2192 | # check the results coherence with the method proposed in: |
| 2193 | # B. Schölkopf, A. Smola, and K.R. Müller, |
| 2194 | # "Nonlinear component analysis as a kernel eigenvalue problem" |
| 2195 | # equation (B.3) |
| 2196 | |
| 2197 | # K_centered3 = (I - 1_M) K (I - 1_M) |
| 2198 | # = K - 1_M K - K 1_M + 1_M K 1_M |
| 2199 | ones_M = np.ones_like(K_fit) / K_fit.shape[0] |
| 2200 | K_fit_centered3 = K_fit - ones_M @ K_fit - K_fit @ ones_M + ones_M @ K_fit @ ones_M |
| 2201 | assert_allclose(K_fit_centered, K_fit_centered3) |
| 2202 | |
| 2203 | # K_test_centered3 = (K_test - 1'_M K)(I - 1_M) |
| 2204 | # = K_test - 1'_M K - K_test 1_M + 1'_M K 1_M |
| 2205 | ones_prime_M = np.ones_like(K_pred) / K_fit.shape[0] |
| 2206 | K_pred_centered3 = ( |
| 2207 | K_pred - ones_prime_M @ K_fit - K_pred @ ones_M + ones_prime_M @ K_fit @ ones_M |
| 2208 | ) |
| 2209 | assert_allclose(K_pred_centered, K_pred_centered3) |
| 2210 | |
| 2211 | |
| 2212 | def test_kernelcenterer_non_linear_kernel(): |
nothing calls this directly
no test coverage detected
searching dependent graphs…