Passed
Push — master ( 19b221...6b2285 )
by Simon
01:39
created

insight.insight.Insight.__init__()   A

Complexity

Conditions 1

Size

Total Lines 4
Code Lines 4

Duplication

Lines 4
Ratio 100 %

Importance

Changes 0
Metric Value
eloc 4
dl 4
loc 4
rs 10
c 0
b 0
f 0
cc 1
nop 4
1
# Author: Simon Blanke
2
# Email: [email protected]
3
# License: MIT License
4
5
import numpy as np
6
import pandas as pd
7
import plotly as py
8
import plotly.graph_objects as go
9
import plotly.express as px
10
11
12
from ...hyperactive import Hyperactive
13
14
15 View Code Duplication
class Insight:
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
16
    def __init__(self, search_config, X, y):
17
        self.search_config = search_config
18
        self.X = X
19
        self.y = y
20
21
22
    def plot_performance(self, runs=3, path=None, optimizers="all"):
23
        if optimizers == "all":
24
            optimizers = [
25
                "HillClimbing",
26
                "StochasticHillClimbing",
27
                "TabuSearch",
28
                "RandomSearch",
29
                "RandomRestartHillClimbing",
30
                "RandomAnnealing",
31
                "SimulatedAnnealing",
32
                "StochasticTunneling",
33
                "ParallelTempering",
34
                "ParticleSwarm",
35
                "EvolutionStrategy",
36
                "Bayesian"]
37
38
        eval_times = []
39
        total_times = []
40
        for run in range(runs):
41
42
            eval_time = []
43
            total_time = []
44
            for optimizer in optimizers:
45
                opt = Hyperactive(self.X, self.y, memory=False)
46
                opt.search(self.search_config, n_iter=3, optimizer=optimizer)
47
48
                eval_time.append(opt.eval_time)
49
                total_time.append(opt.total_time)
50
51
            eval_time = np.array(eval_time)
52
            total_time = np.array(total_time)
53
54
            eval_times.append(eval_time)
55
            total_times.append(total_time)
56
57
        eval_times = np.array(eval_times)
58
        total_times = np.array(total_times)
59
        opt_times = np.subtract(total_times, eval_times)
60
61
        opt_time_mean = opt_times.mean(axis=0)
62
        eval_time_mean = eval_times.mean(axis=0)
63
        total_time_mean = total_times.mean(axis=0)
64
65
        opt_time_std = opt_times.std(axis=0)
66
        eval_time_std = eval_times.std(axis=0)
67
68
        eval_time = eval_time_mean/total_time_mean
69
        opt_time = opt_time_mean/total_time_mean
70
71
        fig = go.Figure(data=[
72
            go.Bar(name='Eval time', x=optimizers, y=eval_time),
73
            go.Bar(name='Opt time', x=optimizers, y=opt_time)
74
        ])
75
        fig.update_layout(barmode='stack')
76
        py.offline.plot(fig, filename="sampleplot.html")
77
78
79
    def plot_search_path(self, path=None, optimizers=["HillClimbing"]):
80
        for optimizer in optimizers:
81
            opt = Hyperactive(self.X, self.y, memory=False, verbosity=10)
82
            opt.search(self.search_config, n_iter=20, optimizer=optimizer)
83
84
            pos_list = opt.pos_list
85
            score_list = opt.score_list
86
87
            pos_list = np.array(pos_list)
88
            score_list = np.array(score_list)
89
90
            pos_list = np.squeeze(pos_list)
91
            score_list = np.squeeze(score_list)
92
93
            df = pd.DataFrame(
94
                {"n_neighbors": pos_list[:, 0], "leaf_size": pos_list[:, 1], "score": score_list}
95
            )
96
97
            layout = go.Layout(
98
                xaxis=dict(
99
                    range=[0, 50]
100
                ),
101
                yaxis=dict(
102
                    range=[0, 50]
103
                )
104
            )
105
            fig = go.Figure(data=go.Scatter(
106
                x = df["n_neighbors"],
107
                y = df["leaf_size"],
108
                mode='lines+markers',
109
                marker=dict(
110
                    size=10,
111
                    color=df["score"],
112
                    colorscale='Viridis', # one of plotly colorscales
113
                    showscale=True
114
                )
115
            ),
116
            layout=layout
117
            )
118
119
            py.offline.plot(fig, filename="search_path" + optimizer + ".html")