From b8ee4d6347f16f7644f944ecc4bcfe95f2fe5206 Mon Sep 17 00:00:00 2001 From: Jin Woo Ahn Date: Thu, 3 May 2018 18:10:00 +0200 Subject: [PATCH 1/6] . --- doc/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/conf.py b/doc/conf.py index 0e650b4f69..45080ed1e3 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -69,7 +69,7 @@ #'reference_url': { # 'autosklearn': None #}, - #'backreferences_dir': 'gen_modules/backreferences' + 'backreferences_dir': False } # Add any paths that contain templates here, relative to this directory. From 54179503fb199986524fb0a10020f8ee4d836b7a Mon Sep 17 00:00:00 2001 From: Jin Woo Ahn Date: Tue, 8 May 2018 13:44:17 +0200 Subject: [PATCH 2/6] . --- test/test_automl/test_estimators.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/test_automl/test_estimators.py b/test/test_automl/test_estimators.py index ed5e3db27a..4ab2fb6f30 100644 --- a/test/test_automl/test_estimators.py +++ b/test/test_automl/test_estimators.py @@ -390,3 +390,9 @@ def test_conversion_of_list_to_np(self, fit_ensemble, refit, fit): automl.fit_ensemble(y) self.assertEqual(fit_ensemble.call_count, 1) self.assertIsInstance(fit_ensemble.call_args[0][0], np.ndarray) + +class AutoSklearnClassifierTest(unittest.TestCase): + def test_fit_returns_self(self): + # Test that AutoSklearnClassifier.fit() method returns self. +#TODO: check for every methods that should return self. refit returns automlclassifier object, which should be corrected. + From d11cdfe97ffb655b613f9c67035cc209b63f63bf Mon Sep 17 00:00:00 2001 From: Jin Woo Ahn Date: Wed, 9 May 2018 17:43:14 +0200 Subject: [PATCH 3/6] AutoSklearnClassifier/Regressor's fit, refit, fit_ensemble now return self. --- autosklearn/estimators.py | 23 +++++--- test/test_automl/test_estimators.py | 85 ++++++++++++++++++++++++++++- 2 files changed, 98 insertions(+), 10 deletions(-) diff --git a/autosklearn/estimators.py b/autosklearn/estimators.py index 4a251b7115..aa82096637 100644 --- a/autosklearn/estimators.py +++ b/autosklearn/estimators.py @@ -244,7 +244,7 @@ def build_automl(self): def fit(self, *args, **kwargs): self._automl = self.build_automl() - self._automl.fit(*args, **kwargs) + return self._automl.fit(*args, **kwargs) def fit_ensemble(self, y, task=None, metric=None, precision='32', dataset_name=None, ensemble_nbest=None, @@ -294,9 +294,10 @@ def fit_ensemble(self, y, task=None, metric=None, precision='32', """ if self._automl is None: self._automl = self.build_automl() - return self._automl.fit_ensemble(y, task, metric, precision, - dataset_name, ensemble_nbest, - ensemble_size) + self._automl.fit_ensemble(y, task, metric, precision, + dataset_name, ensemble_nbest, + ensemble_size) + return self def refit(self, X, y): """Refit all models found with fit to new data. @@ -323,7 +324,9 @@ def refit(self, X, y): self """ - return self._automl.refit(X, y) + self._automl.refit(X, y) + return self + def predict(self, X, batch_size=None, n_jobs=1): return self._automl.predict(X, batch_size=batch_size, n_jobs=n_jobs) @@ -451,7 +454,7 @@ def fit(self, X, y, self """ - return super().fit( + super().fit( X=X, y=y, X_test=X_test, @@ -461,6 +464,8 @@ def fit(self, X, y, dataset_name=dataset_name, ) + return self + def predict(self, X, batch_size=None, n_jobs=1): """Predict classes for X. @@ -554,7 +559,7 @@ def fit(self, X, y, """ # Fit is supposed to be idempotent! # But not if we use share_mode. - return super().fit( + super().fit( X=X, y=y, X_test=X_test, @@ -564,6 +569,10 @@ def fit(self, X, y, dataset_name=dataset_name, ) + return self + + + def predict(self, X, batch_size=None, n_jobs=1): """Predict regression target for X. diff --git a/test/test_automl/test_estimators.py b/test/test_automl/test_estimators.py index 4ab2fb6f30..164cb94a0a 100644 --- a/test/test_automl/test_estimators.py +++ b/test/test_automl/test_estimators.py @@ -391,8 +391,87 @@ def test_conversion_of_list_to_np(self, fit_ensemble, refit, fit): self.assertEqual(fit_ensemble.call_count, 1) self.assertIsInstance(fit_ensemble.call_args[0][0], np.ndarray) + class AutoSklearnClassifierTest(unittest.TestCase): - def test_fit_returns_self(self): - # Test that AutoSklearnClassifier.fit() method returns self. -#TODO: check for every methods that should return self. refit returns automlclassifier object, which should be corrected. + # Currentl this class only tests that the methods of AutoSklearnClassifier + # which should return self actually return self. + def test_classification_fit_returns_self(self): + X_train, y_train, X_test, y_test = putil.get_dataset('iris') + automl = AutoSklearnClassifier(time_left_for_this_task=15, + per_run_time_limit=5) + + automl_fitted = automl.fit(X_train, y_train) + self.assertIs(automl_fitted, automl) + + def test_classification_refit_returns_self(self): + X_train, y_train, X_test, y_test = putil.get_dataset('iris') + automl = AutoSklearnClassifier(time_left_for_this_task=15, + per_run_time_limit=5) + + automl.fit(X_train.copy(), y_train.copy()) + automl_refitted = automl.refit(X_train.copy(), y_train.copy()) + self.assertIs(automl_refitted, automl) + + def test_classification_fit_ensemble_returns_self(self): + X_train, y_train, X_test, y_test = putil.get_dataset('iris') + automl = AutoSklearnClassifier(time_left_for_this_task=15, + per_run_time_limit=5, + ensemble_size=0) + + automl.fit(X_train, y_train) + automl_ensemble_fitted = automl.fit_ensemble(y_test, ensemble_size=10) + self.assertIs(automl_ensemble_fitted, automl) + + def test_classification_set_params_returns_self(self): + X_train, y_train, X_test, y_test = putil.get_dataset('iris') + automl = AutoSklearnClassifier(time_left_for_this_task=15, + per_run_time_limit=5) + + automl.fit(X_train, y_train) + params = automl.get_params() + pass + #TODO: where is the set_param method?! + + +class AutoSklearnRegressorTest(unittest.TestCase): + # Currently this class only tests that the methods of AutoSklearnRegressor + # that should return self actually return self. + def test_regression_fit_returns_self(self): + X_train, y_train, X_test, y_test = putil.get_dataset('iris') + automl = AutoSklearnRegressor(time_left_for_this_task=15, + per_run_time_limit=5) + + automl_fitted = automl.fit(X_train, y_train) + self.assertIs(automl_fitted, automl) + + def test_regression_refit_returns_self(self): + X_train, y_train, X_test, y_test = putil.get_dataset('iris') + automl = AutoSklearnRegressor(time_left_for_this_task=15, + per_run_time_limit=5) + + automl.fit(X_train.copy(), y_train.copy()) + automl_refitted = automl.refit(X_train.copy(), y_train.copy()) + self.assertIs(automl_refitted, automl) + + def test_regression_fit_ensemble_returns_self(self): + X_train, y_train, X_test, y_test = putil.get_dataset('iris') + automl = AutoSklearnRegressor(time_left_for_this_task=15, + per_run_time_limit=5, + ensemble_size=0) + + automl.fit(X_train, y_train) + automl_ensemble_fitted = automl.fit_ensemble(y_test, ensemble_size=10) + self.assertIs(automl_ensemble_fitted, automl) + + def test_regression_set_params_returns_self(self): + X_train, y_train, X_test, y_test = putil.get_dataset('iris') + automl = AutoSklearnRegressor(time_left_for_this_task=15, + per_run_time_limit=5) + + automl.fit(X_train, y_train) + params = automl.get_params() + pass + #TODO: where is the set_param method?! +if __name__=="__main__": + unittest.main() \ No newline at end of file From 78074750c0b9677e88f0ed224cd6f27c10505009 Mon Sep 17 00:00:00 2001 From: Jin Woo Ahn Date: Mon, 14 May 2018 17:24:24 +0200 Subject: [PATCH 4/6] fit now returns self. --- autosklearn/estimators.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/autosklearn/estimators.py b/autosklearn/estimators.py index aa82096637..280a69da8d 100644 --- a/autosklearn/estimators.py +++ b/autosklearn/estimators.py @@ -244,7 +244,8 @@ def build_automl(self): def fit(self, *args, **kwargs): self._automl = self.build_automl() - return self._automl.fit(*args, **kwargs) + self._automl.fit(*args, **kwargs) + return self def fit_ensemble(self, y, task=None, metric=None, precision='32', dataset_name=None, ensemble_nbest=None, From 0243ee7f9753d4862c27e0443be888e73d1178fe Mon Sep 17 00:00:00 2001 From: Jin Woo Ahn Date: Mon, 14 May 2018 17:28:20 +0200 Subject: [PATCH 5/6] Delete unittest set_params_returns_self in test_estimators.py --- test/test_automl/test_estimators.py | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/test/test_automl/test_estimators.py b/test/test_automl/test_estimators.py index 164cb94a0a..151d180e47 100644 --- a/test/test_automl/test_estimators.py +++ b/test/test_automl/test_estimators.py @@ -422,16 +422,6 @@ def test_classification_fit_ensemble_returns_self(self): automl_ensemble_fitted = automl.fit_ensemble(y_test, ensemble_size=10) self.assertIs(automl_ensemble_fitted, automl) - def test_classification_set_params_returns_self(self): - X_train, y_train, X_test, y_test = putil.get_dataset('iris') - automl = AutoSklearnClassifier(time_left_for_this_task=15, - per_run_time_limit=5) - - automl.fit(X_train, y_train) - params = automl.get_params() - pass - #TODO: where is the set_param method?! - class AutoSklearnRegressorTest(unittest.TestCase): # Currently this class only tests that the methods of AutoSklearnRegressor @@ -463,15 +453,6 @@ def test_regression_fit_ensemble_returns_self(self): automl_ensemble_fitted = automl.fit_ensemble(y_test, ensemble_size=10) self.assertIs(automl_ensemble_fitted, automl) - def test_regression_set_params_returns_self(self): - X_train, y_train, X_test, y_test = putil.get_dataset('iris') - automl = AutoSklearnRegressor(time_left_for_this_task=15, - per_run_time_limit=5) - - automl.fit(X_train, y_train) - params = automl.get_params() - pass - #TODO: where is the set_param method?! if __name__=="__main__": unittest.main() \ No newline at end of file From d77873a5c9f21f86a46b01b04535d5ecce6cbc07 Mon Sep 17 00:00:00 2001 From: Jin Woo Ahn Date: Wed, 16 May 2018 17:34:17 +0200 Subject: [PATCH 6/6] combined unittests to reduce travis runtime --- test/test_automl/test_estimators.py | 62 +++++++++-------------------- 1 file changed, 19 insertions(+), 43 deletions(-) diff --git a/test/test_automl/test_estimators.py b/test/test_automl/test_estimators.py index 151d180e47..7f335d2270 100644 --- a/test/test_automl/test_estimators.py +++ b/test/test_automl/test_estimators.py @@ -393,66 +393,42 @@ def test_conversion_of_list_to_np(self, fit_ensemble, refit, fit): class AutoSklearnClassifierTest(unittest.TestCase): - # Currentl this class only tests that the methods of AutoSklearnClassifier + # Currently this class only tests that the methods of AutoSklearnClassifier # which should return self actually return self. - def test_classification_fit_returns_self(self): + def test_classification_methods_returns_self(self): X_train, y_train, X_test, y_test = putil.get_dataset('iris') - automl = AutoSklearnClassifier(time_left_for_this_task=15, - per_run_time_limit=5) + automl = AutoSklearnClassifier(time_left_for_this_task=20, + per_run_time_limit=5, + ensemble_size=0) automl_fitted = automl.fit(X_train, y_train) - self.assertIs(automl_fitted, automl) + self.assertIs(automl, automl_fitted) - def test_classification_refit_returns_self(self): - X_train, y_train, X_test, y_test = putil.get_dataset('iris') - automl = AutoSklearnClassifier(time_left_for_this_task=15, - per_run_time_limit=5) + automl_ensemble_fitted = automl.fit_ensemble(y_train, ensemble_size=5) + self.assertIs(automl, automl_ensemble_fitted) - automl.fit(X_train.copy(), y_train.copy()) automl_refitted = automl.refit(X_train.copy(), y_train.copy()) - self.assertIs(automl_refitted, automl) - - def test_classification_fit_ensemble_returns_self(self): - X_train, y_train, X_test, y_test = putil.get_dataset('iris') - automl = AutoSklearnClassifier(time_left_for_this_task=15, - per_run_time_limit=5, - ensemble_size=0) - - automl.fit(X_train, y_train) - automl_ensemble_fitted = automl.fit_ensemble(y_test, ensemble_size=10) - self.assertIs(automl_ensemble_fitted, automl) + self.assertIs(automl, automl_refitted) class AutoSklearnRegressorTest(unittest.TestCase): # Currently this class only tests that the methods of AutoSklearnRegressor # that should return self actually return self. - def test_regression_fit_returns_self(self): - X_train, y_train, X_test, y_test = putil.get_dataset('iris') - automl = AutoSklearnRegressor(time_left_for_this_task=15, - per_run_time_limit=5) + def test_regression_methods_returns_self(self): + X_train, y_train, X_test, y_test = putil.get_dataset('boston') + automl = AutoSklearnRegressor(time_left_for_this_task=20, + per_run_time_limit=5, + ensemble_size=0) automl_fitted = automl.fit(X_train, y_train) - self.assertIs(automl_fitted, automl) + self.assertIs(automl, automl_fitted) - def test_regression_refit_returns_self(self): - X_train, y_train, X_test, y_test = putil.get_dataset('iris') - automl = AutoSklearnRegressor(time_left_for_this_task=15, - per_run_time_limit=5) + automl_ensemble_fitted = automl.fit_ensemble(y_train, ensemble_size=5) + self.assertIs(automl, automl_ensemble_fitted) - automl.fit(X_train.copy(), y_train.copy()) automl_refitted = automl.refit(X_train.copy(), y_train.copy()) - self.assertIs(automl_refitted, automl) - - def test_regression_fit_ensemble_returns_self(self): - X_train, y_train, X_test, y_test = putil.get_dataset('iris') - automl = AutoSklearnRegressor(time_left_for_this_task=15, - per_run_time_limit=5, - ensemble_size=0) - - automl.fit(X_train, y_train) - automl_ensemble_fitted = automl.fit_ensemble(y_test, ensemble_size=10) - self.assertIs(automl_ensemble_fitted, automl) + self.assertIs(automl, automl_refitted) if __name__=="__main__": - unittest.main() \ No newline at end of file + unittest.main()