Hallo Tonka,
künstliche Intelligenz und Mustererkennung sind sehr weitläufige Begriffe und mir ist kein Buch bekannt dass beides abdeckt, zumal diese Methoden speziell auf das Problem angepasst werden müssen - eine allgemeine Lösung gibt es nicht.
Eine gute Übersicht über die Methoden der KI bietet Andries P. Engelbrecht in
Computational Intelligence. Darin ist auch Pseudocode für die meisten Methoden enthalten. Generell ist es jedoch eine mathematische Abhandlung des Themas, Praxisbeispiel finden sich wenige jedoch werden die Einsatzgebiete gezeigt.
Speziell für C# und neuronale Netze kann als Einführung von Jeff Heaton
Introduction to Neural Networks for C# verwendet werden. Dieses Buch ist praxisorientiert hat aber leider viele Fehler die einen nicht wissenden falsches lehren. Wenn man vorher schon die Grundlagen kennt kann man darüber hinwegblicken und das Kapitel das mit SOM bezeichnet wurde eben als Vector quantization bezeichen, nur als Beispiel. Daher empfehle parall zu diesem Buch auch das
Forum dazu zu beachten in dem ich auf die meisten Fehler hingewiesen habe.
Ich verwende zur Mustererkennung im Zuge von Data-Mining eine Selbst organisierte Karte (SOM, Kohonen-Netz) und für dieses ist Kohonens Monograph
Self-Organizing Maps sozusagen die Bibel dafür. Dieses Buch ist sehr mathematisch (man hat damit Freude oder hasst es - bei mir ersteres) und bietet alles rund um das Thema SOM. Praxisbeispiele sind darin auch enthalten. Aber kein Code sondern nur Formeln - diese sollten sich aber leicht in Code umsetzen lassen.
Für andere Themen wie neuronales Gas, etc. ist es am Besten die Origanalarbeiten der jeweiligen Erfinder zu lesen. Dies sind meist Artikel mit ca. 10 Seiten die eine Einführung in das Thema geben und mit einem typischen Praxisbeispiel für die Anwendung abgeschlossen werden. Dazu ist es vorteilhaft ein Mitglied von zB IEEE zu sein, denn dort werden solche Arbeiten bevorzugt veröffentlicht.
Weiters ist es empfehlenswert sich in dan Universitäten wo die treibenden Kräften sind sich die Dissertationen durchzulesen. Bei der SOM zB ist dies die Helsinki University of Technology.
Ich kann nur eine ziemlich allgemeine Antwort geben da das Thema eben sehr weitreichend ist. Mustererkennung kann Texterkennung, Gesichtserkennung, Data-Mining, etc. sein. Weiters muss auch zwischen Clustern und Klassifizierung unterschieden werden. Ersteres lässt sich durch unüberwachtes Lernen bewerkstelligen letzeres respektive mit überwachten Lernen. Für beide gibt es wiederum verschiedenste Methode die angewandt werden können. Welche zu bevorzugen ist kann auch nicht pauschal beantwortet werden, denn das hängt - wie immer - vom Anwendungsfall ab. Persönlich verwende ich meist fürs Clustern ein (wachsendes) neuronales Gas und für die Klassifizierung die Learning Vector Quantization oder ein Feedforward-Netzwerk - je nachdem was sich bei Referenztest als "besser" herausstellt.
Wie im letzten Absatz kurz angeschnitten gibt es überwachtes und unüberwachtes Lernen. Weiters gibt es eine grobe Unterteilung in vektorbasierte (distanzbasierte) und skalarproduktbasierte Netzwerke. Erstere haben zudem gemein dass sie kompetitiv lernen. Somit unterscheidet sich die "Ausgabe" dieser Netzwerktypen. Die vektorbasierten haben als Ausgabe ein "Siegerneuron" während die skalarproduktbasierten eine reelle Zahl ausgeben. D.h. auch dass erstere distkrete und letztere kontinuierliche Ausgaben haben. Diese Ausgaben gilt es entsprechend zu interpretieren oder durch "Postprocessing" entsprechend aufzuberetein.
Nehemen wir hierzu als Beispiel eine einfache Zeichenerkennung welche als Klassifizierung angesehen werden kann. Dazu eignet sich zB die Learning Vector Quantization (LVQ). Dies ist ein Netzwerk das ähnlich einer SOM aufgebaut ist, das Lernverfahren unterscheidet sich jedoch dahingehend dass die SOM unüberwacht ist und die LVQ ein überwachtes Verfahren. Es gibt auch mehrere Varianten der LVQ - relevant sind meiner Meinung nach nur LVQ-I und OLVQ (sowie die Batch-Varianten davon).
Zurück zum Beispiel: Das Bild des zu erkennenden Buchstaben muss zuerst aufbereitet werden indem es "normalisiert" wird. D.h. ausgerichtet, beschnitten, skaliert, etc. Danach wird die Information jedes Pixels - weiß/schwarz - am Netzwerk angelegt, d.h. jedem Eingabeneuron wird der Wert eines Pixel angelegt. Das (tranierte) Netzwerk verarbeitet diese Information und als Ausgabe bekommt man den Index des Siegerneurons. Da mit dieser Ausgabe nicht viel anzufangen ist muss das Netzwerk im Anschluss an das Training kalibriert werden. D.h. alle zu erkennenden Buchstaben werden dem Netz präsentiert und die Zuordnung Buchstabe <-> Siegerneuron gespeichert - in einer Haschtabelle. Somit kann im Einsatz über dieses Zuordnungstabelle vom Siegerneuron auf den erkannten Buchstaben geschlossen werden.
Im obigen Beispiel würde ein vektorbasiertes Netzwerk verwendet. Das gleiche Beispiel kann auch mit einem skalarproduktbasierten Netzwerk wie einem Multilayer-Perzeptron (MLP) umgesetzt werden - funktioinert allerdings nicht so gut, aber für das Verständnis reicht es.
Hierzu gibt es für die Ausgabe zwei Möglichkeiten:
- für jede Klasse (Buchstabe) wird ein Ausgabeneuron vorgesehen - für das Beispiel wären dies 26
- ein Ausgabeneuron und Unterteilung der Klassen durch Bereiche im Ausgabeintervall (-> Defuzzierung der Ausgabe). ZB wenn das Ausgabeintervall [-1,1] ist so könnte das Teilintervall [-1, -1+1/26] für A, [-1+1/26,-1+2/26] für B, ... [1-1/26,1] für Z stehen
Welche der beiden Varianten verwendet wird hängt wieder vom konkreten Anwendungsgall ab.
So, nun hoffe ich dass die Antwort ein wenig hilfreich ist und zuguter letzt sei noch eine weitere wichtige Quelle zu erwähnen: Fragen hier bei myCSharp ;)
mfG Gü
Speedski