-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdemo_train_mlp.py
66 lines (54 loc) · 2.53 KB
/
demo_train_mlp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#%%
import pandas as pd
import numpy as np
from mini_keras.loss_functions import BinaryCrossEntropy
from mini_keras.activation_functions import LReLU, SoftMax
from mini_keras.models import Sequential
from mini_keras.layers import Dense
from mini_keras.utils import one_hot, standardize, split_dataset
pd.options.mode.chained_assignment = None
dataset_path = 'datasets/data-multilayer-perceptron.csv'
labels = ['id', 'diagnosis', 'mean radius', 'mean texture',
'mean perimeter', 'mean area', 'mean smoothness', 'mean compactness',
'mean concavity', 'mean concave points', 'mean symmetry', 'mean fractal dimension',
'SE radius', 'SE texture', 'SE perimeter', 'SE area',
'SE smoothness', 'SE compactness', 'SE concavity', 'SE concave points',
'SE symmetry', 'SE fractal dimension', 'worst radius', 'worst texture',
'worst perimeter', 'worst area', 'worst smoothness', 'worst compactness',
'worst concavity', 'worst concave points', 'worst symmetry', 'worst fractal dimension']
def print_full(x):
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', 2000)
pd.set_option('display.float_format', '{:20,.2f}'.format)
pd.set_option('display.max_colwidth', None)
print(x.info())
pd.reset_option('display.max_rows')
pd.reset_option('display.max_columns')
pd.reset_option('display.width')
pd.reset_option('display.float_format')
pd.reset_option('display.max_colwidth')
# %% read file
full_dataset = pd.read_csv(dataset_path, names=labels)
#%% preprocess data
dataset = full_dataset.iloc[:,1:32]
Y, Y_labels = one_hot(dataset['diagnosis'].to_numpy())
dataset = dataset.drop('diagnosis', axis=1)
dataset = standardize(dataset)
dataset['Y'] = Y.tolist()
train_set, validation_set = split_dataset(dataset, 0.5)
X_train = train_set.iloc[:,:-1].to_numpy()
X_validation = validation_set.iloc[:,:-1].to_numpy()
Y_train = np.vstack(train_set['Y'].to_numpy())
Y_validation = np.vstack(validation_set['Y'].to_numpy())
validation_set = {'X': X_validation, 'Y': Y_validation}
# %%
model = Sequential([Dense((30, 8), activation=LReLU),
Dense((8, 5), activation=LReLU),
Dense((5, 2), activation=SoftMax)], BinaryCrossEntropy)
#%%
model.fit(X_train, Y_train, epochs=700, learning_rate=0.01, batch_size=32, validation_set=validation_set)
print("training set", model.score(X_train, Y_train))
print("validation set", model.score(X_validation, Y_validation))
#%%
model.save("MLP")