Example #1
0
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)
Example #2
0
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
Example #3
0
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))
Example #4
0
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
Example #5
0
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)
            }}),
        )
Example #6
0
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