Warning: Declaration of action_plugin_wrap::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /s/bach/b/class/cs545/public_html/fall13/dokuwiki/lib/plugins/wrap/action.php on line 148

Warning: Declaration of action_plugin_tablewidth::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /s/bach/b/class/cs545/public_html/fall13/dokuwiki/lib/plugins/tablewidth/action.php on line 93
code:perceptron [CS545 fall 2013]

User Tools

Site Tools


code:perceptron

The perceptron

Here's the code for the perceptron classifier we discussed in class:

perceptron.py
import numpy as np
from PyML.classifiers.baseClassifiers import Classifier
 
class Perceptron (Classifier) :
 
    """An implementation of the perceptron algorithm"""
 
    attributes = {'max_iterations': 50,
                  'learning_rate' : 0.2}
 
    def __init__(self, arg = None, **args) :
 
        Classifier.__init__(self, arg, **args)
 
 
    def train(self, data, **args) :
 
        Classifier.train(self, data, **args)
 
        if data.labels.numClasses != 2 :
            raise ValueError, "not a binary classification problem"
 
        self.bias = 0
        data.addFeature('bias', [1.0 for i in range(len(data))])
        num_features = data.numFeatures
        self.w = np.zeros(data.numFeatures)
        converged = False
        iterations = 0
        while (not converged and iterations < self.max_iterations) :
            converged = True
            for i in range(len(data)) :
                label = 2 * data.labels.Y[i] -1 # convert the labels from 0,1 to -1, +1
                if label * self.decisionFunc(data, i) <= 0 :
                    self.w = self.w + label * self.learning_rate * data.X[i]
                    converged = False
            iterations += 1
        data.eliminateFeatures([data.numFeatures -1])
        self.bias = self.w[-1]
        self.w = self.w[:-1]
        self.converged = converged
        if converged :
            print 'converged in %d iterations '% iterations
        # this should be the last command in the train function
        self.log.trainingTime = self.getTrainingTime()
 
 
    def decisionFunc(self, data, i) :
 
        return np.dot(self.w, data.X[i]) + self.bias
 
    def classify(self, data, i) :
 
        score = self.decisionFunc(data, i)
        classification = 1 if score > 0 else 0
        return (classification, score)
code/perceptron.txt · Last modified: 2013/09/06 09:55 by asa