NumPy

Was ist NumPy?

NumPy (kurz für Numerical Python) ist eine leistungsstarke Bibliothek für die Durchführung mathematischer Operationen auf großen Datenfeldern. Sie ist in Python geschrieben und baut auf der numerischen Bibliothek von Python auf, wodurch sie sich leicht in andere Python-Bibliotheken und -Tools integrieren lässt. NumPy ist in der wissenschaftlichen und daten-wissenschaftlichen Gemeinschaft weit verbreitet und gilt als grundlegendes Werkzeug für viele datenintensive Anwendungen.

Eines der Hauptmerkmale von NumPy ist die Fähigkeit, mit Arrays von Daten zu arbeiten. Ein Array ist eine Datenstruktur, die eine Sammlung von Elementen desselben Typs in einem zusammenhängenden Speicherblock speichert. NumPy-Arrays sind ähnlich wie Python-Listen, aber sie sind für bestimmte Arten von Operationen, wie z. B. mathematische Berechnungen, viel effizienter.

NumPy wird häufig für die Durchführung von mathematischen Operationen auf großen Arrays von Daten verwendet. Auch für andere Aufgaben, wie das Umformen (reshapen), Verflachen (flatten) und Anhängen (append) von Arrays, findet es häufig Anwendung.

Beispiele für die Anwendung von NumPy

Erstellen eines NumPy-Arrays

Ein NumPy-Array kann aus einer Python-Liste mithilfe der Funktion numpy.array() erstellt werden. Zum Beispiel wird mit Hilfe der Funktion numpy.linspace() ein Array mit 10 gleichmäßig verteilten Werten zwischen 0 und 1 generiert.

import numpy as np
a = np.linspace(0, 1, 10)
print(a)

Umformung eines Arrays

Die Form eines NumPy-Arrays kann mit der Funktion reshape() geändert werden. Dafür kann beispielsweise ein 1D-Array mit 10 Elementen in ein 2D-Array mit 5 Zeilen und 2 Spalten umgewandelt werden.

import numpy as np
a = np.arange(10)
print(a)
b = a.reshape(5, 2)
print(b)

Mathematische Operationen mit Arrays durchführen

Mathematische Operationen können mit Arrays durchgeführt werden, z. B. Addition, Subtraktion, Multiplikation und Division, indem die standardmäßigen mathematischen Operatoren verwendet werden. Zum Beispiel können zwei Arrays addiert und die Summe aller Elemente in einem Array berechnet werden.

import numpy as np
a = np.array([1, 2, 3, 4, 5])
b = np.array([5, 4, 3, 2, 1])
c = a + b
print(c)
print(c.sum())

Random choices

In NumPy kann die Funktion numpy.random.choice() verwendet werden, um zufällig Elemente aus einem Array oder einem gegebenen 1-D-Array-ähnlichen Objekt auszuwählen.

Hier ein Beispiel, um zufällig drei Elemente aus einem Array auszuwählen:

import numpy as np
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
b = np.random.choice(a, size=3, replace=False)
print(b)

Der obige Code wählt nach dem Zufallsprinzip 3 Elemente aus dem Array „a“ aus, ohne sie zu ersetzen, und weist sie der Variablen „b“ zu.

Auch die Wahrscheinlichkeit kann für die Auswahl jedes Elements mit dem Parameter p angegeben werden. Wenn zum Beispiel drei Elemente aus dem Array „a“ zufällig ausgewählt werden sollen, aber das Element mit dem Wert 5 eine höhere Wahrscheinlichkeit haben soll, ausgewählt zu werden, können Sie den folgenden Code verwenden:

import numpy as np
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
p = [0.1, 0.1, 0.1, 0.1, 0.3, 0.1, 0.1, 0.1, 0.1, 0.1]
b = np.random.choice(a, size=3, p=p)
print(b)

In diesem Beispiel hat das Element mit dem Wert 5 eine Wahrscheinlichkeit von 30%, ausgewählt zu werden, während alle anderen Elemente eine Wahrscheinlichkeit von 10% haben.

Eine weitere nützliche Funktion für die Zufallsauswahl ist numpy.random.shuffle, die das Array entlang der ersten Achse eines mehrdimensionalen Arrays mischt. Diese Funktion ändert die Eingabe an Ort und Stelle und gibt None zurück.

import numpy as np
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
np.random.shuffle(a)
print(a)

NumPy vs. Python

NumPy ist schneller als Python-Listen, weil es ein effizienteres Speicherlayout für Arrays verwendet, das einen schnelleren Zugriff auf die Elemente ermöglicht. Darüber hinaus bietet NumPy eine breite Palette an eingebauten mathematischen Funktionen, die für die Verwendung mit Arrays optimiert sind.

NumPy vs. Pandas

Im Vergleich zu Pandas ist NumPy eine Bibliothek auf niedrigerer Ebene, die sich auf die Bereitstellung effizienter Array-Operationen konzentriert. Pandas baut auf NumPy auf und bietet zusätzliche Funktionen für die Arbeit mit tabellarischen Daten, wie z. B. Datenrahmen und -reihen. Während NumPy für die Durchführung mathematischer Operationen auf großen Daten-Arrays nützlich ist, eignet sich Pandas für Datenmanipulationen und Analyseaufgaben.

NumPy ist nicht so leicht zu erlernen wie Pandas, da Pandas eine High-Level-Schnittstelle für die Arbeit mit tabellarischen Daten bietet, die benutzerfreundlicher ist als die Array-Operationen von NumPy. NumPy ist jedoch ein grundlegendes Werkzeug für viele datenintensive Anwendungen und wird in der wissenschaftlichen und Data-Science-Gemeinschaft häufig verwendet.

In Bezug auf die Leistung ist NumPy schneller als Pandas, wenn es um die Durchführung von Array-Operationen geht. Pandas bietet jedoch zusätzliche Funktionen für die Arbeit mit tabellarischen Daten, die es für bestimmte Arten von Operationen langsamer machen können.

Named Graph

Was ist ein Named Graph?

Der Named Graph ist einer der Grundgedanken des semantischen Webs. Das semantische Web wiederum steht für die Idee, dass das Internet als „gigantischer globaler Graph“ verstanden werden kann.

Ein Named Graph wird durch den Aufruf eines Uniform Resource Identifiers – das ist der Name des Graphen, abgekürzt URI – angesprochen und kann neben dem eigentlichen Inhalt zusätzliche Metadaten enthalten. Der Named Graph erweitert das RDF-Modell, das wiederum aus drei Teilen besteht: einer Ressource, der Eigenschaft dieser Ressource und den Werten dieser Eigenschaft. Diese Struktur kann man auch treffend mit den grammatikalischen Teilen eines Satzes vergleichen, und zwar mit Subjekt, Prädikat und Objekt. Die Datensysteme, die mit solchen sogenannten Tripeln arbeiten, sind gegenüber relationalen Datenbanken sehr performant – daher werden sie häufig im Bereich Künstliche Intelligenz eingesetzt. Hier ist es nämlich wichtig, auf enorme Mengen von Daten schnell zuzugreifen. Das heißt, neben dem World Wide Web werden mit Named Graphs bspw. auch Wissensrepräsentationen modelliert. Die Wissensrepräsentation ist ebenfalls ein Teilbereich der Künstlichen Intelligenz und kann z.B. ein digitales Lexikon sein.

Was hat der Named Graph mit dem HTTP zu tun?

Ein Graph besteht aus Knoten und Kanten; überträgt man dieses Modell auf das Web, sind das Webseiten und deren Verbindungen. Tim Berners-Lee – der Erfinder des Internets – beschrieb seine Erfindung als „Giant Global Graph“. Wie bereits beschrieben, sind die darin enthaltenen Teilgraphen (sprich die Webseiten) über URIs erreichbar. Nun sind diese Teilgraphen in der Realität HTML-Dokumente, die über HTTP-Requests aufgerufen werden können; das erklärt, weshalb das Hypertext Transfer Protocol und Hyperlinks die Kanten im Graphenmodell sind.

Um das Resource Description Framework Schema (abgekürzt RDFS) effizient nutzen zu können, gibt es RDF-Dokumente. Die eigens dafür entwickelte Sprache RDF/XML erlaubt es, Webseiten mit Tripeln zu beschreiben. Wird auf einer Seite bspw. ein Musikalbum vorgestellt, erhält man über das RDF-Dokument Informationen wie Titel, Band oder Herstellungsjahr. Natürlich ist darin auch der zugehörige Hyperlink als Namensgeber des Named Graph enthalten. Der RSS-Feed, der Empfänger über Änderungen auf Websites informiert, nutzt diese Technik z.B. für sich.

Wie können uns RDF und Ontologien helfen?

Die Begriffe Ontologie und RDF-Schema werden häufig synonym verwendet. In der Praxis handelt es sich dabei um eine Datenbank, deren Datenstruktur aus Tripeln besteht – den sogenannten Triplestore. So wie es die Datenbanksprache SQL für relationale Datenbanken gibt, steht auch für einen RDF Store (wie ein Triplestore ebenso genannt werden kann) eine Abfragesprache zur Verfügung; mit SPARQL wird auf Datenobjekte zugegriffen. Auf dieser Art von Datenhaltung basieren viele soziale Netzwerke. Dank der FOAF-Ontologie erhält man bei Abfragen per SPARQL in solchen Datenbanksystemen neben Angaben über die abgefragte Person (wie Name oder Herkunft) auch Informationen über die Verbindung mit anderen Mitgliedern des Netzwerks.

Natural Language Programming

Was ist Natural Language Programming?

Wird Natural Language Programming (auch abgekürzt als NLP) für die Entwicklung von Software eingesetzt, besteht das Computerprogramm aus meist englischsprachigen (und durch Abschnitte strukturierten) Texten.

Die Sätze, aus denen diese Texte bestehen, sind eng an die menschliche Sprache angelehnt. Damit sie von dem Computer verarbeitet werden können, werden die sogenannten NLP-Dokumente in tiefere Programmiersprachen wie bspw. Python übersetzt.

Natural Language Programming weist einige Analogien zum zukunftsträchtigen Natural Language Processing auf (Verarbeitung von gesprochener Sprache); beide Felder beschäftigen sich mit der Steuerung von Computern durch menschliche Sprache. Jedoch spielt Natural Language Programming nur für Fachleute eine Rolle, weil hierfür die Syntax der unterschiedlichen Programmiersprachen erst gelernt werden müssen. Letzteres Feld ist auch Endverbraucher interessant, da lediglich die Fähigkeit zu sprechen von dem Anwender vorausgesetzt wird.

Wie lautet die Syntax von NLP?

Abgesehen von wenigen Ausnahmen richten sich Programmiersprachen – die für Natural Language Programming entwickelt wurden – nach der Syntax der englischen Sprache. Sie unterscheiden sich untereinander oft nur in Nuancen. Deshalb können Programme beliebigen Personen vorgelesen und zugleich von einem Computer ausgeführt werden.

Abgesehen von der Syntax ist es als Entwickler wichtig, sich der Ontologie bewusst zu sein, die jeder dieser Sprachen zugrunde liegt. Ein dadurch entstehendes, generisches System macht es erst möglich, Computerprogramme auf Basis von NLP zu schreiben. Sätze innerhalb einer Ontologie zeichnen sich dadurch aus, dass sie immer entweder einen Zusammenhang herstellen, eine Aktion ausführen oder eine Frage beantworten.

Was sind Beispiele für Natural Language Programming?

  • Transcript ist eine der bekanntesten Programmiersprachen des Natural Language Programmings. Die darauf basierende integrierte Entwicklungsumgenung LiveCode wird in einem Drittel der schottischen Schulen für Lernzwecke eingesetzt.
  • Inform 7 ist eine objektorientierte Sprache, die für die Entwicklung von Textadventures vorgesehen ist. In diesem Computerspielgenre navigiert sich der Spieler mit Texteingaben durch das Spielgeschehen. Dank unterschiedlicher Sprachversionen kann u.a. auch auf Deutsch „programmiert“ werden.
  • AppleScript zeigt als Bestandteil des Apple Betriebssystems macOS, wie weit verbreitet NLP war und immer noch ist. Es kann bspw. für die Automatisierung von sich wiederholenden Aufgaben eingesetzt werden, erhielt jedoch seit einiger Zeit kein Update mehr.
  • HyperTalk ist ebenfalls von Apple entwickelt und mit den Möglichkeiten einer prozeduralen Programmierung ausgestattet (das heißt for/while/until, if/then/else, sowie Funktions-Handler stehen zur Verfügung).
  • SenseTalk ist ein weiterer Vertreter der hohen Skriptsprachen und kann sowohl objektorientiert als auch prozedural geschrieben werden.
  • Verschiedene Frameworks erlauben es, bekannte Sprachen wie Python für Natural Language Programming einzusetzen. Quepy macht aus Python-Code bspw. Datenbankabfragen.

Neurowissenschaften

Was sind Neurowissenschaften?

Der Begriff „Neurowissenschaften“ bezieht sich auf die wissenschaftliche Erforschung des Nervensystems. Er setzt sich aus den Wörtern „Neuron“ (Nerv) und „Wissenschaft“ zusammen.

Die Neurowissenschaften befassen sich mit allen wissenschaftlichen Aspekten des Nervensystems, einschließlich der molekularen, zellulären, funktionellen und strukturellen Elemente sowie der evolutionären, medizinischen und rechnerischen Aspekte.

Das Nervensystem ist eine Ansammlung miteinander verbundener Neuronen, die untereinander und mit anderen Zellen über spezialisierte synaptische Verbindungen kommunizieren. Die Neuronen projizieren lange Fäden, die sogenannten Axone, die weit entfernte Teile des Körpers erreichen und Signale weiterleiten können, die die neuronale und muskuläre Aktivität an ihren Endpunkten beeinflussen.

Alle Elemente des Nervensystems werden so von Neurowissenschaftlern erforscht, um zu verstehen, wie es strukturiert ist, wie es funktioniert, wie es sich bildet und wie es verändert werden kann.

Einige Beispiele für relevante Bereiche sind:

  1. Neuronale Signalübertragung und axonale Vernetzungsmuster
  2. Neuronale Entwicklung und biologische Funktion
  3. Bildung neuronaler Schaltkreise und funktionelle Rolle bei Reflexen, Wahrnehmung, Gedächtnis, Lernen und emotionaler Reaktion
  4. Kognitiven Neurowissenschaften, die sich mit psychologischen Funktionen im Zusammenhang mit neuronalen Schaltkreisen befassen
  5. Bildgebung des Gehirns bei der Diagnose von Krankheiten

Was sind Methoden der Neurowissenschaften?

fMRI:
Die funktionelle Magnetresonanztomographie misst die neuronale Aktivität, indem sie Veränderungen der Durchblutung des Gehirns feststellt. Unterschiede in den magnetischen Eigenschaften von Hämoglobin werden unter einem starken Magnetfeld in einem Scanner erkannt.

PET:
Bei der Positronen-Emissions-Tomographie werden in den Blutkreislauf injizierte Radiotracer vom Körper absorbiert, und die von ihnen ausgesandten Gammastrahlen werden vom System erfasst.

TMS:
Bei der transkraniellen Magnetstimulation erzeugt ein auf den Schädel gehaltener elektromagnetischer Kragen elektrische Ströme in der darunter liegenden Hirnregion und moduliert die neuronale Aktivität, um deren Funktionsweise und Konnektivität zu untersuchen.

Optogenetik:
Die Optogenetik ist eine Kombination von Konzepten aus der Optik und der Genetik und ist eine Technik, die Licht zur präzisen Modulation von Neuronen einsetzt, die genetisch so verändert wurden, dass sie ein lichtempfindliches Molekül in Tiermodellen exprimieren.

Elektrophysiologie:
Bei der Patch-Clamp-Aufzeichnung und ihren Vertretern wird eine Mikroelektrode verwendet, um die Ionenkanaleigenschaften einer „geflickten“ Zellmembran zu untersuchen und die Merkmale einzelner Neuronen im Gehirn zu erfassen. Die jüngste Entwicklung von Multielektroden-Arrays hat es den Forschern ermöglicht, die Aktivität vieler Neuronen gleichzeitig aufzuzeichnen.

Welche Disziplinen gehören zu den Neurowissenschaften?

Die Neurowissenschaften können zum Verständnis der zugrundeliegenden Mechanismen des menschlichen Gehirns in folgende sich überschneidende Bereiche gegliedert werden:

  • Verhaltens-/ kognitiven Neurowissenschaften
  • zelluläre und molekulare Neurowissenschaften
  • Systemneurowissenschaften
  • translationale und klinische Wissenschaften
  • Neuroinformatik

Neurowissenschaftler sind im Wesentlichen Grundlagenforscher, die in der Regel über einen Doktortitel in Neurowissenschaften oder einem verwandten Fachgebiet verfügen. Sie können dann in der Post-Doc-Forschung arbeiten oder sich als Mediziner weiterbilden und sich später auf Neurowissenschaften spezialisieren.

Diese tragen häufig dazu bei, die genetischen Grundlagen vieler neurologischer Krankheiten, wie der Alzheimer-Krankheit zu verstehen und Strategien für die Heilung und Behandlung zu ermitteln. Neurowissenschaftler können auch an der Erforschung von psychischen Störungen wie Schizophrenie oder Verhaltensstörungen beteiligt sein.

Naive Bayes

Was ist Naive Bayes?

Naive Bayes ist ein probates Mittel in der Künstlichen Intelligenz (KI) mit dem Klassifikationen vorgenommen werden können. So stellt der Bayes-Klassifikator eine Technik des maschinellen Lernens dar. Es können Objekte wie Textdokumente in zwei oder mehr Klassen eingeteilt werden. Durch die Analyse spezieller Trainingsdaten, bei denen richtige Klassen vorgegeben sind, lernt der Klassifikator. Der naive Bayes-Klassifikator kommt dann zum Einsatz, wenn Wahrscheinlichkeiten von Klassen anhand einer Reihe von bestimmten Beobachtungen gemacht werden.

Das Modell beruht auf der Annahme, dass Variablen je nach Klasse nämlich bedingt unabhängig sind. Um den Bayes-Klassifikator zu definieren, benötigt man ein Kostenmaß, das jeder vorstellbaren Klassifizierung Kosten zuweist. Ein Bayes-Klassifikator ist dabei der Klassifikator, der alle durch Klassifizierungen aufkommenden Kosten minimiert. Das Kostenmaß wird auch Risikofunktion genannt.

Der Bayes-Klassifikator minimiert das Risiko einer Fehlentscheidung und ist über das Minimum-risk-Kriterium definiert. Wenn ein primitives Kostenmaß eingesetzt wird, das praktisch ausschließlich bei Fehlentscheidungen Kosten verursacht, dann minimiert ein Bayes-Klassifikator die Wahrscheinlichkeit von Fehlentscheidungen. Dann sagt man, der Klassifikator ist über das Maximum-a-posteriori-Kriterium definiert.

Welche Anwendungen gibt es für Naive Bayes?

Naive Bayes wird häufig für Spam-Klassifizierung eingesetzt. So nutzen Spamfilter häufig den naiven Bayes-Klassifikator. Die Klassenvariable zeigt an, ob eine Nachricht Spam oder erwünscht ist. Alle Wörter in dieser Nachricht entsprechen den Variablen, wobei die Anzahl an Variablen im Modell durch die entsprechende Länge der Nachricht bestimmt sind.

Welche Varianten gibt es?

Es gibt den:

  • Gaussian Naive Bayes
  • Multinomial Naive Bayes
  • Bernoulli Naive Bayes
  • Complement Naive Bayes
  • Categorical Naive Bayes

Wie funktioniert Naive Bayes?

Die Technik benutzt alle gegebenen Attribute. Es gibt zwei Annahmen über diese Attribute. Einerseits sind alle Attribute in der Annahme gleich wichtig. Andererseits sind die Attribute statistisch unabhängig, was bedeutet, dass die Kenntnis eines Wertes nichts über den Wert von einem anderen Attribut aussagt. Diese Unabhängigkeitsannahme stimmt allerdings nie. Dennoch funktioniert dieses Verfahren in der Praxis gut! Zudem kann es gut mit fehlenden Werten arbeiten.

Ein Beispiel ist eine Trainings-Datenmenge von Wetter und der Möglichkeit ein Sportspiel bei schönem Wetter durchzuführen. Der erste Schritt besteht darin, die Daten in eine Häufigkeitstabelle umzuwandeln. Eine Wahrscheinlichkeitstabelle wird danach im zweiten Schritt erzeugt mit der Suche nach Wahrscheinlichkeiten wie bedecktes Wetter (0.29) und der Wahrscheinlichkeit fürs Spielen von (0.64). Im dritten Schritt wird die Naive Bayes Gleichung verwendet, um die Posterior Wahrscheinlichkeit für jede Klasse zu berechnen. Die Klasse mit der höchsten Posterior Wahrscheinlichkeit ist das Ergebnis der Vorhersage.