adding all work done so far (lessons 1 - 5)
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import numpy as np
|
||||
# Setting the random seed, feel free to change it and see different solutions.
|
||||
np.random.seed(42)
|
||||
import pandas as pd
|
||||
|
||||
|
||||
def stepFunction(t):
|
||||
if t >= 0:
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
def prediction(X, W, b):
|
||||
return stepFunction((np.matmul(X, W) + b)[0])
|
||||
|
||||
# TODO: Fill in the code below to implement the perceptron trick.
|
||||
# The function should receive as inputs the data X, the labels y,
|
||||
# the weights W (as an array), and the bias b,
|
||||
# update the weights and bias W, b, according to the perceptron algorithm,
|
||||
# and return W and b.
|
||||
|
||||
|
||||
def perceptronStep(X, y, W, b, learn_rate=0.01):
|
||||
for i in range(len(X)):
|
||||
y_hat = prediction(X[i], W, b)
|
||||
if y[i] - y_hat == 1:
|
||||
W[0] += X[i][0] * learn_rate
|
||||
W[1] += X[i][1] * learn_rate
|
||||
b += learn_rate
|
||||
elif y[i] - y_hat == -1:
|
||||
W[0] -= X[i][0] * learn_rate
|
||||
W[1] -= X[i][1] * learn_rate
|
||||
b -= learn_rate
|
||||
return W, b
|
||||
|
||||
|
||||
# This function runs the perceptron algorithm repeatedly on the dataset,
|
||||
# and returns a few of the boundary lines obtained in the iterations,
|
||||
# for plotting purposes.
|
||||
# Feel free to play with the learning rate and the num_epochs,
|
||||
# and see your results plotted below.
|
||||
|
||||
|
||||
def trainPerceptronAlgorithm(X, y, learn_rate=0.01, num_epochs=25):
|
||||
x_min, x_max = min(X.T[0]), max(X.T[0])
|
||||
y_min, y_max = min(X.T[1]), max(X.T[1])
|
||||
W = np.array(np.random.rand(2, 1))
|
||||
b = np.random.rand(1)[0] + x_max
|
||||
# These are the solution lines that get plotted below.
|
||||
boundary_lines = []
|
||||
for i in range(num_epochs):
|
||||
# In each epoch, we apply the perceptron step.
|
||||
W, b = perceptronStep(X, y, W, b, learn_rate)
|
||||
boundary_lines.append((-W[0] / W[1], -b / W[1]))
|
||||
return boundary_lines
|
||||
|
||||
|
||||
df = pd.read_csv('data.csv', header=None)
|
||||
|
||||
X = df.iloc[:, :-1]
|
||||
X = np.array(X)
|
||||
y = df.iloc[:, 1]
|
||||
y = np.array(y)
|
||||
|
||||
print(trainPerceptronAlgorithm(X, y))
|
||||
# print(X)
|
||||
Reference in New Issue
Block a user