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

MetaRegressor.__init__()   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
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