| 
						
						
						
					 | 
				
				 | 
				
					@ -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) |