10. Unterrichtsblock

Python Lambda

Eine Lambda-Funktion ist eine kleine anonyme Funktion. Die Lambda-Funktion kann beliebig viele Argumente beinhalten, aber nur einen Ausdruck haben.

Syntax-Beispiel:

lambda argument1, argument2, argument3, usw : ausdruck

Der Ausdruck wird ausgeführt und das Ergebnis wird zurückgegeben:

Folgendes Beispiel fügt 10 zum Argument a hinzu und gibt das Ergebnis zurück:

x = lambda a : a + 10
print(x(5))

Lambda-Funktionen können eine beliebige Anzahl von Argumenten annehmen. Hier wird Argument a mit Argument b multipliziert und das Ergebnis zurückgegeben:

x = lambda a, b : a * b
print(x(5, 6))

Folgendes Beispiel fasst die Argumente a, b und c zusammen und gibt das Ergebnis zurück:

x = lambda a, b, c : a + b + c
print(x(5, 6, 2))

Warum sollte man die Lambda-Funktionen verwenden?

Die Leistungsfähigkeit von Lambda kommt am besten zur Geltung, wenn man sie als anonyme Funktion innerhalb einer anderen Funktion verwendet.

Angenommen, man hat eine Funktionsdefinition, die ein Argument akzeptiert, und dieses Argument wird mit einer unbekannten Zahl multipliziert:

def meinefunktion(n):
  return lambda a : a * n

Beispielhafte Verwendung einer Funktionsdefinition, um eine Lambda-Funktion zu erstellen, die die gesendete Zahl immer verdoppelt bzw. verdreifacht:

def meinefunktion(n):
  return lambda a : a * n

verdoppler = meinefunktion(2)
verdreifacher = meinefunktion(3)

print(verdoppler(11))

Man verwendet Lambda-Funktionen, wenn für einen kurzen Zeitraum eine anonyme Funktion erforderlich ist.

Python Mathematik

Python verfügt über eine Reihe integrierter Mathematikfunktionen, darunter ein umfangreiches Mathematikmodul, mit dem Sie mathematische Aufgaben an Zahlen ausführen können.

Integrierte mathematische Funktionen

Die Funktionen min()und max()können verwendet werden, um den niedrigsten oder höchsten Wert in einer Iterable zu finden:

x = min(5, 10, 25)
y = max(5, 10, 25)

print(x)
print(y)

Die abs()Funktion gibt den absoluten (positiven) Wert der angegebenen Zahl zurück:

x = abs(-7.25)

print(x)

Die folgende Funktion gibt den Wert von x hoch y (x y ) zurück: pow(x, y)

# Gibt den Wert 4 hoch 3 zurück (dasselbe wie 4 * 4 * 4)

x = pow(4, 3)

print(x)

Das Mathematikmodul

Python verfügt außerdem über ein integriertes Modul namens math, das die Liste der mathematischen Funktionen erweitert.

Um es zu verwenden, muss das math Modul importiert werden

import math

Sobald man das math Modul importiert hat , kann man mit der Verwendung von Methoden und Konstanten des Moduls beginnen.

Die math.sqrt()Methode gibt beispielsweise die Quadratwurzel einer Zahl zurück:

import math

x = math.sqrt(64)

print(x)

Die math.ceil()Methode rundet eine Zahl auf die nächste ganze Zahl auf, und die math.floor() Methode rundet eine Zahl abwärts auf die nächste ganze Zahl und gibt das Ergebnis zurück:

import math

x = math.ceil(1.4)
y = math.floor(1.4)

print(x) # Ausgabe ist 2
print(y) # Ausgabe ist 1

Die math.pi Konstante gibt den Wert von PI (3.14…) zurück:

import math

x = math.pi

print(x)

Vollständige Mathematik-Modulreferenz

Auf folgender Seite findet sich eine vollständige Referenz aller Methoden und Konstanten, die zum Mathematikmodul gehören:
https://docs.python.org/3/library/math.html
https://www.w3schools.com/python/module_math.asp

Python Nutzereingaben

Python ermöglicht Benutzereingaben. Das bedeutet, dass man den Benutzer um Eingaben bitten kann. Die Methode unterscheidet sich in Python 3.6 etwas von der in Python 2.7.

  • Python 3.6 verwendet die input()Methode.
  • Python 2.7 verwendet die raw_input()Methode.

Im folgenden Beispiel wird nach dem Benutzernamen gefragt. Wenn man den Benutzernamen eingegeben hat, wird er auf dem Bildschirm ausgegeben:

# Python 3.6

nutzername = input("Nutzernamen eingeben:")
print("Nutzername ist: " + nutzername)
# Python 2.7

nutzername = raw_input("Nutzernamen eingeben:")
print("Nutzername ist: " + nutzername)

Python stoppt die Ausführung, wenn es um die input()Funktion geht, und fährt fort, wenn der Benutzer eine Eingabe gemacht hat.

Aufgabe

Ermittle den Datentyp, der bei Eingabe des Werts „5“ in ein input() Feld entsteht.

Machinelle Lernanwendung zur Bilderkennung

Zielanwendung

  • Das Programm soll lernen, Bilder von Hunden und anderen Tieren zu unterscheiden.
  • Benötigt wird ein binärer Klassikfikator (Klassifikatoren, die in zwei Gruppen sortieren)
  • Perzeptron (Übliches Werkzeug, um so einen Klassifikator zu bauen)

Vortrag aus der letzten Stunde

  • Wir benötigen gelabelte Daten
  • Die Werten sollen nicht doppelt vorkommen
  • Die Werte sollen in einer bestimmten Reihenfolge aufrufbar sein
  • Man soll die Werte auch einem bestimmten Schlüssel zuordnen können
  • Die Werte müssen Ganzzahlen sein
  • Man benötigt eine effiziente Methode, um große Arrays zu verarbeiten
  • Wir benötigen eine Matrix (Liste von einer Liste)
  • Import von numpy
  • Separieren der Eingabedaten und der Labels

Aktueller Projektfortschritt

Um eine Matritze zu erstellen, generieren wir ein Array von einem Array.

import numpy as np

beine = [4, 4, 4, 4, 2]
groesse = [35.6, 28.4, 55.9, 46.1, 5.2]
breite = [32.2, 18.5, 42.8, 39.3, 4.1]
label = [1, 1, 1, 1, 0]

rohdaten = {
 'beine': beine,
 'groesse': groesse,
 'breite': breite,
 'label': label
}

# Einzelne Arrays erstellen
groesse = np.array(rohdaten['groesse'])

# Matrix erstellen
feature = np.array([rohdaten['beine'], rohdaten['groesse'], rohdaten['breite']])

print(feature)

# Lösung vorletzte Aufgabe (Shape-Funktion)
print(feature.shape)

# Lösung letzte Aufgabe (transponieren)
print(feature.T)

# Lösung Hausaufgabe
print(np.mean(feature.T, axis=0))

Große Dagensätze

# Um das Programm zu trainieren werden große Datenmengen benötigt.

import numpy as np

feature = np.array([[4.0, 37.92655435, 23.90101111],   # Hund
                    [4.0, 35.88942857, 22.73639281],   # Hund
                    [4.0, 29.49674574, 21.42168559],   # Hund
                    [4.0, 32.48016326, 21.7340484 ],   # Hund
                    [4.0, 38.00676226, 24.37202837],   # Hund
                    [4.0, 30.73073988, 22.69832608],   # Hund
                    [4.0, 35.93672343, 21.07445241],   # Hund
                    [4.0, 38.65212459, 20.57099727],   # Hund
                    [4.0, 35.52041768, 21.74519457],   # Hund
                    [4.0, 37.69535497, 20.33073640],   # Hund
                    [4.0, 33.00699292, 22.57063861],   # Hund
                    [4.0, 33.73140934, 23.81730782],   # Hund
                    [4.0, 43.85053380, 20.05153803],   # Hund
                    [4.0, 32.95555986, 24.12153986],   # Hund
                    [4.0, 36.38192916, 19.20280266],   # Hund
                    [4.0, 36.54270168, 20.45388966],   # Hund
                    [4.0, 33.08246118, 22.20524015],   # Hund
                    [4.0, 31.76866280, 21.01201139],   # Hund
                    [4.0, 42.24260825, 20.44394610],   # Hund
                    [4.0, 29.04450264, 22.46633771],   # Hund
                    [4.0, 30.04284328, 21.54561621],   # Hund
                    [4.0, 18.95626707, 19.66737753],   # Kein Hund
                    [4.0, 18.60176718, 17.74023009],   # Kein Hund
                    [4.0, 12.85314993, 18.42746953],   # Kein Hund
                    [4.0, 28.62450072, 17.94781944],   # Kein Hund
                    [4.0, 21.00655655, 19.33438286],   # Kein Hund
                    [4.0, 17.33580556, 18.81696459],   # Kein Hund
                    [4.0, 31.17129195, 17.23625014],   # Kein Hund
                    [4.0, 19.36176482, 20.67772798],   # Kein Hund
                    [4.0, 27.26581705, 16.71312863],   # Kein Hund
                    [4.0, 21.19107828, 19.00673617],   # Kein Hund
                    [4.0, 19.08131597, 15.24401994],   # Kein Hund
                    [4.0, 26.69761925, 17.05937466],   # Kein Hund
                    [2.0, 4.44136559 , 3.52432493 ],   # Kein Hund
                    [2.0, 10.26395607, 1.07729281 ],   # Kein Hund
                    [2.0, 7.39058439 , 3.44234423 ],   # Kein Hund
                    [2.0, 4.23565118 , 4.28840232 ],   # Kein Hund
                    [2.0, 3.87875761 , 5.12407692 ],   # Kein Hund
                    [2.0, 15.12959925, 6.26045879 ],   # Kein Hund
                    [0.0, 5.93041263 , 1.70841905 ],   # Kein Hund
                    [0.0, 4.25054779 , 5.01371294 ],   # Kein Hund
                    [0.0, 2.15139117 , 4.16668657 ],   # Kein Hund
                    [0.0, 2.38283228 , 3.83347914 ]])   # Kein Hund

print(feature.shape)

# Erstellen der Label mit der NumPy "Verketten-Funktion" und den NumPy Funktionen "ones" und "zeros"
label = np.concatenate((np.ones(21), np.zeros(22)))

# Indizes auslesen
print(feature[2])   # Ganze Zeile Nr. 3

Aufgabe

  • Gib den ersten Wert der zweiten Zeile aus
  • Gib alle Werte der ersten Spalte aus und verwende max. 15 Zeichen Code (zzgl. print() )
  • Erstelle den Mittelwert aller Werte der ersten Spalte mit der neu erlernten Methode
  • Gib die vorletzte Zeile der Matrix aus
  • Gib den Bereich der Zeilen von 15 – 25 mit einem Befehl aus
  • Gib jede dritte Zeile der Matrix aus

Visualisierung von Daten

In Python visualisert man Daten mit der Bibliothek Matplotlib

Installation


pip install matplotlib

Import

import matplotlib

Pyplot

Die meisten Matplotlib Anwendungen liegen im pyplot Unterverzeichnis und werden im Normalfall mit dem plt Alias imporitert.

import matplotlib.pyplot as plt
import numpy as np

xPunkte = np.array([0, 6])
yPunkte = np.array([0, 250])

plt.plot(xPunkte, yPunkte)  # Anweisung zum Plotten
plt.show()  # Anweisung zum Zeigen

Aufgabe

  • Füge die Feature-Matrix und die Label zusammen, sodass jedes Feature ein Label erhält
  • Speichere mittels Indizierung die Daten der Fische in eine neue Matrix „fische“