def perceptron(X, y, w, b, learning_rate=0.1, num_epochs=100):
for epoch in range(num_epochs): for i in range(X.shape[0]): z = np.dot(X[i], w) + b if z > 0: y_pred = 1 else: y_pred = -1 if y_pred != y[i]: w = w + learning_rate * y[i] * X[i] b = b + learning_rate * y[i] return w, b