diff --git a/ML Cookbook/perceptron1.py b/ML Cookbook/perceptron1.py new file mode 100644 index 0000000..4900276 --- /dev/null +++ b/ML Cookbook/perceptron1.py @@ -0,0 +1,41 @@ +import numpy as np + +class Perceptron(object): + """Implements a perceptron network""" + def __init__(self, input_size, lr=1, epochs=100): + self.W = np.zeros(input_size+1) + # add one for bias + self.epochs = epochs + self.lr = lr + + #activation function + def activation_fn(self, x): + #return (x >= 0).astype(np.float32) + return 1 if x >= 0 else 0 + + #we need a prediction function to run an input through the perceptron and return an output. + def predict(self, x): + z = self.W.T.dot(x) + a = self.activation_fn(z) + return a + + def fit(self, X, d): + for _ in range(self.epochs): + for i in range(d.shape[0]): + x = np.insert(X[i], 0, 1) + y = self.predict(x) + e = d[i] - y + self.W = self.W + self.lr * e * x +#the easiset set of data that we can provide is the AND gate. Given is set of inputs and outputs. +if __name__ == '__main__': + X = np.array([ + [0, 0], + [0, 1], + [1, 0], + [1, 1] + ]) + d = np.array([0, 0, 0, 1]) + + perceptron = Perceptron(input_size=2) + perceptron.fit(X, d) + print(perceptron.W)