Passed
Push — master ( 5f74ba...10a0f1 )
by Simon
01:34
created

stacking_example.stacking()   A

Complexity

Conditions 1

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 7
dl 0
loc 10
rs 10
c 0
b 0
f 0
cc 1
nop 3
1
# disables sklearn warnings
2
def warn(*args, **kwargs):
3
    pass
4
5
6
import warnings
7
8
warnings.warn = warn
9
10
import itertools
11
12
from sklearn.datasets import load_breast_cancer
13
from sklearn.model_selection import cross_val_score
14
from mlxtend.classifier import StackingClassifier
15
16
from sklearn.ensemble import (
17
    GradientBoostingClassifier,
18
    RandomForestClassifier,
19
    ExtraTreesClassifier,
20
)
21
22
from sklearn.neighbors import KNeighborsClassifier
23
from sklearn.neural_network import MLPClassifier
24
from sklearn.gaussian_process import GaussianProcessClassifier
25
from sklearn.tree import DecisionTreeClassifier
26
from sklearn.naive_bayes import GaussianNB
27
28
from sklearn.linear_model import LogisticRegression
29
from sklearn.linear_model.ridge import RidgeClassifier
30
31
from hyperactive import Hyperactive
32
33
data = load_breast_cancer()
34
X, y = data.data, data.target
35
36
37
gbc = GradientBoostingClassifier()
38
rfc = RandomForestClassifier()
39
etc = ExtraTreesClassifier()
40
41
mlp = MLPClassifier()
42
gnb = GaussianNB()
43
gpc = GaussianProcessClassifier()
44
dtc = DecisionTreeClassifier()
45
knn = KNeighborsClassifier()
46
47
lr = LogisticRegression()
48
rc = RidgeClassifier()
49
50
51
def stacking(para, X, y):
52
    stack_lvl_0 = StackingClassifier(
53
        classifiers=para["lvl_0"], meta_classifier=para["top"]
54
    )
55
    stack_lvl_1 = StackingClassifier(
56
        classifiers=para["lvl_1"], meta_classifier=stack_lvl_0
57
    )
58
    scores = cross_val_score(stack_lvl_1, X, y, cv=3)
59
60
    return scores.mean()
61
62
63
def get_combinations(models):
64
    comb = []
65
    for i in range(0, len(models) + 1):
66
        for subset in itertools.permutations(models, i):
67
            if len(subset) == 0:
68
                continue
69
            comb.append(list(subset))
70
    return comb
71
72
73
top = [lr, dtc, gnb, rc]
74
models_0 = [gpc, dtc, mlp, gnb, knn]
75
models_1 = [gbc, rfc, etc]
76
77
stack_lvl_0_clfs = get_combinations(models_0)
78
stack_lvl_1_clfs = get_combinations(models_1)
79
80
81
search_config = {
82
    stacking: {"lvl_1": stack_lvl_1_clfs, "lvl_0": stack_lvl_0_clfs, "top": top}
83
}
84
85
86
opt = Hyperactive(search_config, n_jobs=2, n_iter=150)
87
opt.search(X, y)
88