@ -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) |
@ -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) |
@ -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) | |||||
@ -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) | |||||
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) | |||||