Skip to content

Commit 013a273

Browse files
ahn1340mfeurer
authored andcommitted
Fix fit, refit, fit_ensemble not returning self + Unit tests (#476)
* . * . * AutoSklearnClassifier/Regressor's fit, refit, fit_ensemble now return self. * fit now returns self. * Delete unittest set_params_returns_self in test_estimators.py * combined unittests to reduce travis runtime
1 parent d332957 commit 013a273

File tree

3 files changed

+59
-7
lines changed

3 files changed

+59
-7
lines changed

autosklearn/estimators.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ def build_automl(self):
245245
def fit(self, *args, **kwargs):
246246
self._automl = self.build_automl()
247247
self._automl.fit(*args, **kwargs)
248+
return self
248249

249250
def fit_ensemble(self, y, task=None, metric=None, precision='32',
250251
dataset_name=None, ensemble_nbest=None,
@@ -294,9 +295,10 @@ def fit_ensemble(self, y, task=None, metric=None, precision='32',
294295
"""
295296
if self._automl is None:
296297
self._automl = self.build_automl()
297-
return self._automl.fit_ensemble(y, task, metric, precision,
298-
dataset_name, ensemble_nbest,
299-
ensemble_size)
298+
self._automl.fit_ensemble(y, task, metric, precision,
299+
dataset_name, ensemble_nbest,
300+
ensemble_size)
301+
return self
300302

301303
def refit(self, X, y):
302304
"""Refit all models found with fit to new data.
@@ -323,7 +325,9 @@ def refit(self, X, y):
323325
self
324326
325327
"""
326-
return self._automl.refit(X, y)
328+
self._automl.refit(X, y)
329+
return self
330+
327331

328332
def predict(self, X, batch_size=None, n_jobs=1):
329333
return self._automl.predict(X, batch_size=batch_size, n_jobs=n_jobs)
@@ -451,7 +455,7 @@ def fit(self, X, y,
451455
self
452456
453457
"""
454-
return super().fit(
458+
super().fit(
455459
X=X,
456460
y=y,
457461
X_test=X_test,
@@ -461,6 +465,8 @@ def fit(self, X, y,
461465
dataset_name=dataset_name,
462466
)
463467

468+
return self
469+
464470
def predict(self, X, batch_size=None, n_jobs=1):
465471
"""Predict classes for X.
466472
@@ -554,7 +560,7 @@ def fit(self, X, y,
554560
"""
555561
# Fit is supposed to be idempotent!
556562
# But not if we use share_mode.
557-
return super().fit(
563+
super().fit(
558564
X=X,
559565
y=y,
560566
X_test=X_test,
@@ -564,6 +570,10 @@ def fit(self, X, y,
564570
dataset_name=dataset_name,
565571
)
566572

573+
return self
574+
575+
576+
567577
def predict(self, X, batch_size=None, n_jobs=1):
568578
"""Predict regression target for X.
569579

doc/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
#'reference_url': {
7070
# 'autosklearn': None
7171
#},
72-
#'backreferences_dir': 'gen_modules/backreferences'
72+
'backreferences_dir': False
7373
}
7474

7575
# Add any paths that contain templates here, relative to this directory.

test/test_automl/test_estimators.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,3 +390,45 @@ def test_conversion_of_list_to_np(self, fit_ensemble, refit, fit):
390390
automl.fit_ensemble(y)
391391
self.assertEqual(fit_ensemble.call_count, 1)
392392
self.assertIsInstance(fit_ensemble.call_args[0][0], np.ndarray)
393+
394+
395+
class AutoSklearnClassifierTest(unittest.TestCase):
396+
# Currently this class only tests that the methods of AutoSklearnClassifier
397+
# which should return self actually return self.
398+
def test_classification_methods_returns_self(self):
399+
X_train, y_train, X_test, y_test = putil.get_dataset('iris')
400+
automl = AutoSklearnClassifier(time_left_for_this_task=20,
401+
per_run_time_limit=5,
402+
ensemble_size=0)
403+
404+
automl_fitted = automl.fit(X_train, y_train)
405+
self.assertIs(automl, automl_fitted)
406+
407+
automl_ensemble_fitted = automl.fit_ensemble(y_train, ensemble_size=5)
408+
self.assertIs(automl, automl_ensemble_fitted)
409+
410+
automl_refitted = automl.refit(X_train.copy(), y_train.copy())
411+
self.assertIs(automl, automl_refitted)
412+
413+
414+
class AutoSklearnRegressorTest(unittest.TestCase):
415+
# Currently this class only tests that the methods of AutoSklearnRegressor
416+
# that should return self actually return self.
417+
def test_regression_methods_returns_self(self):
418+
X_train, y_train, X_test, y_test = putil.get_dataset('boston')
419+
automl = AutoSklearnRegressor(time_left_for_this_task=20,
420+
per_run_time_limit=5,
421+
ensemble_size=0)
422+
423+
automl_fitted = automl.fit(X_train, y_train)
424+
self.assertIs(automl, automl_fitted)
425+
426+
automl_ensemble_fitted = automl.fit_ensemble(y_train, ensemble_size=5)
427+
self.assertIs(automl, automl_ensemble_fitted)
428+
429+
automl_refitted = automl.refit(X_train.copy(), y_train.copy())
430+
self.assertIs(automl, automl_refitted)
431+
432+
433+
if __name__=="__main__":
434+
unittest.main()

0 commit comments

Comments
 (0)