From 135967890f65b7895aea69688a6d44c62662a25a Mon Sep 17 00:00:00 2001 From: NANCY ANAND <41587186+nancyanand2807@users.noreply.github.com> Date: Mon, 21 Oct 2019 20:32:26 +0530 Subject: [PATCH 1/5] BFS I have added BFS implementation in python. Also the driver code is provided. --- bfs.py | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 bfs.py diff --git a/bfs.py b/bfs.py new file mode 100644 index 0000000..05c9639 --- /dev/null +++ b/bfs.py @@ -0,0 +1,63 @@ +# Python3 Program to print BFS traversal + +from collections import defaultdict + +# This class represents a directed graph +# using adjacency list representation +class Graph: + + # Constructor + def __init__(self): + + # default dictionary to store graph + self.graph = defaultdict(list) + + # function to add an edge to graph + def addEdge(self,u,v): + self.graph[u].append(v) + + # Function to print a BFS of graph + def BFS(self, s): + + # Mark all the vertices as not visited + visited = [False] * (len(self.graph)) + + # Create a queue for BFS + queue = [] + + # Mark the source node as + # visited and enqueue it + queue.append(s) + visited[s] = True + + while queue: + + # Dequeue a vertex from + # queue and print it + s = queue.pop(0) + print (s, end = " ") + + # Get all adjacent vertices of the + # dequeued vertex s. If a adjacent + # has not been visited, then mark it + # visited and enqueue it + for i in self.graph[s]: + if visited[i] == False: + queue.append(i) + visited[i] = True + +# Driver code + + +g = Graph() +g.addEdge(0, 1) +g.addEdge(0, 2) +g.addEdge(1, 2) +g.addEdge(2, 0) +g.addEdge(2, 3) +g.addEdge(3, 3) + +print ("Following is Breadth First Traversal" + " (starting from vertex 2)") +g.BFS(2) + From ec85b42e3acc11b4b2f301cf5522c1a3b26361f6 Mon Sep 17 00:00:00 2001 From: NANCY ANAND <41587186+nancyanand2807@users.noreply.github.com> Date: Mon, 21 Oct 2019 20:42:56 +0530 Subject: [PATCH 2/5] DFS Depth First Traversal algorithm for a graph is implemented in Python. Driver code to test the same is also provided --- dfs.py | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 dfs.py diff --git a/dfs.py b/dfs.py new file mode 100644 index 0000000..4590e21 --- /dev/null +++ b/dfs.py @@ -0,0 +1,58 @@ +# Python3 program to print DFS traversal + +from collections import defaultdict + +# This class represents a directed graph using +# adjacency list representation +class Graph: + + # Constructor + def __init__(self): + + # default dictionary to store graph + self.graph = defaultdict(list) + + # function to add an edge to graph + def addEdge(self, u, v): + self.graph[u].append(v) + + # A function used by DFS + def DFSUtil(self, v, visited): + + # Mark the current node as visited + # and print it + visited[v] = True + print(v, end = ' ') + + # Recur for all the vertices + # adjacent to this vertex + for i in self.graph[v]: + if visited[i] == False: + self.DFSUtil(i, visited) + + # The function to do DFS traversal. It uses + # recursive DFSUtil() + def DFS(self, v): + + # Mark all the vertices as not visited + visited = [False] * (len(self.graph)) + + # Call the recursive helper function + # to print DFS traversal + self.DFSUtil(v, visited) + +# Driver code + +# Create a graph given +# in the above diagram +g = Graph() +g.addEdge(0, 1) +g.addEdge(0, 2) +g.addEdge(1, 2) +g.addEdge(2, 0) +g.addEdge(2, 3) +g.addEdge(3, 3) + +print("Following is DFS from (starting from vertex 2)") +g.DFS(2) + From 69834fbfb89a79ea2b5e6fa492f2d1f9cf726c6d Mon Sep 17 00:00:00 2001 From: NANCY ANAND <41587186+nancyanand2807@users.noreply.github.com> Date: Mon, 21 Oct 2019 20:51:43 +0530 Subject: [PATCH 3/5] Update dfs.py --- dfs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dfs.py b/dfs.py index 4590e21..0af865e 100644 --- a/dfs.py +++ b/dfs.py @@ -12,7 +12,7 @@ class Graph: # default dictionary to store graph self.graph = defaultdict(list) - # function to add an edge to graph + def addEdge(self, u, v): self.graph[u].append(v) From a1d0032ac54eb6592a481100eebf735c2a80d2f6 Mon Sep 17 00:00:00 2001 From: NANCY ANAND <41587186+nancyanand2807@users.noreply.github.com> Date: Mon, 21 Oct 2019 21:58:35 +0530 Subject: [PATCH 4/5] Create perceptron.py This is a single layer perceptron code. --- ML Cookbook/perceptron.py | 41 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 ML Cookbook/perceptron.py diff --git a/ML Cookbook/perceptron.py b/ML Cookbook/perceptron.py new file mode 100644 index 0000000..4900276 --- /dev/null +++ b/ML Cookbook/perceptron.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) From c137ff53a01b4926e69c068ba539eedd5da5eba9 Mon Sep 17 00:00:00 2001 From: NANCY ANAND <41587186+nancyanand2807@users.noreply.github.com> Date: Mon, 21 Oct 2019 21:59:57 +0530 Subject: [PATCH 5/5] Rename perceptron.py to perceptron1.py This is a single layer perceptron code. --- ML Cookbook/perceptron1.py | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 ML Cookbook/perceptron1.py 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)