Passed
Push — master ( b478a2...16a37b )
by Simon
01:57 queued 10s
created

hyperactive.extensions.meta_learn.meta_regressor   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 34
dl 0
loc 53
rs 10
c 0
b 0
f 0
wmc 8

7 Methods

Rating   Name   Duplication   Size   Complexity  
A MetaRegressor.fit() 0 2 1
A MetaRegressor.__init__() 0 3 1
A MetaRegressor._scale() 0 7 1
A MetaRegressor.store_model() 0 2 1
A MetaRegressor.load_model() 0 2 1
A MetaRegressor.predict() 0 9 1
A MetaRegressor._train_regressor() 0 6 2
1
# Author: Simon Blanke
2
# Email: [email protected]
3
# License: MIT License
4
5
import pandas as pd
6
7
from sklearn.ensemble import GradientBoostingRegressor
8
from sklearn.externals import joblib
9
from sklearn.preprocessing import MinMaxScaler
10
11
from ._recognizer import Recognizer
12
from ._predictor import Predictor
13
14
15
class MetaRegressor:
16
    def __init__(self):
17
        self.meta_reg = None
18
        self.score_col_name = "mean_test_score"
19
20
    def fit(self, X, y):
21
        self._train_regressor(X, y)
22
23
    def predict(self, X, y):
24
        self.recognizer = Recognizer(self.search_config)
25
        self.predictor = Predictor(self.search_config, self.meta_regressor_path)
26
27
        X_test = self.recognizer.get_test_metadata([X, y])
28
29
        best_hyperpara_dict, best_score = self.predictor.search(X_test)
30
31
        return best_hyperpara_dict, best_score
32
33
    def _scale(self, y):
34
        # scale the score -> important for comparison of meta data from datasets in meta regressor training
35
        scaler = MinMaxScaler()
36
        y = scaler.fit_transform(y)
37
        y = pd.DataFrame(y, columns=["mean_test_score"])
38
39
        return y
40
41
    def _train_regressor(self, X, y):
42
        if self.meta_reg is None:
43
            n_estimators = int(y.shape[0] / 50 + 50)
44
45
            self.meta_reg = GradientBoostingRegressor(n_estimators=n_estimators)
46
            self.meta_reg.fit(X, y)
47
48
    def store_model(self, path):
49
        joblib.dump(self.meta_reg, path)
50
51
    def load_model(self, path):
52
        self.meta_reg = joblib.load(path)
53