In [2]:
import numpy as np

In [3]:
class Perceptron(object):
    """
    A simple Perceptron classifier
    
    Parameters
    ----------
    eta : float
        Learning rate (between 0.00 and 1.0)
    n_iter : int
        Passes over the training dataset
        
    Attributes
    ----------
    w_ : 1d-array
        Weights after fitting
    errors_ : list
        Number of misclassification in every ephoch
        
    """
    
    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 self.n_iter:
            error = 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):
        """Returns class label after after unit step"""    
        return(np.where(self.net_input(X)) >= 0.0, 1, -1)

In [5]:
import pandas as pd
df = pd.read_csv('https://archive.ics.uci.edu/ml/'
'machine-learning-databases/iris/iris.data', header=None)

In [7]:
df.to_csv("flower_dataset.csv")


#Next we will use perceptron object to run classification on iris dataset

In [ ]: