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

refactor: Generierung von Testdaten ausgelagert

parent 28e4bc79
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
from aufgaben.p4.testdata 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
```
......
from math import floor
from features.moving_feature import moving_feature
from features.standard_deviation import standard_deviation
from korpus import create_bewegung
CLASS_JOGGEN = 1
CLASS_KNIEBEUGE = -1
def binary_classification_feature(window_size=30):
TRAINING_DATA_PERCENTAGE = 0.9
DATA_LIMIT = 1000
DATA_LIMIT_PER_TYPE = floor(DATA_LIMIT / 2)
def binary_classification_feature(window_size=30):
# Wir holen uns den Höhensensor des Fußes (Bleibt bei Kniebeugen gleich und bewegt sich beim Laufen)
joggen_values = create_bewegung('joggen').messungen[1].sensoren[1].werte
kniebeuge_values = create_bewegung('kniebeuge').messungen[1].sensoren[1].werte
......@@ -16,5 +25,28 @@ def binary_classification_feature(window_size=30):
return joggen_feature, kniebeuge_feature
if __name__ == '__main__':
binary_classification_feature(30)
def get_labeled_testdata():
# Hole die aus den Sensordaten berechneten Merkmale
joggen_feature, kniebeuge_feature = binary_classification_feature(150)
# Wir nehmen nur DATA_LIMIT an Daten (sonst ist K-Nearest-Neighbors zu langsam)
joggen_feature = joggen_feature[: min(DATA_LIMIT_PER_TYPE, len(joggen_feature))]
kniebeuge_feature = kniebeuge_feature[: min(DATA_LIMIT_PER_TYPE, len(kniebeuge_feature))]
# 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_joggen = list(zip(joggen_vector, [CLASS_JOGGEN] * len(joggen_feature)))
training_data_kniebeuge = list(zip(kniebeugen_vector, [CLASS_KNIEBEUGE] * len(kniebeuge_feature)))
# Wir nehmen 90 % der Testdaten zum Trainieren und 10 % zum Testen
delimiter_joggen = floor(len(joggen_feature) * TRAINING_DATA_PERCENTAGE)
delimiter_kniebeuge = floor(len(kniebeuge_feature) * TRAINING_DATA_PERCENTAGE)
training_data = training_data_joggen[:delimiter_joggen] + training_data_kniebeuge[:delimiter_kniebeuge]
test_data = training_data_joggen[delimiter_joggen:] + training_data_kniebeuge[delimiter_kniebeuge:]
return test_data, training_data
import random
from math import floor
import numpy
from algorithm.pla.perceptron import Perceptron
from algorithm.pla.perceptron_learning_algorithm import train
from aufgaben.p4.binary_classification import binary_classification_feature
from aufgaben.p4.testdata import get_labeled_testdata, CLASS_JOGGEN, CLASS_KNIEBEUGE
from aufgaben.p6.error_rate import ErrorRate
TRAINING_DATA_PERCENTAGE = 0.9
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_joggen = list(zip(joggen_vector, [CLASS_JOGGEN] * len(joggen_feature)))
training_data_kniebeuge = list(zip(kniebeugen_vector, [CLASS_KNIEBEUGE] * len(kniebeuge_feature)))
# Wir nehmen 90 % der Testdaten zum Trainieren und 10 % zum Testen
delimiter_joggen = floor(len(joggen_feature) * TRAINING_DATA_PERCENTAGE)
delimiter_kniebeuge = floor(len(kniebeuge_feature) * TRAINING_DATA_PERCENTAGE)
training_data = training_data_joggen[:delimiter_joggen] + training_data_kniebeuge[:delimiter_kniebeuge]
test_data = training_data_joggen[delimiter_joggen:] + training_data_kniebeuge[delimiter_kniebeuge:]
test_data, training_data = get_labeled_testdata()
# Erstelle ein Perzeptron
weights = [random.random()]
......@@ -52,7 +29,10 @@ def apply_pla():
# Berechne den Grenzwert, ab wann ein Feature anders eingeordnet wird
grenzwert = - perceptron.weights[0] / perceptron.weights[1]
return joggen_feature[delimiter_joggen:], kniebeuge_feature[delimiter_kniebeuge:], grenzwert
joggen_test_data = filter(lambda pair: pair[1] == CLASS_JOGGEN, test_data)
kniebeuge_test_data = filter(lambda pair: pair[1] == CLASS_KNIEBEUGE, test_data)
return [i[0] for i in joggen_test_data], [i[0] for i in kniebeuge_test_data], grenzwert
if __name__ == '__main__':
......
%% Cell type:code id: tags:
``` python
from aufgaben.p5.apply_pla import apply_pla
%matplotlib notebook
import matplotlib.pyplot as plotter
joggen, kniebeuge, grenzwert = apply_pla()
plotter.scatter(joggen, [0] * len(joggen), label="Joggen")
plotter.scatter(kniebeuge, [0] * len(kniebeuge), label="Kniebeuge")
plotter.scatter(grenzwert, [0], label="Grenzwert")
plotter.legend()
plotter.show()
```
%% Output
---------------------------------------------------------------------------
KeyboardInterrupt Traceback (most recent call last)
<ipython-input-2-dc2cba0b48b6> in <module>
TypeError Traceback (most recent call last)
<ipython-input-1-dc2cba0b48b6> in <module>
3 import matplotlib.pyplot as plotter
4
----> 5 joggen, kniebeuge, grenzwert = apply_pla()
6
7 plotter.scatter(joggen, [0] * len(joggen), label="Joggen")
D:\Informatik-Workspace\PyCharm\FH-Münster\MEML\aufgaben\p5\apply_pla.py in apply_pla()
32
33 # Trainiere das Perzeptron
---> 34 train(perceptron, training_data, 300, 0.1)
35
36 # Vergleiche alle Ergebnisse mit der erwarteten Klasse
D:\Informatik-Workspace\PyCharm\FH-Münster\MEML\algorithm\pla\perceptron_learning_algorithm.py in train(perceptron, training_data, max_iterations, learning_rate)
15 wrong_classifications = []
16 for features, correct_class in training_data:
---> 17 result = perceptron.classify(features)
18
19 # Falls das Ergebnis falsch ist, merken wir uns die Ergebnisse
D:\Informatik-Workspace\PyCharm\FH-Münster\MEML\algorithm\pla\perceptron.py in classify(self, features)
24
25 # Multipliziere die transponierten mit dem Merkmalsvektor
---> 26 result = numpy.matmul(transposed_weights, all_features)
27
28 # Wende die Aktivierungsfunktion auf das Ergebnis an
KeyboardInterrupt:
10
11 def apply_pla():
---> 12 test_data, training_data = get_labeled_testdata()
13
14 # Erstelle ein Perzeptron
D:\Informatik-Workspace\PyCharm\FH-Münster\MEML\aufgaben\p4\testdata.py in get_labeled_testdata()
13
14 # Wir nehmen nur DATA_LIMIT an Daten (sonst ist K-Nearest-Neighbors zu langsam)
---> 15 joggen_feature = joggen_feature[: min(DATA_LIMIT/2, len(joggen_feature))]
16 kniebeuge_feature = kniebeuge_feature[: min(DATA_LIMIT / 2, len(kniebeuge_feature))]
17
TypeError: slice indices must be integers or None or have an __index__ method
%% Cell type:code id: tags:
``` python
```
......
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