def test_fit_target_to_feature_dict_working(self, data, X_y, estimator): X, y = X_y X_train, y_train, X_test, y_test = FeatureSplitter().transform(X, y) target_to_feature_dict = data.draw( str_target_to_feature_dicts(targets=y.columns, features=X.columns) ) multi_feature_gar = MultiFeatureGAR(estimator) multi_feature_gar.fit(X_train, y_train, target_to_features_dict=target_to_feature_dict)
def test_predict_has_explainers(self, forecaster, explainer, X_y): X, y = X_y X_train, y_train, X_test, y_test = FeatureSplitter().transform(X, y) model = forecaster(LinearRegression(), explainer_type=explainer) model.fit(X_train, y_train) model.predict(X_test.iloc[:1, :]) assert len(model.estimators_) == y_test.shape[1] for estimator in model.estimators_: assert len(estimator.explainer_.explanations_) == 1
def test_explanations_columns(self, forecaster, explainer, X_y): X, y = X_y X_train, y_train, X_test, y_test = FeatureSplitter().transform(X, y) model = forecaster(LinearRegression(), explainer_type=explainer) model.fit(X_train, y_train) model.predict(X_test.iloc[:1, :]) for target_column, explanation in model.explanations_.items(): assert set(explanation.columns).issuperset(set(X_train.columns)) assert set(model.explanations_.keys()) == set(y_train.columns)
def test_predict_target_to_feature_dict_explainable( self, data, X_y, estimator): X, y = X_y X_train, y_train, X_test, y_test = FeatureSplitter().transform(X, y) target_to_feature_dict = data.draw( str_target_to_feature_dicts(targets=y.columns, features=X.columns)) multi_feature_gar = MultiFeatureGAR(estimator, explainer_type="shap") multi_feature_gar.target_to_features_dict = target_to_feature_dict multi_feature_gar.fit(X_train, y_train) multi_feature_gar.predict(X_test)
def test_fit_target_to_feature_dict_consistent(self, data, X_y, estimator): X, y = X_y X_train, y_train, X_test, y_test = FeatureSplitter().transform(X, y) target_to_feature_dict = data.draw( str_target_to_feature_dicts(targets=y.columns, features=X.columns) ) multi_feature_gar = MultiFeatureGAR(estimator) multi_feature_gar.fit(X_train, y_train, target_to_features_dict=target_to_feature_dict) for i, estimator_ in enumerate(multi_feature_gar.estimators_): expected_n_features = len(target_to_feature_dict[y.columns[i]]) assert len(estimator_.coef_) == expected_n_features
def test_error_predict_target_to_feature_dict_wrong_X_shape( self, data, X_y, estimator): X, y = X_y X_train, y_train, X_test, y_test = FeatureSplitter().transform(X, y) target_to_feature_dict = data.draw( str_target_to_feature_dicts(targets=y.columns, features=X.columns)) multi_feature_gar = MultiFeatureGAR( estimator, target_to_features_dict=target_to_feature_dict) multi_feature_gar.fit(X_train, y_train) X_test = X_test.iloc[:, :2] with pytest.raises(ValueError): multi_feature_gar.predict(X_test)
def forecast_input(draw, max_lenth): length = draw(st.integers(min_value=2, max_value=max_lenth)) horizon = draw(st.integers(min_value=1, max_value=length - 1)) X = draw( giotto_time_series( min_length=length, max_length=max_lenth, allow_nan=False, allow_infinity=False, )) y = horizon_shift(X, horizon=horizon) X_train, y_train, X_test, y_test = FeatureSplitter().transform(X, y) return X_train, y_train, X_test
def test_correct_fit_date(self, X_y): base_model = LinearRegression() feature_splitter = FeatureSplitter() x, y = X_y[0], X_y[1] x_train, y_train, x_test, y_test = feature_splitter.transform(x, y) gar_no_feedforward = GAR(estimator=base_model) gar_no_feedforward.fit(x_train, y_train) predictions = gar_no_feedforward.predict(x_test) assert len(predictions) == len(x_test) np.testing.assert_array_equal(predictions.index, x_test.index) gar_with_feedforward = GARFF(estimator=base_model) gar_with_feedforward.fit(x_train, y_train) predictions = gar_with_feedforward.predict(x_test) assert len(predictions) == len(x_test) np.testing.assert_array_equal(predictions.index, x_test.index)
def test_fit_as_multi_output_regressor_if_target_to_feature_none( self, estimator, X_y ): X, y = X_y X_train, y_train, X_test, y_test = FeatureSplitter().transform(X, y) multi_feature_gar = MultiFeatureGAR(estimator) multi_feature_gar.fit(X_train, y_train) gar = GAR(estimator) gar.fit(X_train, y_train) pd.testing.assert_frame_equal( multi_feature_gar.predict(X_test), gar.predict(X_test), )
def _split_train_test(self, X: pd.DataFrame, y: pd.DataFrame): feature_splitter = FeatureSplitter() return feature_splitter.transform(X, y)
def _split_train_test(self, X, y): feature_splitter = FeatureSplitter() return feature_splitter.transform(X, y)