Bayes-Filter für Geocaches

Die Idee, einen Bayes-Filter für Geocaches zu schreiben, ist mir bei einer Diskussion im Geoclub gekommen.

Das Problem ist doch folgendes: Im Umkreis von nur einigen Kilometern haben selbst erfahrene Geocacher tausende von ungefundenen Caches liegen. Darunter können wahre Perlen absolut untergehen, ohne dass man jemals auf sie aufmerksam wird.

Mein Bayes-Filter kann nun eine GPX-Datei einer sogenannten Bayes-Analyse unterziehen. Das ist letztendlich dasselbe Verfahren, was E-Mail-Programme wie z.B. Thunderbird für Spam-Erkennung benutzen! D.h. der Filter wird mit zwei weiteren GPX-Dateien mit Caches, die man - nach den persönlichen Maßstäben - für besonders gut bzw. besonders schlecht hält, "trainiert" und kann mit dieser Information eine GPX-Datei mit ungefundenen Caches analysieren. Das Ergebnis der Analyse ist dann die vierte GPX-Datei, die Caches enthält, von denen der Filter meint, dass man sie eigentlich gut finden müsste.

Der Filter ist ein Perl-Script. Dies bedeutet erstens, dass man es von der Kommandozeile aufrufen muss, zweitens, dass man - besonders unter Windows - zunächst einen sogenannten Perl-Interpreter installieren muss. Daher werde ich im folgenden eine kleine Anleitung zur Installation und zum Aufruf veröffentlichen.

Installation

Der Filter selbst kann von hier als ZIP-Datei geladen werden. Einfach auf ein beliebiges Verzeichnis herunterladen und mit einem beliebigen ZIP-Programm auspacken.

Zur Ausführung ist ein Perl-Interpreter vonnöten. Unter Linux sollte dieser in der Regel installiert sein, unter Windows sollte Strawberry Perl als PortableZIP (im Zweifelsfalle die 32-Bit-Version) verwendet werden. Auch hier lädt man eine ZIP-Datei, die man am besten auf dasselbe Verzeichnis wie den Filter ablegen sollte und ebenfalls mit einem ZIP-Programm auspacken kann.

Jetzt kommt der schwierigste Schritt: Unter Perl müssen noch zwei sogenannte Perl-Module nachinstalliert werden, und zwar XML::DOM und Algorithm::NaiveBayes . Dies macht man mit dem Kommando "cpan". Dies kann unter Linux direkt in einer root-Shell eingegeben werden, unter Windows klickt man in dem Verzeichnis, auf das man Strawberry Perl installiert hat, auf die Datei portableshell.bat . Daraufhin öffnet sich eine spezielle "Eingabeeinforderung", in der man "cpan" aufrufen kann - einfach als cpan ohne Anführungszeichen als Kommando eingeben und Return drücken.

Es erscheint dann ein cpan-Prompt, auf dem man folgende Kommandos eingibt:

cpan[1]> install XML::DOM
cpan[2]> install Algorithm::NaiveBayes
cpan[3]> exit

(die Zahl wird pro Kommando hochgezählt). Es erscheinen unter Umständen eine Menge Meldungen, bevor der Modul hoffentlich erfolgreich installiert wurde.

Damit ist der Bayes-Filter dann bereit zum Aufruf.

Aufruf

Das Script wird nun per Kommandozeil aufgerufen - unter Linux unter einer beliebigen Shell, unter Windows sollte - wie bereits oben beschrieben - portableshell.bat durch Anklicken gestartet werden.

Der Aufruf sieht beispielhaft wie folgt aus:

perl bayes.pl gut.gpx schlecht.gpx zuuntersuchen.gpx ergebnis.gpx

D.h. es müssen Dateinamen von vier GPX-Dateien angegeben werden - drei existierende und eine zu erzeugende:

gut.gpx steht für eine Datei mit Caches, die man selber für sehr gut hält - dies kann z.B. eine Pocket-Query aus einer Bookmark-Liste der eigenen Favoriten sein.

schlecht.gpx steht ganz analog dazu für eine Datei mit Caches, die man selber für sehr schlecht hält. Hier könnte man z.B. eine Pocket-Query der eigenen Ignore-Liste verwenden, sofern man eine solche verwendet und mit etlichen Caches gefüllt hat.

WICHTIG: Die Datei mit den schlechten Caches sollte, um ein gutes Ergebnis zu erreichen, ca. fünf mal so groß sein wie die mit den guten Caches! Dann lernt das Programm nämlich, dass es nur wenige gute Caches gibt...

zuuntersuchen.gpx ist schließlich die Datei, die auf gute Caches untersucht werden soll - z.B. die normale Pocket-Query mit zu erledigenden Caches oder auch eine Kombination mehrerer PQs.

Die vierte Datei, im Beispiel ergebnis.gpx wird vom Programm angelegt und enthält nach dem Filter-Lauf das Ergebnis - eine Teilmenge von zuuntersichen.gpx mit Caches, die der Filter aufgrund seiner Analyse für gut hält.

Seit Version 0.3 kann auch optional ein fünfter Parameter angegeben werden. Ist er angegeben, so beschreibt er eine weitere Ausgabe-Datei. Diese ist aber keine GPX-Datei, sondern ein GSAK-Macro, was die vom Script ermittelten Werte in GSAK importiert, wenn es von dort als Macro aufgerufen wird. Daher sollte hier die Extension .gsk benutzt werden. Es werden folgende Felder benutzt: UserData enthält die Wahrscheinlichkeit, dass der Cache gut ist, User2 die Wahrscheinlichkeit, dass der Cache schlecht ist (mit negativem Vorzeichen) und User3 die auf Prozentwerte skalierte Differenz der vorgenannten Werte. Es kann dann nach diesen Werten sortiert werden oder man kann Filter oder eigene Macros entwerfen, die diese Werte benutzen.

Das Programm hat in meinen Tests erstaunlich gute Ergebnisse geliefert. Das muss nicht für jeden gelten. Außerdem mag es immer noch Fehler im Programm geben. Sollte das Programm dennoch nützlich sein, würde ich mich freuen.

Über Feedback per Mail freue ich mich.

Letzte Aenderung: 23.05.2019, 05:53 Uhr