In [1]:
    
import numpy as np
    
In [2]:
    
learning_rate = 0.2
iteration = 100
    
In [3]:
    
X = np.array([
        [1, 0, 0],
        [1, 1, 0],
        [1, 0, 1],
        [1, 1, 1]
    ])
    
In [4]:
    
t = np.array([0,1,1,1])
    
In [5]:
    
m, n = X.shape
    
In [6]:
    
y = lambda x: 1 if x > 0 else 0
    
In [7]:
    
errors = []
weights = np.random.rand(n).reshape(3,1).T
for i in range(iteration):
    random_row = np.random.choice(m)
    X_row = X[random_row].reshape(3,1)
    weights = weights + learning_rate * (t[random_row] - y(np.dot(weights, X_row))) * X[random_row]
    error = t[random_row] - y(np.dot(weights, X_row)) # cost function
    errors.append(error)
    
In [8]:
    
list(map(y, np.dot(X, weights.T)))
    
    Out[8]:
In [ ]: