Skip to content
Snippets Groups Projects
Commit f3153f91 authored by Simon Adick's avatar Simon Adick
Browse files

refactor: PLA anwenden

parent eb52e01b
No related branches found
No related tags found
No related merge requests found
%% Cell type:code id: tags:
``` python
%matplotlib notebook
import matplotlib.pyplot as plotter
from aufgaben.p4.binary_classification import binary_classification_feature
joggen_feature, kniebeuge_feature = binary_classification_feature(150)
plotter.plot(range(len(joggen_feature)), joggen_feature, label="Joggen Standardabweichung", linewidth=1)
plotter.plot(range(len(kniebeuge_feature)), kniebeuge_feature, label="Kniebeuge Standardabweichung", linewidth=1)
plotter.legend()
plotter.show()
```
%% Output
%% Cell type:code id: tags:
``` python
```
import math
import random
import numpy
from algorithm.pla.perceptron import Perceptron
from algorithm.pla.perceptron_learning_algorithm import train
from algorithm.pla.transfer_functions import normalized_tanh
from aufgaben.p4.binary_classification import binary_classification_feature
from aufgaben.p6.error_rate import ErrorRate
CLASS_JOGGEN = 1
CLASS_KNIEBEUGE = -1
def apply_pla():
# Hole die aus den Sensordaten berechneten Merkmale
joggen_feature, kniebeuge_feature = binary_classification_feature(150)
# Wandel Liste an Merkmalen in einzelne Merkmalsvektoren um
joggen_vector = ([element] for element in joggen_feature)
kniebeugen_vector = ([element] for element in kniebeuge_feature)
# Weise den Trainingsdaten eine Klasse zu
# 0 = Kniebeuge, 1 = Joggen
training_data_kniebeuge = zip(kniebeugen_vector, [CLASS_KNIEBEUGE] * len(kniebeuge_feature))
training_data_joggen = zip(joggen_vector, [CLASS_JOGGEN] * len(joggen_feature))
training_data = list(training_data_joggen) + list(training_data_kniebeuge)
# Erstelle ein Perzeptron
weights = [random.random()]
threshold = 0.5
perceptron = Perceptron(weights, threshold, numpy.sign)
train(perceptron, training_data, 300, 0.1)
result_joggen = []
result_kniebeuge = []
fehlerrate = ErrorRate()
for features, correct_class in training_data:
result = perceptron.classify(features)
fehlerrate.evaluate(correct_class, result)
if result == CLASS_KNIEBEUGE:
result_kniebeuge.append(features[0])
else:
result_joggen.append(features[0])
print(fehlerrate.error_rate())
return result_joggen, result_kniebeuge
if __name__ == '__main__':
apply_pla()
# apply_pocket()
import math
import random
from algorithm.pla.perceptron_learning_algorithm import train, train_pocket
from algorithm.pla.perceptron import Perceptron
from algorithm.pla.transfer_functions import normalized_tanh
from aufgaben.p6.evaluate import evaluate
from korpus import create_bewegung
def apply_pla():
weights = [random.random(), random.random(), random.random()]
threshold = -1
perceptron = Perceptron(weights, threshold, normalized_tanh)
joggen = create_bewegung('joggen').messungen[2]
kniebeuge = create_bewegung('kniebeuge').messungen[2]
training_data = [
[[joggen.sensoren[0].werte[0], joggen.sensoren[1].werte[0], joggen.sensoren[2].werte[0]], 1],
[[kniebeuge.sensoren[0].werte[17], kniebeuge.sensoren[1].werte[17], kniebeuge.sensoren[2].werte[17]], 0],
[[joggen.sensoren[0].werte[17], joggen.sensoren[1].werte[17], joggen.sensoren[2].werte[17]], 1],
[[joggen.sensoren[0].werte[4], joggen.sensoren[1].werte[4], joggen.sensoren[2].werte[4]], 1],
[[kniebeuge.sensoren[0].werte[9], kniebeuge.sensoren[1].werte[9], kniebeuge.sensoren[2].werte[9]], 0],
[[kniebeuge.sensoren[0].werte[104], kniebeuge.sensoren[1].werte[104], kniebeuge.sensoren[2].werte[104]], 0],
[[joggen.sensoren[0].werte[104], joggen.sensoren[1].werte[104], joggen.sensoren[2].werte[104]], 1],
[[kniebeuge.sensoren[0].werte[2], kniebeuge.sensoren[1].werte[2], kniebeuge.sensoren[2].werte[2]], 0],
[[joggen.sensoren[0].werte[2], joggen.sensoren[1].werte[2], joggen.sensoren[2].werte[2]], 1],
[[kniebeuge.sensoren[0].werte[25], kniebeuge.sensoren[1].werte[25], kniebeuge.sensoren[2].werte[25]], 0],
[[joggen.sensoren[0].werte[25], joggen.sensoren[1].werte[25], joggen.sensoren[2].werte[25]], 1]
]
max_iterations = 1000
learning_rate = 0.1
train(perceptron, training_data, max_iterations, learning_rate)
print("\nPLA: Zunächst Gewichte, dann Klassifizierung. Gehen = 1, Kniebeuge = 0")
print(perceptron.weights)
amount_of_weights = 3
correct_data = []
incorrect_data = []
for i in range(amount_of_weights):
correct_data.append(joggen.sensoren[i].werte)
incorrect_data.append(kniebeuge.sensoren[i].werte)
evaluate(500, amount_of_weights, correct_data, incorrect_data, perceptron)
def apply_pocket():
weights = [0.5, 0.2, 0.7]
threshold = -1
perceptron = Perceptron(weights, threshold, normalized_tanh)
joggen = create_bewegung('joggen').messungen[2]
kniebeuge = create_bewegung('kniebeuge').messungen[2]
training_data = [
[[joggen.sensoren[0].werte[0], joggen.sensoren[1].werte[0], joggen.sensoren[2].werte[0]], 1],
[[kniebeuge.sensoren[0].werte[17], kniebeuge.sensoren[1].werte[17], kniebeuge.sensoren[2].werte[17]], 0],
[[joggen.sensoren[0].werte[17], joggen.sensoren[1].werte[17], joggen.sensoren[2].werte[17]], 1],
[[joggen.sensoren[0].werte[4], joggen.sensoren[1].werte[4], joggen.sensoren[2].werte[4]], 1],
[[kniebeuge.sensoren[0].werte[9], kniebeuge.sensoren[1].werte[9], kniebeuge.sensoren[2].werte[9]], 0],
[[kniebeuge.sensoren[0].werte[104], kniebeuge.sensoren[1].werte[104], kniebeuge.sensoren[2].werte[104]], 0],
[[joggen.sensoren[0].werte[104], joggen.sensoren[1].werte[104], joggen.sensoren[2].werte[104]], 1],
[[kniebeuge.sensoren[0].werte[2], kniebeuge.sensoren[1].werte[2], kniebeuge.sensoren[2].werte[2]], 0],
[[joggen.sensoren[0].werte[2], joggen.sensoren[1].werte[2], joggen.sensoren[2].werte[2]], 1],
[[kniebeuge.sensoren[0].werte[25], kniebeuge.sensoren[1].werte[25], kniebeuge.sensoren[2].werte[25]], 0],
[[joggen.sensoren[0].werte[25], joggen.sensoren[1].werte[25], joggen.sensoren[2].werte[25]], 1]
]
max_iterations = 1
learning_rate = 0.10
train_pocket(perceptron, training_data, max_iterations, learning_rate)
print("\nPocket: Zunächst Gewichte, dann Klassifizierung. Gehen = 1, Kniebeuge = 0")
print(perceptron.weights)
amount_of_weights = 3
correct_data = []
incorrect_data = []
for i in range(amount_of_weights):
correct_data.append(joggen.sensoren[i].werte)
incorrect_data.append(kniebeuge.sensoren[i].werte)
evaluate(500, amount_of_weights, correct_data, incorrect_data, perceptron)
if __name__ == '__main__':
apply_pla()
#apply_pocket()
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment