Skip to content

Commit 42430d1

Browse files
committed
Merge branch 'development' of https://github.com/automl/auto-sklearn into development
2 parents d81bbd9 + 7b4702d commit 42430d1

18 files changed

+403
-254
lines changed

autosklearn/automl.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -764,12 +764,23 @@ def sprint_statistics(self):
764764
'limit: %d\n' % num_memout)
765765
return sio.getvalue()
766766

767-
def show_models(self):
767+
def get_models_with_weights(self):
768768
if self.models_ is None or len(self.models_) == 0 or \
769769
self.ensemble_ is None:
770770
self._load_models()
771771

772-
return self.ensemble_.pprint_ensemble_string(self.models_)
772+
return self.ensemble_.get_models_with_weights(self.models_)
773+
774+
def show_models(self):
775+
models_with_weights = self.get_models_with_weights()
776+
777+
with io.StringIO() as sio:
778+
sio.write("[")
779+
for weight, model in models_with_weights:
780+
sio.write("(%f, %s),\n" % (weight, model))
781+
sio.write("]")
782+
783+
return sio.getvalue()
773784

774785
def _create_search_space(self, tmp_dir, backend, datamanager,
775786
include_estimators=None,

autosklearn/ensembles/abstract_ensemble.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ def predict(self, base_models_predictions):
4242
self
4343

4444
@abstractmethod
45-
def pprint_ensemble_string(self, models):
46-
"""Return a nicely-readable representation of the ensmble.
45+
def get_models_with_weights(self, models):
46+
"""Return a list of (weight, model) pairs
4747
4848
Parameters
4949
----------
@@ -53,9 +53,10 @@ def pprint_ensemble_string(self, models):
5353
5454
Returns
5555
-------
56-
str
56+
array : [(weight_1, model_1), ..., (weight_n, model_n)]
5757
"""
5858

59+
5960
@abstractmethod
6061
def get_model_identifiers(self):
6162
"""Return identifiers of models in the ensemble.

autosklearn/ensembles/ensemble_selection.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import random
33

44
import numpy as np
5-
import six
65

76
from autosklearn.constants import *
87
from autosklearn.ensembles.abstract_ensemble import AbstractEnsemble
@@ -204,9 +203,9 @@ def __str__(self):
204203
enumerate(self.identifiers_)
205204
if self.weights_[idx] > 0]))
206205

207-
def pprint_ensemble_string(self, models):
206+
def get_models_with_weights(self, models):
208207
output = []
209-
sio = six.StringIO()
208+
210209
for i, weight in enumerate(self.weights_):
211210
identifier = self.identifiers_[i]
212211
model = models[identifier]
@@ -215,12 +214,7 @@ def pprint_ensemble_string(self, models):
215214

216215
output.sort(reverse=True, key=lambda t: t[0])
217216

218-
sio.write("[")
219-
for weight, model in output:
220-
sio.write("(%f, %s),\n" % (weight, model))
221-
sio.write("]")
222-
223-
return sio.getvalue()
217+
return output
224218

225219
def get_model_identifiers(self):
226220
return self.identifiers_

autosklearn/estimators.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,16 @@ def show_models(self):
7373
"""
7474
return self._automl.show_models()
7575

76+
def get_models_with_weights(self):
77+
"""Return a list of the final ensemble found by auto-sklearn.
78+
79+
Returns
80+
-------
81+
[(weight_1, model_1), ..., (weight_n, model_n)]
82+
83+
"""
84+
return self._automl.get_models_with_weights()
85+
7686
@property
7787
def cv_results_(self):
7888
return self._automl.cv_results_

autosklearn/pipeline/components/regression/ridge_regression.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ def fit(self, X, Y):
2222
fit_intercept=self.fit_intercept,
2323
tol=self.tol,
2424
copy_X=False,
25-
normalize=False)
25+
normalize=False,
26+
random_state=self.random_state)
2627
self.estimator.fit(X, Y)
2728
return self
2829

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
1-
import unittest
1+
import sklearn.ensemble
22

33
from autosklearn.pipeline.components.regression.adaboost import \
44
AdaboostRegressor
5-
from autosklearn.pipeline.util import _test_regressor
5+
from .test_base import BaseRegressionComponentTest
66

7-
import sklearn.metrics
87

8+
class AdaBoostComponentTest(BaseRegressionComponentTest):
99

10-
class AdaBoostComponentTest(unittest.TestCase):
11-
def test_default_configuration(self):
12-
for i in range(2):
13-
predictions, targets = \
14-
_test_regressor(AdaboostRegressor, dataset='boston')
15-
self.assertAlmostEqual(0.60525743737887405,
16-
sklearn.metrics.r2_score(targets,
17-
predictions))
10+
__test__ = True
1811

19-
def test_default_configuration_sparse(self):
20-
for i in range(2):
21-
predictions, targets = \
22-
_test_regressor(AdaboostRegressor, sparse=True, dataset='boston')
23-
self.assertAlmostEqual(0.22111559712318207,
24-
sklearn.metrics.r2_score(targets,
25-
predictions))
12+
res = dict()
13+
res["default_boston"] = 0.60525743737887405
14+
res["default_boston_iterative"] = None
15+
res["default_boston_sparse"] = 0.22111559712318207
16+
res["default_boston_iterative_sparse"] = None
17+
res["default_diabetes"] = 0.25129853514492517
18+
res["default_diabetes_iterative"] = None
19+
res["default_diabetes_sparse"] = 0.090755670764629537
20+
res["default_diabetes_iterative_sparse"] = None
21+
22+
sk_mod = sklearn.ensemble.AdaBoostRegressor
23+
24+
module = AdaboostRegressor
Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
1-
import unittest
1+
import sklearn.linear_model
22

33
from autosklearn.pipeline.components.regression.ard_regression import \
44
ARDRegression
5-
from autosklearn.pipeline.util import _test_regressor
5+
from .test_base import BaseRegressionComponentTest
66

7-
import sklearn.metrics
87

8+
class ARDRegressionComponentTest(BaseRegressionComponentTest):
99

10-
class ARDRegressionComponentTest(unittest.TestCase):
11-
def test_default_configuration(self):
12-
for i in range(2):
13-
predictions, targets = \
14-
_test_regressor(ARDRegression, dataset='boston')
15-
self.assertAlmostEqual(0.70316694175513961,
16-
sklearn.metrics.r2_score(targets,
17-
predictions))
10+
__test__ = True
11+
12+
res = dict()
13+
res["default_boston"] = 0.70316694175513961
14+
res["default_boston_iterative"] = None
15+
res["default_boston_sparse"] = None
16+
res["default_boston_iterative_sparse"] = None
17+
res["default_diabetes"] = 0.4172236487551515
18+
res["default_diabetes_iterative"] = None
19+
res["default_diabetes_sparse"] = None
20+
res["default_diabetes_iterative_sparse"] = None
21+
22+
sk_mod = sklearn.linear_model.ARDRegression
23+
24+
module = ARDRegression
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
import unittest
2+
3+
from autosklearn.pipeline.util import _test_regressor, \
4+
_test_regressor_iterative_fit
5+
6+
from autosklearn.pipeline.constants import *
7+
8+
import sklearn.metrics
9+
10+
11+
class BaseRegressionComponentTest(unittest.TestCase):
12+
13+
res = None
14+
15+
module = None
16+
sk_module = None
17+
18+
# Magic command to not run tests on base class
19+
__test__ = False
20+
21+
def test_default_boston(self):
22+
for i in range(2):
23+
predictions, targets = \
24+
_test_regressor(dataset="boston",
25+
Regressor=self.module)
26+
27+
if "default_boston_le_ge" in self.res:
28+
# Special treatment for Gaussian Process Regression
29+
self.assertLessEqual(
30+
sklearn.metrics.r2_score(y_true=targets,
31+
y_pred=predictions),
32+
self.res["default_boston_le_ge"][0])
33+
self.assertGreaterEqual(
34+
sklearn.metrics.r2_score(y_true=targets,
35+
y_pred=predictions),
36+
self.res["default_boston_le_ge"][1])
37+
else:
38+
self.assertAlmostEqual(self.res["default_boston"],
39+
sklearn.metrics.r2_score(targets,
40+
predictions),
41+
places=self.res.get(
42+
"default_boston_places", 7))
43+
44+
def test_default_boston_iterative_fit(self):
45+
if not hasattr(self.module, 'iterative_fit'):
46+
return
47+
48+
for i in range(2):
49+
predictions, targets = \
50+
_test_regressor_iterative_fit(dataset="boston",
51+
Regressor=self.module)
52+
self.assertAlmostEqual(self.res["default_boston_iterative"],
53+
sklearn.metrics.r2_score(targets,
54+
predictions),
55+
places=self.res.get(
56+
"default_boston_iterative_places", 7))
57+
58+
def test_default_boston_iterative_sparse_fit(self):
59+
if not hasattr(self.module, 'iterative_fit'):
60+
return
61+
if SPARSE not in self.module.get_properties()["input"]:
62+
return
63+
64+
for i in range(2):
65+
predictions, targets = \
66+
_test_regressor_iterative_fit(dataset="boston",
67+
Regressor=self.module,
68+
sparse=True)
69+
self.assertAlmostEqual(self.res["default_boston_iterative_sparse"],
70+
sklearn.metrics.r2_score(targets,
71+
predictions),
72+
places=self.res.get(
73+
"default_boston_iterative_sparse_places", 7))
74+
75+
def test_default_boston_sparse(self):
76+
if SPARSE not in self.module.get_properties()["input"]:
77+
return
78+
79+
for i in range(2):
80+
predictions, targets = \
81+
_test_regressor(dataset="boston",
82+
Regressor=self.module,
83+
sparse=True)
84+
self.assertAlmostEqual(self.res["default_boston_sparse"],
85+
sklearn.metrics.r2_score(targets,
86+
predictions),
87+
places=self.res.get(
88+
"default_boston_sparse_places", 7))
89+
90+
def test_default_diabetes(self):
91+
for i in range(2):
92+
predictions, targets = \
93+
_test_regressor(dataset="diabetes",
94+
Regressor=self.module)
95+
96+
self.assertAlmostEqual(self.res["default_diabetes"],
97+
sklearn.metrics.r2_score(targets,
98+
predictions),
99+
places=self.res.get(
100+
"default_diabetes_places", 7))
101+
102+
def test_default_diabetes_iterative_fit(self):
103+
if not hasattr(self.module, 'iterative_fit'):
104+
return
105+
106+
for i in range(2):
107+
predictions, targets = \
108+
_test_regressor_iterative_fit(dataset="diabetes",
109+
Regressor=self.module)
110+
self.assertAlmostEqual(self.res["default_diabetes_iterative"],
111+
sklearn.metrics.r2_score(targets,
112+
predictions),
113+
places=self.res.get(
114+
"default_diabetes_iterative_places", 7))
115+
116+
def test_default_diabetes_iterative_sparse_fit(self):
117+
if not hasattr(self.module, 'iterative_fit'):
118+
return
119+
if SPARSE not in self.module.get_properties()["input"]:
120+
return
121+
122+
for i in range(2):
123+
predictions, targets = \
124+
_test_regressor_iterative_fit(dataset="diabetes",
125+
Regressor=self.module,
126+
sparse=True)
127+
self.assertAlmostEqual(self.res["default_diabetes_iterative_sparse"],
128+
sklearn.metrics.r2_score(targets,
129+
predictions),
130+
places=self.res.get(
131+
"default_diabetes_iterative_sparse_places", 7))
132+
133+
def test_default_diabetes_sparse(self):
134+
if SPARSE not in self.module.get_properties()["input"]:
135+
return
136+
137+
for i in range(2):
138+
predictions, targets = \
139+
_test_regressor(dataset="diabetes",
140+
Regressor=self.module,
141+
sparse=True)
142+
self.assertAlmostEqual(self.res["default_diabetes_sparse"],
143+
sklearn.metrics.r2_score(targets,
144+
predictions),
145+
places=self.res.get(
146+
"default_diabetes_sparse_places", 7))
Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
1-
import unittest
1+
import sklearn.tree
22

3-
from autosklearn.pipeline.components.regression.decision_tree import DecisionTree
4-
from autosklearn.pipeline.util import _test_regressor
3+
from autosklearn.pipeline.components.regression.decision_tree import \
4+
DecisionTree
5+
from .test_base import BaseRegressionComponentTest
56

6-
import sklearn.metrics
77

8+
class DecisionTreeComponentTest(BaseRegressionComponentTest):
89

9-
class DecisionTreetComponentTest(unittest.TestCase):
10-
def test_default_configuration(self):
11-
for i in range(2):
12-
predictions, targets = _test_regressor(DecisionTree,)
13-
self.assertAlmostEqual(0.1564592449511697,
14-
sklearn.metrics.r2_score(targets,
15-
predictions))
10+
__test__ = True
1611

17-
def test_default_configuration_sparse(self):
18-
for i in range(2):
19-
predictions, targets = _test_regressor(DecisionTree, sparse=True)
20-
self.assertAlmostEqual(-0.020818312539637507,
21-
sklearn.metrics.r2_score(targets,
22-
predictions))
12+
res = dict()
13+
res["default_boston"] = 0.35616796434879905
14+
res["default_boston_iterative"] = None
15+
res["default_boston_sparse"] = 0.18031669797027394
16+
res["default_boston_iterative_sparse"] = None
17+
res["default_diabetes"] = 0.1564592449511697
18+
res["default_diabetes_iterative"] = None
19+
res["default_diabetes_sparse"] = -0.020818312539637507
20+
res["default_diabetes_iterative_sparse"] = None
21+
22+
sk_mod = sklearn.tree.DecisionTreeRegressor
23+
24+
module = DecisionTree

0 commit comments

Comments
 (0)