def test_SklearnWrapper_fit_predict_with_clipped_input_data(): nz = 5 model = _RegressorEnsemble( base_regressor=DummyRegressor(strategy="constant", constant=np.arange(nz)), n_jobs=1, ) wrapper = SklearnWrapper( input_variables=["a", "b"], output_variables=["c"], model=model, packer_config=PackerConfig({"a": { "z": SliceConfig(2, None) }}), ) dims = ["x", "y", "z"] shape = (2, 2, nz) arr = np.arange(np.prod(shape)).reshape(shape) input_data = xr.Dataset({ "a": (dims, arr), "b": (dims[:-1], arr[:, :, 0]), "c": (dims, arr + 1) }) wrapper.fit([input_data]) wrapper.predict(input_data)
def test_SklearnWrapper_serialize_fit_after_load(tmpdir): model = _RegressorEnsemble(base_regressor=LinearRegression(), n_jobs=1) wrapper = SklearnWrapper( input_variables=["x"], output_variables=["y"], model=model, ) # setup input data dims = ["unstacked_dim", "z"] data = xr.Dataset({ "x": (dims, np.ones((1, 1))), "y": (dims, np.ones((1, 1))) }) wrapper.fit([data]) # serialize/deserialize path = str(tmpdir) wrapper.dump(path) # fit loaded model loaded = wrapper.load(path) loaded.fit([data]) assert len(loaded.model.regressors) == 2
def test_SklearnWrapper_serialize_predicts_the_same(tmpdir, scale_factor): # Setup wrapper if scale_factor: scaler = ManualScaler(np.array([scale_factor])) else: scaler = None model = _RegressorEnsemble(base_regressor=LinearRegression(), n_jobs=1) wrapper = SklearnWrapper( input_variables=["x"], output_variables=["y"], model=model, ) wrapper.target_scaler = scaler # setup input data dims = ["unstacked_dim", "z"] data = xr.Dataset({ "x": (dims, np.ones((1, 1))), "y": (dims, np.ones((1, 1))) }) wrapper.fit([data]) # serialize/deserialize path = str(tmpdir) wrapper.dump(path) loaded = wrapper.load(path) xr.testing.assert_equal(loaded.predict(data), wrapper.predict(data))
def test_regressor_ensemble(): base_regressor = LinearRegression() ensemble_regressor = _RegressorEnsemble(base_regressor, n_jobs=1) num_batches = 3 X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]]) y = np.dot(X, np.array([1, 2])) + 3 for i in range(num_batches): ensemble_regressor.fit(X, y) return ensemble_regressor
def test_SklearnWrapper_raises_not_implemented_error_with_clipped_output_data( ): nz = 5 model = _RegressorEnsemble( base_regressor=DummyRegressor(strategy="constant", constant=np.arange(nz)), n_jobs=1, ) with pytest.raises(NotImplementedError): SklearnWrapper( input_variables=["a", "b"], output_variables=["c"], model=model, packer_config=PackerConfig({"c": { "z": SliceConfig(2, None) }}), )
def fit_wrapper_with_columnar_data(): nz = 2 model = _RegressorEnsemble( base_regressor=DummyRegressor(strategy="constant", constant=np.arange(nz)), n_jobs=1, ) wrapper = SklearnWrapper( input_variables=["a"], output_variables=["b"], model=model, ) dims = ["x", "y", "z"] shape = (2, 2, nz) arr = np.arange(np.prod(shape)).reshape(shape) input_data = xr.Dataset({"a": (dims, arr), "b": (dims, arr + 1)}) wrapper.fit([input_data]) return input_data, wrapper