Skip to content
Snippets Groups Projects
Commit f5991867 authored by andyg's avatar andyg
Browse files

folder fix

parent efc1ee8f
No related branches found
No related tags found
No related merge requests found
,AGBI-LAP-FLEISC/Fleischer,,15.12.2019 19:32,file:///C:/Users/Fleischer/AppData/Roaming/LibreOffice/4;
\ No newline at end of file
,AGBI-LAP-FLEISC/Fleischer,,16.01.2020 20:37,file:///C:/Users/Fleischer/AppData/Roaming/LibreOffice/4;
\ No newline at end of file
Bilder/Aktivierungsfkt.png

8.86 KiB

File added
File added
Bilder/KNN_Insekt.png

28.6 KiB

Bilder/KNN_Insekt2.png

26.5 KiB

Bilder/edges_hidden_output.png

14.2 KiB

Bilder/edges_input_hidden.png

21.3 KiB

Bilder/hidden_layer.png

8.46 KiB

Bilder/input_layer.png

12.2 KiB

Bilder/output_layer.png

8.75 KiB

This diff is collapsed.
%% Cell type:code id: tags:
``` python
#Bibliotheken importieren
import numpy as np
from numpy import tanh
import pandas as pd
from plotly.offline import iplot
import cufflinks as cf
cf.go_offline()
```
%% Cell type:markdown id: tags:
# Anwendungsbeispiel
%% Cell type:markdown id: tags:
Wir schauen uns wieder unser bekanntes Anwendungbeispiel an, aber wollen in diesem Notebook unser ausgereiftes Lernprinzip ausprobieren.
%% Cell type:code id: tags:
``` python
#Importiere Daten
df_käfer = pd.read_csv('Käfer.csv', sep=';')
df_käfer.head()
```
%% Cell type:code id: tags:
``` python
#Viuslaisiere Daten
df_käfer.iplot('scatter', mode='markers',
x='Breite', xTitle ='Breite',
y='Länge', yTitle = 'Länge',
categories= 'Insekt')
```
%% Cell type:code id: tags:
``` python
#Erzeuge numerische Daten
df_käfer_num = df_käfer.replace(['Raupe','Marienkäfer'],[-1,1])
df_käfer_num.head()
```
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
# Aufsetzen eines Neuronalen Netztes
%% Cell type:markdown id: tags:
Wir setzen wieder in gewohnter Form ein KNN auf, allerdings nutzen wir diesmal etwas willkürlichere Anfangskantengewichte. Wir achten lediglich darauf, dass die Kantengewichte relativ nah an der 0 liegen. Das ist vorteilhaft für den Lernprozess, da wir nicht wissen welche Gewichte am Ende einen positiven und welche einen negativen Wert bekommen.
%% Cell type:code id: tags:
``` python
#Festlegung der Kantengewichte
w1 = 0.1
w2 = 0.1
w3 = -0.1
```
%% Cell type:code id: tags:
``` python
#Funktione für den Output des KNN
def knn_output(x1, x2):
z = tanh(w1*x1+w2*x2)
y = tanh(w3*z)
return y
```
%% Cell type:markdown id: tags:
Wenn man die folgende Heatmapcmit unserem Datensatz vergleicht ist zu sehen ist, dass das KNN mit den gewählten Kantengewichten nicht sehr gut funktioniert.
%% Cell type:code id: tags:
``` python
#Visualisieren des Outputs
heatmap=pd.DataFrame()
for x in range(100):
heatmap[str(x/100)] = [knn_output(y/100,x/100) for y in range(100)]
heatmap.index = [y/100 for y in range(100)]
heatmap.iplot('heatmap', xTitle='Breite', yTitle ='Länge')
```
%% Cell type:markdown id: tags:
Bevor wir das KNN lernen lassen, schreiben wir noch eine Funktion, um den Anteil der korrekten Klassifikationen berechnen zu können. Dies wird wie gewohnt umgesetzt. Dabei wird ein Output kleiner Null als Klasse 'Marienkäfer' interpretiert und ein Output größer gleich 0 als Klasse 'Raupe'.
%% Cell type:code id: tags:
``` python
#Funktion, um den Anteil der korrekten KLassifikationen zu berechnen
def accuracy():
Outputs_kat = []
for i in range(len(df_käfer)):
output = knn_output(df_käfer.iloc[i]['Breite'],df_käfer.iloc[i]['Länge'])
if output < 0:
Outputs_kat.append('Marienkäfer')
elif output >= 0:
Outputs_kat.append('Raupe')
df_käfer_test = df_käfer.copy()
df_käfer_test['Output_kat'] = Outputs_kat
print('Anteil richtiger Vorhersagen:', sum(df_käfer_test['Insekt'] == df_käfer_test['Output_kat'])/len(df_käfer_test))
accuracy()
```
%% Cell type:markdown id: tags:
Nur 50 % der Beispiele werden richtig klassifiziert. D. h. das KNN ist aktuell so gut wie ein Zufallsgenerator der einfach raten würde.
%% Cell type:markdown id: tags:
# Definieren des Lernverfahrens
%% Cell type:markdown id: tags:
Nun wollen wir die alles entscheidende Funktion für das Lernen bzw. das anapassen der Gewichte definieren.
%% Cell type:markdown id: tags:
<div style="background-color: lightblue; padding: 5px 20px 20px">
**Aufgabe:**
In den folgenden Zellen werden zunächst die Lernrate und dann die Funktion für das anpassen der Kantengewichte definiert. Füge an den offenen Stellen, die an der Tafel hergeleitete Aktualisierungsregel ein.
%% Cell type:code id: tags:
``` python
#Lernrate
lr=0.03
```
%% Cell type:code id: tags:
``` python
def gewichte_update(x1, x2, t ,w1, w2, w3):
# t ist die Variable für target, also für den Zieloutput des KNN
z = tanh(w1*x1+w2*x2)
y = tanh(w3*z)
w1+= #CODE HIER EINFÜGEN
w2+= #CODE HIER EINFÜGEN
w3+= #CODE HIER EINFÜGEN
return w1, w2, w3
```
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
# Lernprozess
## (1. Epoche)
%% Cell type:markdown id: tags:
In der folgenden Zelle werden alle Beispiele aus dem Datensatz einmal betrachtet und zur Aktualisierung der Gewichte genutzt.
Dies nennt man eine **Epoche** des Lernprozesses des KNN.
%% Cell type:code id: tags:
``` python
#Aktiualisieren der Gewichte
for j in range(len(df_käfer_num)):
x1 = df_käfer_num.iloc[j][0]
x2 = df_käfer_num.iloc[j][1]
t = df_käfer_num.iloc[j][2]
w1, w2, w3 = gewichte_update(x1, x2, t, w1, w2, w3)
```
%% Cell type:markdown id: tags:
Lass dir die aktualisierten Kantengewichte und die Output-Heatmap in den folgenden beiden Zellen anzeigen anzeigen:
%% Cell type:code id: tags:
``` python
display(w1, w2, w3)
```
%% Cell type:code id: tags:
``` python
heatmap=pd.DataFrame()
for x in range(100):
heatmap[str(x/100)] = [knn_output(y/100,x/100) for y in range(100)]
heatmap.index = [y/100 for y in range(100)]
heatmap.iplot('heatmap', xTitle='Breite', yTitle ='Länge')
```
%% Cell type:code id: tags:
``` python
accuracy()
```
%% Cell type:markdown id: tags:
<div style="background-color: lightblue; padding: 5px 20px 20px">
**Aufgabe:**
Die erste Lernepoche wurde absolviert. Vergleiche den Anteil der richtigen Vorhersagen (Accuracy) vor und nach der Epoche. Ist das KNN deutlich besser geworden?
Vergleiche die Output-Heatmap mit der Heatmap weiter oben(Ausgangszustand). Was fällt auf?
%% Cell type:markdown id: tags:
ANTWORT HIER EINFÜGEN
%% Cell type:markdown id: tags:
## (2. Epoche)
%% Cell type:markdown id: tags:
Eine Epoche reicht häufig nicht aus, da bei jeder Gewichtsaktualsierung nur eine sehr kleine Änderung vorgenommen wird. Somit werden die Daten erneut geutzt, um weitere Epoche im Lernprozess durchzuführen.
%% Cell type:markdown id: tags:
<div style="background-color: lightblue; padding: 5px 20px 20px">
**Aufgabe:**
Führe die weiteren Epochen des Lernprozesses wie oben durch und beobachte jeweils die Veränderung der Kantengewichte, die Änderung der Output-Heatmap und die Änderung in der Vorhersagegenauigkeit (Accruracy).
Beschreibe nach jeder Epoche, welche Veränderungen festzustellen sind.
%% Cell type:code id: tags:
``` python
df_käfer_num = df_käfer.replace(['Raupe','Marienkäfer'],[-1,1])
for j in range(len(df_käfer_num)):
x1=df_käfer_num.iloc[j][0]
x2=df_käfer_num.iloc[j][1]
t=df_käfer_num.iloc[j][2]
w1, w2, w3 = gewichte_update(x1, x2, t, w1, w2, w3)
```
%% Cell type:code id: tags:
``` python
display(w1, w2, w3)
```
%% Cell type:code id: tags:
``` python
heatmap=pd.DataFrame()
for x in range(100):
heatmap[str(x/100)] = [knn_output(y/100,x/100) for y in range(100)]
heatmap.index = [y/100 for y in range(100)]
heatmap.iplot('heatmap', xTitle='Breite', yTitle ='Länge')
```
%% Cell type:code id: tags:
``` python
accuracy()
```
%% Cell type:markdown id: tags:
BESCHREIBUNG DER VERÄNDERUNGEN HIER EINFÜGEN
%% Cell type:markdown id: tags:
## (3. Epoche)
%% Cell type:code id: tags:
``` python
df_käfer_num = df_käfer.replace(['Raupe','Marienkäfer'],[-1,1])
for j in range(len(df_käfer_num)):
x1=df_käfer_num.iloc[j][0]
x2=df_käfer_num.iloc[j][1]
t=df_käfer_num.iloc[j][2]
w1, w2, w3 = gewichte_update(x1, x2, t, w1, w2, w3)
```
%% Cell type:code id: tags:
``` python
display(w1, w2, w3)
```
%% Cell type:code id: tags:
``` python
heatmap=pd.DataFrame()
for x in range(100):
heatmap[str(x/100)] = [knn_output(y/100,x/100) for y in range(100)]
heatmap.index = [y/100 for y in range(100)]
heatmap.iplot('heatmap', xTitle='Breite', yTitle ='Länge')
```
%% Cell type:code id: tags:
``` python
accuracy()
```
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
BESCHREIBUNG DER VERÄNDERUNGEN HIER EINFÜGEN
%% Cell type:markdown id: tags:
## (4. Epoche)
%% Cell type:code id: tags:
``` python
df_käfer_num = df_käfer.replace(['Raupe','Marienkäfer'],[-1,1])
for j in range(len(df_käfer_num)):
x1=df_käfer_num.iloc[j][0]
x2=df_käfer_num.iloc[j][1]
t=df_käfer_num.iloc[j][2]
w1, w2, w3 = gewichte_update(x1, x2, t, w1, w2, w3)
```
%% Cell type:code id: tags:
``` python
display(w1, w2, w3)
```
%% Cell type:code id: tags:
``` python
heatmap=pd.DataFrame()
for x in range(100):
heatmap[str(x/100)] = [knn_output(y/100,x/100) for y in range(100)]
heatmap.index = [y/100 for y in range(100)]
heatmap.iplot('heatmap', xTitle='Breite', yTitle ='Länge')
```
%% Cell type:code id: tags:
``` python
accuracy()
```
%% Cell type:markdown id: tags:
BESCHREIBUNG DER VERÄNDERUNGEN HIER EINFÜGEN
%% Cell type:markdown id: tags:
<div style="background-color: lightblue; padding: 5px 20px 20px">
**Aufgabe:**
Sollten noch weitere Epochen durchgeführt werden? Begründe.
%% Cell type:markdown id: tags:
ANTWORT HIER EINFÜGEN
Breite;Länge;Insekt
0.6;0.29;Marienkäfer
0.2;0.58;Raupe
0.2;0.64;Raupe
0.28;0.84;Raupe
0.31;0.82;Raupe
0.17;0.85;Raupe
0.79;0.23;Marienkäfer
0.34;0.53;Raupe
0.28;0.79;Raupe
0.18;0.53;Raupe
0.52;0.36;Marienkäfer
0.38;0.59;Raupe
0.83;0.3;Marienkäfer
0.22;0.51;Raupe
0.18;0.67;Raupe
0.84;0.25;Marienkäfer
0.32;0.75;Raupe
0.77;0.38;Marienkäfer
0.4;0.55;Raupe
0.81;0.28;Marienkäfer
0.66;0.25;Marienkäfer
0.79;0.38;Marienkäfer
0.24;0.68;Raupe
0.34;0.79;Raupe
0.75;0.28;Marienkäfer
0.6;0.37;Marienkäfer
0.59;0.38;Marienkäfer
0.76;0.24;Marienkäfer
0.33;0.81;Raupe
0.62;0.15;Marienkäfer
0.26;0.79;Raupe
0.64;0.39;Marienkäfer
0.26;0.79;Raupe
0.32;0.52;Raupe
0.55;0.25;Marienkäfer
0.64;0.37;Marienkäfer
0.39;0.64;Raupe
0.2;0.81;Raupe
0.3;0.71;Raupe
0.59;0.27;Marienkäfer
0.34;0.77;Raupe
0.78;0.29;Marienkäfer
0.16;0.81;Raupe
0.56;0.31;Marienkäfer
0.72;0.22;Marienkäfer
0.2;0.81;Raupe
0.59;0.3;Marienkäfer
0.81;0.23;Marienkäfer
0.82;0.39;Marienkäfer
0.23;0.74;Raupe
0.53;0.23;Marienkäfer
0.18;0.57;Raupe
0.34;0.74;Raupe
0.57;0.16;Marienkäfer
0.76;0.23;Marienkäfer
0.19;0.62;Raupe
0.8;0.26;Marienkäfer
0.35;0.7;Raupe
0.25;0.5;Raupe
0.7;0.3;Marienkäfer
0.82;0.28;Marienkäfer
0.52;0.31;Marienkäfer
0.24;0.5;Raupe
0.26;0.75;Raupe
0.78;0.27;Marienkäfer
0.78;0.3;Marienkäfer
0.27;0.65;Raupe
0.67;0.31;Marienkäfer
0.38;0.53;Raupe
0.34;0.69;Raupe
0.19;0.74;Raupe
0.78;0.21;Marienkäfer
0.21;0.78;Raupe
0.19;0.69;Raupe
0.69;0.19;Marienkäfer
0.17;0.83;Raupe
0.28;0.78;Raupe
0.37;0.7;Raupe
0.78;0.16;Marienkäfer
0.6;0.27;Marienkäfer
0.33;0.67;Raupe
0.26;0.51;Raupe
0.39;0.69;Raupe
0.84;0.29;Marienkäfer
0.21;0.59;Raupe
0.81;0.31;Marienkäfer
0.28;0.84;Raupe
0.38;0.83;Raupe
0.19;0.69;Raupe
0.74;0.27;Marienkäfer
0.32;0.6;Raupe
0.34;0.56;Raupe
0.81;0.18;Marienkäfer
0.66;0.39;Marienkäfer
0.35;0.63;Raupe
0.55;0.26;Marienkäfer
0.33;0.58;Raupe
0.31;0.5;Raupe
0.34;0.71;Raupe
0.3;0.85;Raupe
0.67;0.38;Marienkäfer
0.55;0.18;Marienkäfer
0.71;0.37;Marienkäfer
0.31;0.84;Raupe
0.25;0.79;Raupe
0.59;0.33;Marienkäfer
0.38;0.51;Raupe
0.58;0.27;Marienkäfer
0.52;0.25;Marienkäfer
0.67;0.24;Marienkäfer
0.26;0.6;Raupe
0.71;0.3;Marienkäfer
0.71;0.27;Marienkäfer
0.51;0.39;Marienkäfer
0.19;0.78;Raupe
0.31;0.79;Raupe
0.35;0.77;Raupe
0.2;0.66;Raupe
0.33;0.74;Raupe
0.33;0.71;Raupe
0.3;0.82;Raupe
0.2;0.61;Raupe
0.26;0.51;Raupe
0.79;0.16;Marienkäfer
0.77;0.34;Marienkäfer
0.63;0.32;Marienkäfer
0.2;0.52;Raupe
0.29;0.78;Raupe
0.29;0.67;Raupe
0.53;0.27;Marienkäfer
0.5;0.21;Marienkäfer
0.2;0.66;Raupe
0.83;0.38;Marienkäfer
0.68;0.36;Marienkäfer
0.68;0.36;Marienkäfer
0.62;0.38;Marienkäfer
0.68;0.38;Marienkäfer
0.15;0.64;Raupe
0.78;0.18;Marienkäfer
0.56;0.29;Marienkäfer
0.15;0.57;Raupe
0.37;0.8;Raupe
0.73;0.33;Marienkäfer
0.81;0.18;Marienkäfer
0.55;0.27;Marienkäfer
0.64;0.33;Marienkäfer
0.3;0.66;Raupe
0.58;0.2;Marienkäfer
0.36;0.67;Raupe
0.53;0.33;Marienkäfer
0.83;0.37;Marienkäfer
0.61;0.29;Marienkäfer
0.73;0.18;Marienkäfer
0.18;0.6;Raupe
0.79;0.35;Marienkäfer
0.67;0.37;Marienkäfer
0.24;0.85;Raupe
0.81;0.22;Marienkäfer
0.2;0.78;Raupe
0.55;0.24;Marienkäfer
0.83;0.22;Marienkäfer
0.3;0.71;Raupe
0.35;0.79;Raupe
0.71;0.35;Marienkäfer
0.4;0.72;Raupe
0.66;0.4;Marienkäfer
0.26;0.54;Raupe
0.62;0.24;Marienkäfer
0.16;0.75;Raupe
0.27;0.77;Raupe
0.81;0.29;Marienkäfer
0.36;0.65;Raupe
0.82;0.37;Marienkäfer
0.39;0.82;Raupe
0.37;0.56;Raupe
0.57;0.15;Marienkäfer
0.37;0.51;Raupe
0.83;0.16;Marienkäfer
0.18;0.53;Raupe
0.55;0.19;Marienkäfer
0.55;0.24;Marienkäfer
0.18;0.7;Raupe
0.58;0.2;Marienkäfer
0.79;0.25;Marienkäfer
0.72;0.38;Marienkäfer
0.64;0.27;Marienkäfer
0.27;0.8;Raupe
0.23;0.6;Raupe
0.75;0.32;Marienkäfer
0.55;0.32;Marienkäfer
0.18;0.72;Raupe
0.2;0.85;Raupe
0.74;0.18;Marienkäfer
0.22;0.61;Raupe
0.51;0.33;Marienkäfer
0.5;0.37;Marienkäfer
0.4;0.82;Raupe
0.65;0.31;Marienkäfer
0.39;0.67;Raupe
0.64;0.29;Marienkäfer
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment