ich war hier: CIPythonBA

Version [92124]

Dies ist eine alte Version von CIPythonBA erstellt von haeuser am 2018-10-24 11:49:12.

 

Computational Intelligence in Python


Diese Seite beschreibt die Inhalte des Tutoriums "Tutorium Python Programmierung (Bachelorstudiengang)". Das Ziel des Tutoriums ist es, eine Einführung in Python zu geben, sowie die gezeigten Programmbeispiele in eigenen Übungen zu festigen. Des Weiteren werden verschiedene Methoden zur Klassifizierung und dem einfachste Neuronale Netz vermittelt bzw. gefestigt. Fachübergreifende Kenntnisse wie z.B. die Visualisierung in Python werden ebenfalls vermittelt.

Um den Inhalten folgen zu können, werden geringe Grundkenntnisse in Computational Intelligence / Mustererkennung vorrausgesetzt.

Die Vorbereitung


Die erste Termin handelte von den Grundlagen der Programmierung in Python. Anfgefangen mit der Installation der Entwicklungsumgebung, Erstellung einer Projektes und den Allgemeinen Programmiergrundlagen. Zu den Allgemeinen Programmiergrundlagen gehören die Verwendung von Variablen, Verzweigungen, Schleifen, Listen & andere Datenstrukturen, sowie Exception Handling. Dies wird Ihnen Herr Gerlach präsentieren, weitere Informationen sowie die Präsentationsunterlagen finden Sie auf seiner Seite: Tutorium Python - Master


Objektorientierten Programmierung (OOP)


Im zweiten Termin befassen wir uns mit der Objektorientierten Programmierung (OOP). Hierbei erstellen wir eigene Funktionen, Module und Klassen, welche die Grundlagen für die Wiederverwendbarkeit von Quellcode ist. Des Weiteren befassen wir uns mit Zugriffsmodifizieren und der Vererbung. Die OOP bezieht sich wie bereits erwähnt, auf die Wiederverwendbarkeit. So kann z.B. eine Klasse Film erstellt werden, aus derer mehrere Objekte mit unterschiedlichen Inhalten erstellt und zu einer Liste hinzugefügt oder ähnlichen verwendet werden. Bei der Vererbung im Gegensatz, geht es um die Ableitungen von Klassen. Wie im Beispiel, besitzt man die Oberklasse Lebewesen, welche die Variable "name" und die zwei Methoden "altern()" und "fortbewegen()" besitzt. Die zwei Unterklassen "Mensch" und "Vogel" werden von der Klasse Lebewesen abgeleitet, d.h. sie besitzten alle Variablen und Methoden von der Klasse Lebewesen. In unserem Bespiel überschreiben die Unterklassen zusätzlich die Methode "fortbewegen", d.h. dass sie diese nur für sich selbst abändern.
 (image: https://ife.erdaxo.de/uploads/CIPythonBA/oop.jpg)


Parallele Programmierung


Der dritte Termin setzt sich mit dem Multithreading und Multiprocessing auseinanden. Der Unterschied zwischen den beiden ist hierbei hierarchisch. Ganz oben steht eine Prozess, welcher mehrere Threads beinhalten kann. In Python gibt es jedoch einen bedeutenden Unteschied, im Gegensatz zu andern Programmiersprachen, welcher als Problem des Standart Interpreter von Python (CPython) gilt. Dies ist der sogenannte Global Interpreter Lock (GIL), welcher momentan nur eingeschränkt multithreadingfähig ist. Es können zwar mehrere Threads erstellt werden, diese können jedoch nicht parallel laufen. Bei gewissen anderen Implementierungen tritt dieses Problem jedoch nicht auf. Als erstes werden wir uns mit den Einsatzgebieten der beiden auseinander setzten. Anschließend werden wir uns mit dem Multithreading beschäftigen, in Bezug auf Thread ertstellen, Eventabfragen, benutzen einer Queue zur Abarbeitung von Aufgaben und das benutzen einen Sperrmechanismus. Dies ist die tiefere Ebene, da jedes Programm ein Prozess besitzt, indem mindestens der Main-Thread und / oder mehere Threads laufen. Mehrere Threads eines Prozesses teilen sich Daten und Systemressourcen und sind leichter zu erstellen aus Prozesse. Anschließend begen wir uns eine Ebene höher zum Multiprocessing, welche die Erstellung mehrere Prozesse ermöglich, wodurch die Parallelisierung auf meheren Prozessorkernen ermöglicht wird. Die Erstellung eines Prozesses ist deutlich rechenintensiver als bei einem Thread, da jeder Prozess über seine eigenen Ressourcen verfügt. Hierfür schauen wir uns mehrere Beispiele an, besonders aber jedoch das Pool Mutlithreading, welches meines Erachtens die einfachste ist.
Neue Folien und Unterlagen sind bereits in Arbeit und werden zum Termin hochgeladen, die alten Folien und Beispieldaten zu den Grundlagen sowie Multiprocessing können Sie hier herunterladen: Vorlesung 1 & 2 mit Aufgaben
 (image: https://ife.erdaxo.de/uploads/CIPythonBA/thread.jpg)  (image: https://ife.erdaxo.de/uploads/CIPythonBA/process.jpg)


Visualisierung


In der dritten Vorlesung beschäftigten wir uns mit der Visualisierung von Daten von Python, mit der Bibliothek "matplotlib". Hierbei behandelten wir diverse Diagrammtypen und der Konfiguration der Achsen, Beschriftungen und Legenden.
 (image: https://ife.erdaxo.de/uploads/CIPythonBA/tortendia.jpg)  (image: https://ife.erdaxo.de/uploads/CIPythonBA/histogram.jpg)


Die Folien zur Visualisierung und kNN können Sie hier herunterladen: Vorlesung 3


Klassifizierungen

k-Nearest Neighbors (KNN)


Als ersten Algorithmus lernten wir den k-Nearest Neighbors (KNN) kennen, welchen Herr Gerlach ausführlich behandelt hat. Kurz gesagt dient dieser Algorithmus als Klassifikationsverfahren, unter der Berücksichtigung der k nächsten Nachbarn. Weitere Details finden Sie auf: Tutorium Python - Master


k-Means


Der k-Means ist ein weitere Klassifizierungsalgorithmus zu Clusteranalyse. Im Gegensatz zu dem KNN, haben die Datensätze noch keine Klassenzuteilung. Dem Algorithmus erhält die Datensätze und wir geben ihm die Anzahl der Gruppen/Cluster mit, anhand desses weist er den Datensätze Gruppen zu. Für diese Zuteilung wird meistens der Lloyd-Algorithmus verwendet, welcher aus 3 Schritten besteht.
  1. Initialisierung der k zufälligen Mittelwerte
  1. Zuordnung der Datenpunkte zu einem Cluster
  • Hierbei wird die euklidische Distanz von jedem Punkt zu jedem Cluster gebildet
  • Der Punkt wird dem Cluster zugewiesen, zu welchem die Distanz am geringsten ist
  1. Berechnen der Clusterzentren
  • Anhand einer Mittelwertbildung der X / Y Werte eines Clusters
  • Schritt 2 & 3 werden wiederholt bis sich die Clusterzentren nicht mehr bzw. so gut wie nicht mehr ändern oder eine gewisse Anzahl von Iterationsschritten erreicht ist

 (image: https://ife.erdaxo.de/uploads/CIPythonBA/kMeans1.jpg)  (image: https://ife.erdaxo.de/uploads/CIPythonBA/kMeans2.jpg)


Anwendungsbeispiele

In der Vorlesung haben wir zum einen eine Eigenimplementierung vorgenommen, aber auch das Paket sklearn an dem Beispiel der Bildfarben-Skalierung. Hierbei haben wir das Bild eingelesen und in ein mehr dimensionales Array konvertiert, anhand der X & Y Werte sowie der RGB Farbwerte. Dem Algorithmus wird das dieses X & Y Farbarray übergeben und die Anzahl der Farben, auf welche es herunter skaliert werden soll.
 (image: https://ife.erdaxo.de/uploads/CIPythonBA/kMeans_Beispiel.jpg)



Fuzzy k-Means


Der Fuzzy k-Means ist eine Erweitung des k-Means, wobei jeder Datenpunkt nicht einem einzeln Cluster zugeordnet wird, sondern eine gewisse Prozentzuorndnung zu jedem Cluster erhält. Die Summer der prozentualen Zuordnung ergibt 100%. Für diese Zuordnungen wird eine Zuordnungsmatrix benötigt / erstellt. Noch einer Erweiterung ist die zusätzliche Anpassungvariable (Fuzzyfier), welche auch als Verschleifungsgrad bezeichnet wird. Diese dient für die Schärfe- / Genauigkeitseinstellung der Clusterung. Wird dieser >2 gewählt erfolgt eine sehr unscharfe Clusterung. Wird eine sehr scharfe / genauer Clusterung gewünscht, sollte der Fuzzyfier zwischen 1-2 gewählt werden. Des Weiteren werden die Clusterzentren durch eine andere Formel berechnet, wie in den folgenden Bildern zu sehen.

 (image: https://ife.erdaxo.de/uploads/CIPythonBA/fuzzy_1.jpg)  (image: https://ife.erdaxo.de/uploads/CIPythonBA/fuzzy_2.jpg)


Die Folien zum kMeans und Fuzzy kMeans können Sie hier herunterladen: Vorlesung 4.2



Support Vektor Maschiene


Die Support Vektor Maschiene ist eine wichtige Gruppe für Klassifikationen. Das Grundkonzept ist es, dass versucht wird die vorhanden Daten linear zu trennen und somit eine Klassifikation durchzuführen. Die Trennfunktion wird so gebildet, dass die Daten maximal von einander getrennt sind. Dies wird als Large Margin Concept bezeichnet. Falls keine lineare Separation möglich ist oder die Spanne zwischen den Klassen zu gering ist, nutzt man das Soft Margin Concept, welches Fehlklassifikationen erlaubt. Dieses wird durch den C-Parameter zugelassen.
 (image: https://ife.erdaxo.de/uploads/CIPythonBA/svm_1.jpg)  (image: https://ife.erdaxo.de/uploads/CIPythonBA/svm_2.jpg)

Ist eine lineare Trennung nicht möglich, wird der Kernel-Trick angewendet. Hierbei werden die Daten in einen höherdimensionalen Raum transferiert, wo sie dann linear getrennt werden können. Es wird eine lineare Trennfunktion gebildet, anschließend werden die Daten und die (Hyper-)Trennebene zurück transformiert, wobei die Trennfunktion dann meist nicht mehr linear bzw. zusammenhägend ist.
 (image: https://ife.erdaxo.de/uploads/CIPythonBA/svm_3.jpg)

In Python stehen mehrere Kernel zur Verfügung, wobei die bekanntesten der poly (polynominale) und der rbf (radial basis function) Kernel sind. Beim poly Kernel wird eine weiteres Merkmal hinzugefügt durch die Wertkombination der vorhandenen Merkmale, z.B. [x,y,z] -> [x,y,z, x^3+y^2+z]. Der rbf Kernel wir benutzt um geschlossene Bereiche z.B. Kreise oder Cluster zu erkennen. Dieser bildet Hügel, welche durch eine (Hyper-)Ebene linear getrennt werden können.
 (image: https://ife.erdaxo.de/uploads/CIPythonBA/svm_4.JPG)

Die Folien zur SVM können Sie hier herunterladen: Vorlesung 6


Noch mögliche Vorlesungspunkte in kommenden Semestern

  • Random Forest
  • Vertiefende Beispiele Neuronale Netzte (z.B. Bild Unterscheidung Katze/Hund)
  • Vertiefende Beispiele SVM

CategoryTutorienFKITWS1819
Diese Seite wurde noch nicht kommentiert.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki