6. Unterrichtsblock
Python Listen
meineListe = ["Apfel", "Zwetschge", "Birne"]
Listen werden verwendet, um mehrere Elemente in einer einzigen Variablen zu speichern.
Listen sind einer von 4 integrierten Datentypen in Python, die zum Speichern von Datensammlungen verwendet werden, die anderen 3 sind Tuple , Set und Dictionary , alle mit unterschiedlichen Qualitäten und Verwendungszwecken.
Im vorherigen 5. Unterrichtsblock haben wir folgende Methoden kennengelernt:
- Zugriff auf Listen
- Änderung von Werten
- Hinzufügen von Werten
Aufgabe
Gehe die Lektionen der vorherigen Unterrichtsstunde durch und wiederhole die Übungen.
Entfernen von Listenelementen
Angegebenes Element entfernen
Die remove()
Methode entfernt das angegebene Element.
„Birne“ entfernen:
meineListe = ["Apfel", "Zwetschge", "Birne"]
meineListe.remove("Birne")
print(meineListe)
Angegebenen Index entfernen
Die pop()
Methode entfernt den angegebenen Index.
# Entferne das zweite Element:
meineListe = ["Apfel", "Zwetschge", "Birne"]
meineListe.pop(1)
print(meineListe)
Wenn man den Index bei pop()
nicht angibt, entfernt die Methode das letzte Element.
meineListe = ["Apfel", "Zwetschge", "Birne"]
meineListe.pop()
print(meineListe)
Das del
Schlüsselwort entfernt ebenfalls den angegebenen Index:
meineListe = ["Apfel", "Zwetschge", "Birne"]
del meineListe[0]
print(meineListe)
Das del
Schlüsselwort kann die Liste auch komplett löschen.
meineListe = ["Apfel", "Zwetschge", "Birne"]
del meineListe
Leeren einer Liste
Die clear()
Methode leert die Liste. Die Liste bleibt bestehen, hat aber keinen Inhalt.
meineListe = ["Apfel", "Zwetschge", "Birne"]
meineListe.clear()
print(meineListe)
Aufgabe
Baue die o.g. Codebeispiele nach und probiere verschiedene Varianten und Abfolgen.
Schleifen durch eine Liste laufen lassen
Man kann die Listenelemente mit einer for
Schleife durchlaufen:
Folgendes Beispiel gibt alle Elemente in der Liste einzeln aus:
meineListe = ["Apfel", "Zwetschge", "Birne"]
for x in meineListe:
print(x)
Durchlaufen von Indexnummern
Man kann die Listenelemente auch durchlaufen, indem man auf ihre Indexnummer verweist. Hierzu verwendet man die Funktionen range()
und len()
, um eine geeignete Iterable zu erstellen.
Folgende Beispiel gibt alle Artikel anhand ihrer Indexnummer aus:
meineListe = ["Apfel", "Zwetschge", "Birne"]
for i in range(len(meineListe)):
print(meineListe[i])
Die im obigen Beispiel erstellte Iterable ist [0, 1, 2]
.
Verwendung einer While-Schleife
Man kann die Listenelemente auch mit einer while
Schleife durchlaufen .
Man verwendet hierfür die len()
Funktion, um die Länge der Liste zu bestimmen, beginnt dann bei 0 und durchläuft die Listenelemente, indem man sich auf ihre Indizes bezieht.
Hierbei muss man den Index nach jeder Iteration um 1 erhöhen.
Folgendes Beispiel druckt alle Artikel, indem eine while
Schleife verwendt wird, um alle Indexnummern zu durchlaufen:
meineListe = ["Apfel", "Zwetschge", "Birne"]
i = 0
while i < len(meineListe):
print(meineListe[i])
i = i + 1
Schleifen mit Listenverständnis
List Comprehension (Listenverständnis) bietet die kürzeste Syntax zum Durchlaufen von Listen:
Folgendes Beispiel zeigt die Kurzform einer for
Schleife, die alle Elemente in einer Liste ausgibt:
meineListe = ["Apfel", "Zwetschge", "Birne"]
[print(x) for x in meineListe]
Aufgabe
Baue o.g. Codebeispiele nach und variiere mit verschiedenen Aufbauten. Nimm auch Lektionen aus den vorhergegangenen Unterrichtsblöcken mit in die Beispiele.
Listenverständnis (List Comprehension)
Das Listenverständnis bietet eine kürzere Syntax, wenn man eine neue Liste basierend auf den Werten einer vorhandenen Liste erstellen möchten.
Beispiel:
Basierend auf einer Liste von Früchten möchten man eine neue Liste, die nur die Früchte mit dem Buchstaben „a“ im Namen enthält.
Ohne die Syntax der List Comprehension müssen man eine for
Anweisung mit einem bedingten Test darin schreiben:
meineListe = ["Apfel", "Zwetschge", "Birne", "Kirsche", "Mango", "Banane", "Ananas"]
neueliste = []
for x in meineListe:
if "a" in x:
neueliste.append(x)
print(neueliste)
Mit dem Listenverständnis kann man dies alles mit nur einer Codezeile erledigen:
meineListe = ["Apfel", "Zwetschge", "Birne", "Kirsche", "Mango", "Banane", "Ananas"]
neueliste = [x for x in meineListe if "a" in x]
print(neueliste)
Die Syntax
neueliste = [ausdruck for artikel in liste if bedingung == True]
Der Rückgabewert ist eine neue Liste, wobei die alte Liste unverändert bleibt.
Bedingung
Die Bedingung ist wie ein Filter, der nur die Elemente mit dem Wert True
akzeptiert.
Akzeptieren Sie nur Artikel, die nicht „Apfel“ sind:
neueliste = [x for x in meineListe if x != "Apfel"]
Die Bedingung if x != "Apfel"
True
wird für alle Elemente außer "Apfel"
zurückgegeben, wodurch die neue Liste alle Früchte außer "Apfel"
enthält.
Die Bedingung ist optional und kann weggelassen werden:
Ohne if
-Aussage:
neueliste = [x for x in meineListe]
Iterable
Eine Iterable kann jedes iterierbare Objekt sein, wie eine Liste, ein Tupel, eine Menge usw.
Man kann die Funktion range()
verwenden, um eine Iterable zu erstellen:
neueliste = [x for x in range(10)]
Gleiches Beispiel mit einer Bedingung, nur Zahlen unter 5 zu akzeptieren:
neueliste = [x for x in range(10) if x < 5]
Ausdruck
Der Ausdruck ist das aktuelle Element in der Iteration, aber auch das Ergebnis, das man bearbeiten kann, bevor es zu einem Listenelement in der neuen Liste wird:
Wandelt die Werte in der neuen Liste in Großbuchstaben um:
neueliste = [x.upper() for x in meineListe]
Man kann das Ergebnis beliebig einstellen. Folgendes Beispiel setzt alle Werte in der neuen Liste auf „Hallo“:
neueliste = ['Hallo' for x in neueliste]
Der Ausdruck kann auch Bedingungen enthalten, nicht wie ein Filter, sondern als Möglichkeit, das Ergebnis zu manipulieren:
Ausgabe von „Mango“ statt „Banane“:
neueliste = [x if x != "Banane" else "Mango" for x in neueliste]
Der Ausdruck im obigen Beispiel sagt:
„Gib den Artikel aus, wenn dieser keine Banane ist, wenn es eine Banane ist, gib Mango zurück“.
Aufgabe
Baue o.g. Codebeispiele nach und erweitere diese duch Erkenntnisse aus anderen Unterrichtsblöcken.
Listen sortieren
Liste alphanumerisch sortieren
Listenobjekte haben eine sort()
Methode, die die Liste standardmäßig alphanumerisch aufsteigend sortiert:
Sortiert die Liste alphabetisch:
meineListe = ["Apfel", "Zwetschge", "Birne", "Kirsche", "Mango", "Banane", "Ananas"]
meineListe.sort()
print(meineListe)
Sortiert die Liste numerisch:
meinezahlen = [100, 50, 65, 82, 23]
meinezahlen.sort()
print(meinezahlen)
Absteigend sortieren
Um absteigend zu sortieren, verwenden Sie das Schlüsselwortargument reverse = True
:
Sortiert die Liste absteigend:
meineListe = ["Apfel", "Zwetschge", "Birne", "Kirsche", "Mango", "Banane", "Ananas"]
meineListe.sort(reverse = True)
print(meineListe)
Sortiert die Liste absteigend:
meinezahlen = [100, 50, 65, 82, 23]
meinezahlen.sort(reverse = True)
print(meinezahlen)
Sortierfunktion anpassen
Man kann auch eine eigene Funktion anpassen, indem man das Schlüsselwortargument .key = function
verwenden
Die Funktion gibt eine Zahl zurück, die zum Sortieren der Liste verwendet wird (die niedrigste Zahl zuerst):
Sortiert die Liste danach, wie nahe die Zahl an 50 liegt:
def meinefunktion(n):
return abs(n - 50)
meinezahlen = [100, 50, 65, 82, 23]
meinezahlen.sort(key = meinefunktion)
print(meinezahlen)
Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung
Standardmäßig ist die sort()
Methode case sensitive, was dazu führt, dass alle Großbuchstaben vor Kleinbuchstaben sortiert werden:
Die Sortierung nach Groß- und Kleinschreibung kann zu einem unerwarteten Ergebnis führen:
meineListe = ["banane", "Orange", "Kiwi", "kirsche"]
meineListe.sort()
print(meineListe)
Man kann jedoch eingebaute Funktionen als Schlüsselfunktionen beim Sortieren einer Liste verwenden.
Wenn man also eine Sortierfunktion möchte, bei der die Groß-/Kleinschreibung nicht berücksichtigt wird, verwendt man str.lower
als Schlüsselfunktion:
Führt eine Sortierung der Liste ohne Berücksichtigung der Groß-/Kleinschreibung durch:
meineListe = ["banane", "Orange", "Kiwi", "kirsche"]
meineListe.sort(key = str.lower)
print(meineListe)
Umgekehrte Reihenfolge
Was ist, wenn man die Reihenfolge einer Liste unabhängig vom Alphabet umkehren möchte? Die reverse()
Methode kehrt die aktuelle Sortierreihenfolge der Elemente um.
Kehrt die Reihenfolge der Listenelemente um:
meineListe = ["banane", "Orange", "Kiwi", "kirsche"]
meineListe.reverse()
print(meineListe)
Aufgabe
Baue o.g. Codebeispiele nach und erweitere diese duch Erkenntnisse aus anderen Unterrichtsblöcken.
Grundlagen KI & maschinelles Lernen
Definition & Abgrenzung
- Künstliche Intelligenz ist eine Teilmenge der Informatik und bezeichnet Computerprogramme, die eigenständig Probleme lösen können.
- Maschinelles Lernen ist eine Teilmenge der KI und wird angewendet, um in der Problemlösung besser zu werden und die KI zu trainieren.
Unterschied schwache KI und starke KI
Bei künstlichen Intelligenzen gilt es zwischen schwacher und starker KI zu unterscheiden. Während sich die schwache KI in der Regel mit konkreten Anwendungsproblemen beschäftigt, geht es bei der starken KI darum, eine allgemeine Intelligenz zu schaffen, die der des Menschen gleicht oder diese übertrifft.
Anwendungsbereiche
Hautkrebserkennung
Blutuntersuchung und Erkennung von Erregern
Autonome Waffensysteme
Trainingsdaten
- Große Datenmengen nötig
- Gute Datenverfügbrakeit
- Leistungsfähige Rechner nötig
Maschinelles Lernen Grundarten
Wird unterteilt in Lernphase und Anwendung
Überwachtes Lernen (supervised learning)
Zieldaten werden händisch bearbeitet
Unüberwachtes Lernen (unsupervised learning)
- Benötigt keine Zieldaten
- Für die Gruppierung geeignet (Clustering)
- Geeignet mit sehr großen Datenmengen
Teilüberwachtes Lernen
Mischform aus überwachtem und unüberwachtem Lernen
Bestärkendes Lernen (reinforcement learning)
- Mittels Belohnung und Bestrafung (Punktevergabe und Punkteabzug)
- Meist innerhalb einer Sitzation
- Wird oft in der Robotik eingesetzt
Aktives Lernen
Aktives Leren ist eine Unterkategorie des überwachten Lernens.
Aktives Lernen bezeichnet einen Lernalgorithmus, der Datenpunkte aus einer Menge an noch nicht gelabelten Datenpunkten gezielt auswählt, um sie als nächstes labeln zu lassen. Die Vergabe von Labels kann unter anderem von einem Menschen oder zu Evaluierungszwecken vom Algorithmus erfolgen.
Die Auswahl der Datenpunkte erfolgt nach einer Selektionsstrategie. Eine häufig gewählte Selektionsstrategie ist Uncertainty Sampling, das den Datenpunkt mit der geringsten Konfidenz auswählt. Die geringste Konfidenz bedeutet hierbei, dass der Algorithmus bei diesem Datenpunkt am wenigsten sicher ist, zu welcher Klasse dieser passt.
Der Grundgedanke ist, dass das Modell mit weniger Datenpunkten eine genauso hohe oder höhere Klassifikationsgenauigkeit (z.B. 90% richtig erkannt) erzielt wie ein Modell, das alle Datenpunkte nutzt. Wann der Lernprozess stoppt, wird über ein Stoppkriterium definiert.
Meta Lernen
Wenn ein Algorithmus lernt, liegt dieser Technik eine systematische Beobachtung zugrunde. Beim Meta-Learning oder dem „Lernen zu lernen“ geht es darum zu erkennen und zu adaptieren, wie verschiedene Ansätze des Maschinellen Lernens bei einer Vielzahl von bereits erledigten Lernaufgaben funktioniert haben.
Der Algorithmus kann so entscheiden, welche Lernmethoden für welche Art von Anwendungen am besten geeignet sind.
Anwendungen für Maschinelles Lernen
Clustering
Clustering wird unter Anderem angewendet, um anhand von Attributen bestimmte Gruppierungen vorzunehmen. Ein möglicher Anwendungsfall ist z. B. das Erkennen von Spam-Bots in sozialen Medien.
Ein einfacher Bot hätte eine sehr hohe Posting-Rate und würde auch zu Zeiten posten, in welchen die meisten Menschen in einer bestimmten Zeitzohne schlafen. Anhand dieser Attribute „Häufigkeit der Posts“ und „Continuität der Posts“ sowie der „Postingzeit“ könnte man über das Clustering einen bestimmten Prozentsatz an Bots herausfiltern und die Ihalte dieser Bots entweder sperren, oder weitere Filter bzw. Maßnahmen anwenden.
Klassifikation
Die Klassifikation wird häufig verwendet, um eine Menge an Bilddaten bestimmten Klassen zuzuweisen.
Regression
Mathematisch müssen sich Regression und Klassifikation gar nicht all zu sehr voneinander unterscheiden. Viele Verfahren der Klassifikation lassen sich mit nur wenig Anpassung auch zur Regression anwenden, oder umgekehrt. Künstliche neuronale Netze, k-nächste-Nachbarn und Entscheidungsbäume sind gute Beispiele, die in der Praxis sowohl für Klassifkation als auch für Regression eingesetzt werden, natürlich mit unterschiedlichen Stärken und Schwächen.
Unterschiedlich ist jedoch der Zweck der Anwendung
Bei der Regression möchten wir stetige Werte vorhersagen (z. B. Temperatur der Maschine), bei der Klassifikation hingegen Klassen unterscheiden (z. B. Maschine überhitzt oder überhitzt nicht).
Unterschiede zwischen linearer und nicht-linearer Klassifikation und linearer und nicht-linearer Regression. Für Einsteiger in diese Thematik ist beachten, dass jede maschinell erlernte Klassifikation und Regression einen gewissen Fehler hat, der unter Betrachtung der Trainings- und Testdaten zu minimieren ist, jedoch nie ganz verschwindet.
Aufgabe
Recherchiere verschiedene Anwendungsbereiche von KI.
Recherchiere 2/3 der verfügbaren Zeit über den Bereich, der Dich am meisten interessiert und begründe, warum Dich der Bereich interessiert und welche Teile Dich genau interessieren.
Aufgabe
Aufgabe
Kombiniere das heute Erlernte mit den Inhalten vorherigen Unterrichtsblöcke und probiere verschiedene Konstellationen aus.