Passed
Pull Request — master (#101)
by Simon
01:18
created

keras.KerasMultiLayerPerceptron._score()   A

Complexity

Conditions 1

Size

Total Lines 27
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 21
nop 2
dl 0
loc 27
rs 9.376
c 0
b 0
f 0
1
from tensorflow import keras
2
from sklearn.datasets import make_classification
3
from sklearn.model_selection import train_test_split
4
5
from hyperactive import BaseExperiment
6
7
8
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
9
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2)
10
11
12
class KerasMultiLayerPerceptron(BaseExperiment):
13
    """
14
    A class for creating and evaluating a Keras-based Multi-Layer Perceptron (MLP) model.
15
16
    This class inherits from BaseExperiment and is designed to build a simple MLP
17
    using Keras, compile it with the Adam optimizer, and train it on the provided
18
    training data. The model consists of one hidden dense layer with configurable
19
    size and activation function, followed by an output layer with a sigmoid
20
    activation for binary classification.
21
22
    Attributes:
23
        X_train (array-like): Training feature data.
24
        X_val (array-like): Validation feature data.
25
        y_train (array-like): Training target data.
26
        y_val (array-like): Validation target data.
27
28
    Methods:
29
        _score(**params): Builds, compiles, and trains the MLP model using the
30
        specified parameters for the hidden layer, and returns the validation
31
        accuracy.
32
    """
33
34
    def __init__(self, X_train, X_val, y_train, y_val):
35
        super().__init__()
36
37
        self.X_train = X_train
38
        self.X_val = X_val
39
        self.y_train = y_train
40
        self.y_val = y_val
41
42
    def _score(self, **params):
43
        dense_layer_0 = params["dense_layer_0"]
44
        activation_layer_0 = params["activation_layer_0"]
45
46
        model = keras.Sequential(
47
            [
48
                keras.layers.Dense(
49
                    dense_layer_0,
50
                    activation=activation_layer_0,
51
                    input_shape=(20,),
52
                ),
53
                keras.layers.Dense(1, activation="sigmoid"),
54
            ]
55
        )
56
        model.compile(
57
            optimizer=keras.optimizers.Adam(learning_rate=0.01),
58
            loss="binary_crossentropy",
59
            metrics=["accuracy"],
60
        )
61
        model.fit(
62
            self.X_train,
63
            self.y_train,
64
            batch_size=32,
65
            epochs=10,
66
            validation_data=(self.X_val, self.y_val),
67
        )
68
        return model.evaluate(X_val, y_val)[1]
69