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
|
|
|
|