Ifi6057Perceptron
Allikas: Lambda
class Perceptron:
def __init__(self, w=[1], t=0.5):
self.weights = w
self.threshold = t
def classify(self, values):
s = sum(value * weight for value, weight in
zip(values, self.weights))
return s > self.threshold
def train(self, trainset, lrate):
beste = len(trainset) + 1
bestv = [ w for w in self.weights ]
noupdate = 0
while noupdate < 1000:
errors = 0
for vect, val in trainset:
result = self.classify(vect)
error = val - result
if error != 0:
errors += 1
for i, v in enumerate(vect):
self.weights[i] += lrate * error * v
if errors < beste:
print (errors,self.weights)
beste = errors
bestv = [ w for w in self.weights ]
noupdate = 0
else:
noupdate += 1
if errors == 0:
break
print ("Training done with best case: ", beste, bestv)
print ("Current: ", errors, self.weights)
self.weights = bestv