diff --git a/perceptron/perceptron.py b/perceptron/perceptron.py new file mode 100644 index 0000000..483dc10 --- /dev/null +++ b/perceptron/perceptron.py @@ -0,0 +1,65 @@ +import numpy as np +class Perceptron(object): + """ + Perceptron classifier + ___________________ + parameters + __________________ + eta: float + learning rate betweeen 0.0 and 1.0 + n_iter: int + Passes over the training dataset + + ___________________ + Attributes + ___________________ + w_: 1d array + weights after training + errors_: list + Number of msiclassifications for every epoch + """ + def __init__(self, eta, n_iter): + self.eta = eta + self.n_iter = n_iter + + def fit(self, X, y): + """ + Fit training data + ______________________ + parameters + ______________________ + X: {array-like}, shape = [n_samples, n_features] + Training vectors where n_samples is the number of samples + and n_features is the number of features + y: array-like, shape = [n_samples] + Target values + + ____________________ + Returns + ____________________ + self: object + """ + self.w_ = np.zeros(1 + X.shape[1]) + self.errors_ = [] + + for _ in range(self.n_iter): + errors = 0 + for xi,target in zip(X, y): + update = self.eta * (target - self.predict(xi)) + self.w_[1:] += update * xi + self.w_[0] += update + errors += int(update != 0.0) + self.errors_.append(errors) + return self + + def net_input(self, X): + """ + Calculate net input + """ + return np.dot(X, self.w_[1:]) + self.w_[0] + + def predict(self, X): + """ + Return class label after unit step + """ + return np.where(self.net_input(X) >= 0.0, 1, -1) \ No newline at end of file