Wie lässt sich die Algorithmusentwicklung skalieren?


18

Wenn ich an der explorativen Datenanalyse arbeite und Algorithmen entwickle, verbringe ich den größten Teil meiner Zeit mit Visualisieren, Schreiben von Code, Ausführen eines kleinen Datensatzes und Wiederholen. Bei den Daten handelt es sich in der Regel um Computer-Vision- / Sensor-Fusion-Daten, und Algorithmen sind sehr visuell (z. B. Objekterkennung und -verfolgung usw.), und die Standardalgorithmen funktionieren in diesem Zusammenhang nicht. Ich finde, dass dies viele Iterationen erfordert (zum Beispiel, um den Typ des Algorithmus einzuwählen oder die Parameter im Algorithmus abzustimmen, oder um eine korrekte Visualisierung zu erzielen), und auch die Laufzeiten selbst bei einem kleinen Datensatz sind ziemlich lang Alles in allem dauert es eine Weile.

Wie kann die Algorithmusentwicklung selbst beschleunigt und skalierbarer gemacht werden?

Einige spezifische Herausforderungen:

Wie kann die Anzahl der Iterationen reduziert werden? (Vor allem, wenn es nicht einfach ist, einen Algorithmus zu finden, geschweige denn seine Besonderheiten zu beschreiben, ohne verschiedene Versionen auszuprobieren und ihr Verhalten zu untersuchen.)

Wie kann ich während der Entwicklung auf größeren Datensätzen arbeiten? (Oft wird von einem kleinen zu einem großen Datensatz gewechselt, wenn eine Reihe neuer Verhaltensweisen und Probleme auftreten.)

Wie können Algorithmusparameter schneller eingestellt werden?

Wie können Tools für maschinelles Lernen auf die Algorithmusentwicklung selbst angewendet werden? (Anstatt den Algorithmus beispielsweise von Hand zu schreiben, schreiben Sie einige einfache Bausteine ​​und kombinieren Sie sie auf eine Weise, die Sie aus dem Problem usw. gelernt haben.)

Antworten:


7

Erstens, wenn Ihre Daten so viele Variationen aufweisen (in Abhängigkeit von Zeit, Kontext und anderen), dass es schwierig ist, eine einzelne Strategie anzuwenden, um damit umzugehen, sind Sie möglicherweise daran interessiert, eine vorherige zeitliche / kontextbezogene / .. Charakterisierung des Datensatzes. Das Charakterisieren von Daten, dh das Extrahieren von Informationen darüber, wie sich das Volumen oder die Spezifika des Inhalts nach bestimmten Kriterien ändern, bietet in der Regel ein besseres Verständnis (genauer und präziser) als das bloße Ableiten von Algorithmen auf Brute-Force-Weise.

Beantworten Sie also jede Frage:

  1. Die Charakterisierung ist definitiv ein Mittel, um die Anzahl der Iterationen zu verringern, während versucht wird, geeignete Algorithmen für bestimmte Daten auszuwählen.
  2. Wenn Sie eine Reihe von Kriterien haben, bei denen Ihre Daten variieren, ist es viel einfacher, Lösungen zu skalieren , da Sie wissen, welche Informationen Sie erhalten / verlieren würden, wenn einfachere / spezifische Lösungen angewendet würden.
  3. Nach einer Charakterisierung sollte es auch einfacher sein, Parameter auszuwählen, da Sie wissen, mit welchen spezifischen Daten Sie es zu tun haben.
  4. Schließlich können Sie Data Mining / Machine Learning-Algorithmen verwenden, um diese Charakterisierung zu unterstützen. Dies beinhaltet die Verwendung von:
    • Clustering-Algorithmen zur Reduzierung der Dimensionalität von Daten;
    • Klassifizierungsalgorithmen, um bei der Entscheidung über bestimmte Eigenschaften zu helfen, die die Daten in Abhängigkeit von Zeit / Kontext / ... darstellen können;
    • Assoziationsregeln, um bestimmte Kenntnisse aus dem Datensatz vorherzusagen und gleichzeitig die für die spätere Analyse verwendeten Daten zu verbessern / zu verfeinern;
    • und andere mögliche Strategien und Analysen.

Und hier finden Sie eine Liste mit Kriterien, anhand derer Sie Daten analysieren können, die Sie möglicherweise hilfreich finden.


5

Zwei Dinge, die Sie vielleicht nützlich finden:

  1. Meta-Learning , um die Suche nach dem richtigen Modell und den optimalen Parametern zu beschleunigen. Meta-Lernen besteht darin, maschinelle Lernwerkzeuge auf das Problem anzuwenden, das richtige maschinelle Lernwerkzeug / die richtigen Parameter für das jeweilige Problem zu finden. Dies zum Beispiel dieses Papier für ein praktisches Beispiel;

  2. gpucomputing zur Beschleunigung des Algorithmus bei größeren Datenmengen. OpenCV kann zum Beispiel GPUs verwenden , die sich sehr gut für die Verarbeitung von Bildern / Videos eignen und die CPU-Geschwindigkeit um 10 bis 100 steigern. Da Ihr Computer höchstwahrscheinlich über eine GPU verfügt, die für GPUs geeignet ist, können Sie viel Zeit damit gewinnen.


4

Vermutlich haben Sie diese YouTube-Demo und den zugehörigen Google Tech Talk gesehen , der sich auf folgende Artikel bezieht:

Und dieser Code auf GitHub für OpenTLD . Wenn Sie hier auf GitHub das Kontrollkästchen " Lies mich" aktivieren , werden Sie feststellen, dass die E-Mail des Autors (Zdenek Kalal) aufgeführt ist. Es lohnt sich daher möglicherweise, ihm eine E-Mail zu Ihren Fragen zu senden oder ihn sogar einzuladen, diese Frage zu beantworten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.