(sparse_container)
| 1087 | |
| 1088 | @pytest.mark.parametrize("sparse_container", CSC_CONTAINERS + CSR_CONTAINERS) |
| 1089 | def test_scaler_int(sparse_container): |
| 1090 | # test that scaler converts integer input to floating |
| 1091 | # for both sparse and dense matrices |
| 1092 | rng = np.random.RandomState(42) |
| 1093 | X = rng.randint(20, size=(4, 5)) |
| 1094 | X[:, 0] = 0 # first feature is always of zero |
| 1095 | X_sparse = sparse_container(X) |
| 1096 | |
| 1097 | with warnings.catch_warnings(record=True): |
| 1098 | scaler = StandardScaler(with_mean=False).fit(X) |
| 1099 | X_scaled = scaler.transform(X, copy=True) |
| 1100 | assert not np.any(np.isnan(X_scaled)) |
| 1101 | |
| 1102 | with warnings.catch_warnings(record=True): |
| 1103 | scaler_sparse = StandardScaler(with_mean=False).fit(X_sparse) |
| 1104 | X_sparse_scaled = scaler_sparse.transform(X_sparse, copy=True) |
| 1105 | assert not np.any(np.isnan(X_sparse_scaled.data)) |
| 1106 | |
| 1107 | assert_array_almost_equal(scaler.mean_, scaler_sparse.mean_) |
| 1108 | assert_array_almost_equal(scaler.var_, scaler_sparse.var_) |
| 1109 | assert_array_almost_equal(scaler.scale_, scaler_sparse.scale_) |
| 1110 | |
| 1111 | assert_array_almost_equal( |
| 1112 | X_scaled.mean(axis=0), [0.0, 1.109, 1.856, 21.0, 1.559], 2 |
| 1113 | ) |
| 1114 | assert_array_almost_equal(X_scaled.std(axis=0), [0.0, 1.0, 1.0, 1.0, 1.0]) |
| 1115 | |
| 1116 | X_sparse_scaled_mean, X_sparse_scaled_std = mean_variance_axis( |
| 1117 | X_sparse_scaled.astype(float), 0 |
| 1118 | ) |
| 1119 | assert_array_almost_equal(X_sparse_scaled_mean, X_scaled.mean(axis=0)) |
| 1120 | assert_array_almost_equal(X_sparse_scaled_std, X_scaled.std(axis=0)) |
| 1121 | |
| 1122 | # Check that X has not been modified (copy) |
| 1123 | assert X_scaled is not X |
| 1124 | assert X_sparse_scaled is not X_sparse |
| 1125 | |
| 1126 | X_scaled_back = scaler.inverse_transform(X_scaled) |
| 1127 | assert X_scaled_back is not X |
| 1128 | assert X_scaled_back is not X_scaled |
| 1129 | assert_array_almost_equal(X_scaled_back, X) |
| 1130 | |
| 1131 | X_sparse_scaled_back = scaler_sparse.inverse_transform(X_sparse_scaled) |
| 1132 | assert X_sparse_scaled_back is not X_sparse |
| 1133 | assert X_sparse_scaled_back is not X_sparse_scaled |
| 1134 | assert_array_almost_equal(X_sparse_scaled_back.toarray(), X) |
| 1135 | |
| 1136 | if sparse_container in CSR_CONTAINERS: |
| 1137 | null_transform = StandardScaler(with_mean=False, with_std=False, copy=True) |
| 1138 | with warnings.catch_warnings(record=True): |
| 1139 | X_null = null_transform.fit_transform(X_sparse) |
| 1140 | assert_array_equal(X_null.data, X_sparse.data) |
| 1141 | X_orig = null_transform.inverse_transform(X_null) |
| 1142 | assert_array_equal(X_orig.data, X_sparse.data) |
| 1143 | |
| 1144 | |
| 1145 | @pytest.mark.parametrize("sparse_container", CSR_CONTAINERS + CSC_CONTAINERS) |
nothing calls this directly
no test coverage detected
searching dependent graphs…