-
Notifications
You must be signed in to change notification settings - Fork 0
/
regression.py
69 lines (62 loc) · 2.31 KB
/
regression.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
67
68
69
import os
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.metrics import r2_score
from network import Network
PATH = os.path.join("data", "regression")
datasets = ["data.activation", "data.cube"]
sizes = [100, 500, 1000, 10000]
N = 100
fig, axs = plt.subplots(2, len(sizes), figsize=(12, 8))
fig.tight_layout(pad=6.0)
for j, size in enumerate(sizes):
train = pd.read_csv(os.path.join(PATH, f"{datasets[0]}.train.{size}.csv"))
test = pd.read_csv(os.path.join(PATH, f"{datasets[0]}.test.{size}.csv"))
MLP = Network(
[1, 2, 2, 1],
regression=True,
n_epochs=10000,
batch_size=size // 100,
activation_type="sigmoid",
learning_rate=0.01,
momentum_rate=0.01,
print_progress=True,
)
MLP.train(train[["x"]].to_numpy(), train[["y"]].to_numpy())
prediction = MLP.fit(test[["x"]].to_numpy(), predict=True)
p = axs[0][j].scatter(
test[["x"]],
test[["y"]],
c="red",
)
r = axs[0][j].scatter(train[["x"]], train[["y"]], c="green")
q = axs[0][j].scatter(test[["x"]], prediction, c="blue")
axs[0][j].legend([p, r, q], ["Test data", "Training data", "Prediction data"])
score = r2_score(test[["y"]], prediction)
axs[0][j].set_title(
f"Network: {[1, 2, 2, 1]}, \nsize: {size } \nr2 score: {round(score,4)}",
)
for j, size in enumerate(sizes):
train = pd.read_csv(os.path.join(PATH, f"{datasets[1]}.train.{size}.csv"))
test = pd.read_csv(os.path.join(PATH, f"{datasets[1]}.test.{size}.csv"))
MLP = Network(
[1, 3, 3, 1],
regression=True,
n_epochs=10000,
batch_size=size // 100,
activation_type="sigmoid",
learning_rate=0.01,
momentum_rate=0.01,
print_progress=True,
)
MLP.train(train[["x"]].to_numpy(), train[["y"]].to_numpy())
prediction = MLP.fit(test[["x"]].to_numpy(), predict=True)
p = axs[1][j].scatter(test[["x"]], test[["y"]], c="red")
r = axs[1][j].scatter(train[["x"]], train[["y"]], c="green")
q = axs[1][j].scatter(test[["x"]], prediction, c="blue")
axs[1][j].legend([p, r, q], ["Test data", "Training data", "Prediction data"])
score = r2_score(test[["y"]], prediction)
axs[1][j].set_title(
f"Network: {[1, 3, 3, 1]}, \nsize: { size} \nr2 score:{round(score,4)}"
)
plt.show()