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 36 37 38 39 40 41 42 43 44 45 46 47
| import pandas as pd
np.random.seed(42)
def stepFunction(t): if t >= 0: return 1 return 0
def prediction(X, W, b): return stepFunction((np.matmul(X,W)+b)[0])
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 elif y[i] - y_hat == -1: W[0] -= X[i][0]*learn_rate W[1] -= X[i][1]*learn_rate return W, b
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 boundary_lines = [] for i in range(num_epochs): W, b = perceptronStep(X, y, W, b, learn_rate) boundary_lines.append((-W[0]/W[1], -b/W[1])) return boundary_lines
data = np.asarray(pd.read_csv('data.csv')) x = data[:, 0:data.shape[1]-1] y = data[:, -1]
res = trainPerceptronAlgorithm(x, y)
|