-
Notifications
You must be signed in to change notification settings - Fork 0
/
linearNN.py
72 lines (54 loc) · 2.84 KB
/
linearNN.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
70
71
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# Τάξη Linear Regression
class LinearRegression:
# Αρχικοποίηση learning_rate και epochs (επαναλήψεις)
# weights & bias = none
# default επιλογές για learning_rate: 0,01 και epochs: 1000
def __init__(self, learning_rate=0.01, epochs=1000):
self.learning_rate = learning_rate
self.epochs = epochs
self.weights = None
self.bias = None
# Training function: fit
def fit(self, X, y):
# shape of X:
# αριθμός παραδειγμάτων εκπαίδευσης
# αριθμός των χαρακτηριστικά
number_of_training, number_of_features = X.shape
# Αρχικοποίηση weights ως μήτρα μηδενικού μεγέθους
# Βias = 0
self.weights = np.zeros((number_of_features, 1))
self.bias = 0
# Αναδιαμόρφωση του y ως (number_of_training,1)
# σε περίπτωση που το σύνολο δεδομένων μας αρχικοποιηθουν ως
# (number_of_training,) όπου μπορεί να προκαλέσει προβλήματα
y = y.values.reshape(number_of_training, 1)
# Αρχικοποίηση άδειας λίστα losses για την αποθήκευση των σφαλμάτων
losses = []
# Αλγόριθμος Gradient Descent (Training loop)
for epoch in range(self.epochs):
# Υπολογισμός πρόβλεψης h(x) = y_hat
y_hat = np.dot(X, self.weights) + self.bias
# Υπολογισμός σφάλματος
loss = np.mean((y_hat - y) ** 2)
# Προσθήκη σφάλματος στη λίστα: losses
losses.append(loss)
# Υπολογισμός παραγώγων παραμέτρων (weights και bias)
dw = (1 / number_of_training) * np.dot(X.T, (y_hat - y))
db = (1 / number_of_training) * np.sum((y_hat - y))
# Ενημέρωση των παραμέτρων
self.weights -= self.learning_rate * dw
self.bias -= self.learning_rate * db
# επιστροφή των παραμέτρων
return self.weights, self.bias, losses
def input_data(bet):
# Διαχωρισμός δεδομένων
X, y, seed = bet.iloc[:, 1:], bet.iloc[:, 0], 40
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, random_state=seed)
# Κλήση της LinearRegression
model = LinearRegression()
w, b, losses = model.fit(X_train, y_train)
# Επιστροφή μέσου σφάλματος με τη χρήση της numpy
return np.mean(losses)