-
Notifications
You must be signed in to change notification settings - Fork 0
/
neuron.py
35 lines (28 loc) · 1009 Bytes
/
neuron.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
class Neuron:
def __init__(self, learning_rate=.01):
self.learning_rate = learning_rate
self.weight = 1
self.bias = 0
@property
def parameters(self):
return self.weight, self.bias
@property
def formula(self):
return f"{round(self.weight, 3)}X + {round(self.bias, 3)}"
def train(self, X, y, epochs=200):
n = len(X)
for epoch in range(epochs):
for idx in range(n):
a = self.predict(X[idx])
error = y[idx] - a
self.weight += (self.learning_rate * error * X[idx])
self.bias += (self.learning_rate * error)
def predict(self, x):
return self.weight*x + self.bias
if __name__ == "__main__":
X = [2, 3, 4, 11, 12, 15]
y = [5, 7, 9, 23, 25, 31]
neuron = Neuron()
neuron.train(X, y, epochs=500)
print("The Formula: ", neuron.formula)
print("Predict(5): ", round(neuron.predict(5), 3))