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